From be7f08bae30efc213caa6016014f59f6ed4c3bd0 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Wed, 14 Jul 2021 15:03:51 +0200 Subject: [PATCH 01/14] deps: add rn-testing-library dependencies --- package.json | 2 ++ yarn.lock | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9f6b21748e2..53ade7c7457 100644 --- a/package.json +++ b/package.json @@ -162,6 +162,8 @@ "@octokit/rest": "16.34.0", "@omakase/cli": "0.0.10", "@react-native-community/cli-platform-ios": "3.0.0", + "@testing-library/jest-native": "^4.0.1", + "@testing-library/react-native": "^7.2.0", "@types/argparse": "^2.0.8", "@types/chalk": "2.2.0", "@types/dedent": "0.7.0", diff --git a/yarn.lock b/yarn.lock index 3fe747a4539..a6c413677a6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2942,6 +2942,25 @@ "@styled-system/core" "^5.1.2" "@styled-system/css" "^5.1.5" +"@testing-library/jest-native@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@testing-library/jest-native/-/jest-native-4.0.1.tgz#000902622cb44f0d723a9f0e9eb8699f3ea511ae" + integrity sha512-dqeVpMSb8nZ1QxvzHxiKb4MqepNfFt8MeUwq9r/BTIOIrUFjDRDSpReZXVv9tcQypz2BcjbNK7BAEvyLSF33hQ== + dependencies: + chalk "^2.4.1" + jest-diff "^24.0.0" + jest-matcher-utils "^24.0.0" + pretty-format "^24.0.0" + ramda "^0.26.1" + redent "^2.0.0" + +"@testing-library/react-native@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-7.2.0.tgz#e5ec5b0974e4e5f525f8057563417d1e9f820d96" + integrity sha512-rDKzJjAAeGgyoJT0gFQiMsIL09chdWcwZyYx6WZHMgm2c5NDqY52hUuyTkzhqddMYWmSRklFphSg7B2HX+246Q== + dependencies: + pretty-format "^26.0.1" + "@turf/along@>= 4.0.0 <7.0.0": version "6.0.1" resolved "https://registry.yarnpkg.com/@turf/along/-/along-6.0.1.tgz#595cecdc48fc7fcfa83c940a8e3eb24d4c2e04d4" @@ -5617,6 +5636,11 @@ devtools-protocol@0.0.847576: resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.847576.tgz#2f201bfb68aa9ef4497199fbd7f5d5dfde3b200b" integrity sha512-0M8kobnSQE0Jmly7Mhbeq0W/PpZfnuK+WjN2ZRVPbGqYwCHCioAVp84H0TcLimgECcN5H976y5QiXMGBC9JKmg== +diff-sequences@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" + integrity sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew== + diff-sequences@^25.1.0, diff-sequences@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd" @@ -8194,6 +8218,16 @@ jest-diff@25.1.0: jest-get-type "^25.1.0" pretty-format "^25.1.0" +jest-diff@^24.0.0, jest-diff@^24.9.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.9.0.tgz#931b7d0d5778a1baf7452cb816e325e3724055da" + integrity sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ== + dependencies: + chalk "^2.0.1" + diff-sequences "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + jest-diff@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.2.6.tgz#a6d70a9ab74507715ea1092ac513d1ab81c1b5e7" @@ -8347,6 +8381,16 @@ jest-matcher-utils@21.3.0-beta.15: jest-get-type "21.3.0-beta.15" pretty-format "21.3.0-beta.15" +jest-matcher-utils@^24.0.0: + version "24.9.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz#f5b3661d5e628dffe6dd65251dfdae0e87c3a073" + integrity sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA== + dependencies: + chalk "^2.0.1" + jest-diff "^24.9.0" + jest-get-type "^24.9.0" + pretty-format "^24.9.0" + jest-matcher-utils@^25.2.7: version "25.2.7" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.2.7.tgz#53fad3c11fc42e92e374306df543026712c957a3" @@ -11555,7 +11599,7 @@ pretty-format@^20.0.3: ansi-regex "^2.1.1" ansi-styles "^3.0.0" -pretty-format@^24.7.0, pretty-format@^24.9.0: +pretty-format@^24.0.0, pretty-format@^24.7.0, pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" integrity sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA== @@ -11575,7 +11619,7 @@ pretty-format@^25.1.0, pretty-format@^25.2.0, pretty-format@^25.2.6: ansi-styles "^4.0.0" react-is "^16.12.0" -pretty-format@^26.6.2: +pretty-format@^26.0.1, pretty-format@^26.6.2: version "26.6.2" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== @@ -11795,6 +11839,11 @@ railroad-diagrams@^1.0.0: resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= +ramda@^0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + randexp@^0.4.2: version "0.4.9" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.9.tgz#327326358e190c685c2069e1f9b45c5190c517b2" From 6deceda5cae1a8460b6e2bc24fd34f89ab83b68b Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Wed, 14 Jul 2021 15:04:20 +0200 Subject: [PATCH 02/14] chore: setup rn-testing-library --- jest.config.js | 2 +- src/setupJest.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jest.config.js b/jest.config.js index 521739ca394..8488f3e0d1b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -11,7 +11,7 @@ module.exports = { testMatch: ["/src/**/__tests__/*tests.(ts|tsx|js)", "/scripts/**/*tests.(ts|tsx|js)", "/__tests__/**/*tests.(ts|tsx|js)"], testEnvironment: "jsdom", testURL: "http://localhost/", - setupFilesAfterEnv: ["./src/setupJest.ts"], + setupFilesAfterEnv: ["./src/setupJest.ts", "@testing-library/jest-native/extend-expect"], cacheDirectory: ".jest/cache", transform: { "^[./a-zA-Z0-9$_-]+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$": diff --git a/src/setupJest.ts b/src/setupJest.ts index 2109874ba58..49654c1077d 100644 --- a/src/setupJest.ts +++ b/src/setupJest.ts @@ -6,7 +6,7 @@ // declare var babelHelpers: any // Object.assign(babelHelpers, { applyDecoratedDescriptor, initializerDefineProperty }) // import "@babel/runtime" - +import "@testing-library/jest-native/extend-expect" import chalk from "chalk" // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import Enzyme from "enzyme" From 95370718b31fed8f63cbe4fa521c814149281fea Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Wed, 14 Jul 2021 15:04:59 +0200 Subject: [PATCH 03/14] feat: add renderWithWrappersTL --- src/lib/tests/renderWithWrappers.tsx | 44 ++++++++++++++++++---------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/lib/tests/renderWithWrappers.tsx b/src/lib/tests/renderWithWrappers.tsx index 07371c1e75b..f1b414e7bd5 100644 --- a/src/lib/tests/renderWithWrappers.tsx +++ b/src/lib/tests/renderWithWrappers.tsx @@ -1,3 +1,4 @@ +import { render } from "@testing-library/react-native" import { PopoverMessageProvider } from "lib/Components/PopoverMessage/PopoverMessageProvider" import { ToastProvider } from "lib/Components/Toast/toastHook" import { GlobalStoreProvider } from "lib/store/GlobalStore" @@ -8,6 +9,30 @@ import React from "react" import ReactTestRenderer from "react-test-renderer" import { ReactElement } from "simple-markdown" +export const Wrappers: React.FC = ({ children }) => { + return ( + + + + + + {children} + + + + + + ) +} + +/** + * Returns given component wrapped with our page wrappers + * @param component + */ +export const componentWithWrappers = (component: ReactElement) => { + return {component} +} + /** * Renders a React Component with our page wrappers * @param component @@ -44,21 +69,10 @@ export const TrackProvider = track()(({ children }: { children?: React.ReactNode }) /** - * Returns given component wrapped with our page wrappers + * Renders a React Component with our page wrappers + * by using @testing-library/react-native * @param component */ -export const componentWithWrappers = (component: ReactElement) => { - return ( - - - - - - {component} - - - - - - ) +export const renderWithWrappersTL = (component: ReactElement) => { + return render(component, { wrapper: Wrappers }) } From fbb27311f2222324b645ceb2ed5aa366618e624e Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 10:32:31 +0200 Subject: [PATCH 04/14] fix: changed rntl version --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 53ade7c7457..139bf926e7e 100644 --- a/package.json +++ b/package.json @@ -163,7 +163,7 @@ "@omakase/cli": "0.0.10", "@react-native-community/cli-platform-ios": "3.0.0", "@testing-library/jest-native": "^4.0.1", - "@testing-library/react-native": "^7.2.0", + "@testing-library/react-native": "7.1.0", "@types/argparse": "^2.0.8", "@types/chalk": "2.2.0", "@types/dedent": "0.7.0", diff --git a/yarn.lock b/yarn.lock index a6c413677a6..ce6b301fbe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2954,10 +2954,10 @@ ramda "^0.26.1" redent "^2.0.0" -"@testing-library/react-native@^7.2.0": - version "7.2.0" - resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-7.2.0.tgz#e5ec5b0974e4e5f525f8057563417d1e9f820d96" - integrity sha512-rDKzJjAAeGgyoJT0gFQiMsIL09chdWcwZyYx6WZHMgm2c5NDqY52hUuyTkzhqddMYWmSRklFphSg7B2HX+246Q== +"@testing-library/react-native@7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/react-native/-/react-native-7.1.0.tgz#6b168aac21522c8a5175461b350336fd79612ac9" + integrity sha512-ljVM9KZqG7BT/NFN6CHzdF6MNmM28+k7MEybFJ7FW1wVrhpiY4+hU9ypZ+hboO+MG3KpE2aFBzP4od3gu+Zzdg== dependencies: pretty-format "^26.0.1" From 1efe880b55cef150b282122bd92159fcd675cedd Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 12:45:15 +0200 Subject: [PATCH 05/14] chore: removed test that doesn't add value --- .../OrderDetails/__tests__/OrderDetails-tests.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx b/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx index 3c68a22847f..5bc499de749 100644 --- a/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx +++ b/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx @@ -123,8 +123,4 @@ describe(OrderDetailsQueryRender, () => { const tree = renderWithWrappers() expect(tree.root.findAllByType(OrderDetailsPlaceholder)).toHaveLength(1) }) - it("Loads OrderHistoryQueryRender with PageWithSimpleHeader", () => { - const tree = renderWithWrappers() - expect(tree.root.findAllByType(PageWithSimpleHeader)).toHaveLength(1) - }) }) From 7164f9a2862785049c228ba88d7dbdc72bb98a59 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 12:54:22 +0200 Subject: [PATCH 06/14] fix: removed unused import --- .../OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx b/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx index 5bc499de749..b30a7608fef 100644 --- a/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx +++ b/src/lib/Scenes/OrderHistory/OrderDetails/__tests__/OrderDetails-tests.tsx @@ -1,5 +1,4 @@ import { OrderDetailsTestsQuery } from "__generated__/OrderDetailsTestsQuery.graphql" -import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { extractText } from "lib/tests/extractText" import { mockEnvironmentPayload } from "lib/tests/mockEnvironmentPayload" import { renderWithWrappers } from "lib/tests/renderWithWrappers" From 4f6882389a44bec49bf28bb61fbc17607c73e8c0 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 13:02:17 +0200 Subject: [PATCH 07/14] chore: testing out stuff --- src/lib/tests/renderWithWrappers.tsx | 4 ++++ src/setupJest.ts | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/lib/tests/renderWithWrappers.tsx b/src/lib/tests/renderWithWrappers.tsx index f1b414e7bd5..c932c4cd61a 100644 --- a/src/lib/tests/renderWithWrappers.tsx +++ b/src/lib/tests/renderWithWrappers.tsx @@ -1,16 +1,19 @@ import { render } from "@testing-library/react-native" import { PopoverMessageProvider } from "lib/Components/PopoverMessage/PopoverMessageProvider" import { ToastProvider } from "lib/Components/Toast/toastHook" +// import { defaultEnvironment } from "lib/relay/createEnvironment" import { GlobalStoreProvider } from "lib/store/GlobalStore" import { track } from "lib/utils/track" import { ProvideScreenDimensions } from "lib/utils/useScreenDimensions" import { Theme } from "palette" import React from "react" import ReactTestRenderer from "react-test-renderer" +// import { RelayEnvironmentProvider } from "relay-hooks" import { ReactElement } from "simple-markdown" export const Wrappers: React.FC = ({ children }) => { return ( + // @@ -22,6 +25,7 @@ export const Wrappers: React.FC = ({ children }) => { + // ) } diff --git a/src/setupJest.ts b/src/setupJest.ts index 49654c1077d..fbe2fbf0088 100644 --- a/src/setupJest.ts +++ b/src/setupJest.ts @@ -206,6 +206,7 @@ import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { postEventToProviders } from "lib/utils/track/providers" import { ScreenDimensionsWithSafeAreas } from "lib/utils/useScreenDimensions" import { NativeModules } from "react-native" +import { createMockEnvironment } from "relay-test-utils" type OurNativeModules = typeof LegacyNativeModules & { ArtsyNativeModule: typeof ArtsyNativeModule } @@ -281,6 +282,10 @@ function getNativeModules(): OurNativeModules { lockActivityScreenOrientation: jest.fn(), gitCommitShortHash: "de4dc0de", }, + // ARGraphQLQueryCache: { + // _setResponseForQueryIDWithVariables: jest.fn(() => ({ wow: 1 })), + // _responseForQueryIDWithVariables: jest.fn(() => ({ wow: 5 })), + // }, } } @@ -296,6 +301,18 @@ jest.mock("lib/navigation/navigate", () => ({ SlugType: { partner: "partner", fair: "fair" }, })) +// let mockDefaultEnvironment: ReturnType + +// jest.mock("lib/relay/createEnvironment", () => { +// return { +// defaultEnvironment: mockDefaultEnvironment, +// } +// }) + +// beforeEach(() => { +// mockDefaultEnvironment = createMockEnvironment() +// }) + Object.assign(NativeModules, getNativeModules()) const _ = jest.requireActual("lodash") From 7e85c90a0d214b524080fc3c5cbe29ce48d8ab1a Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 13:04:52 +0200 Subject: [PATCH 08/14] chore: remove unused import --- src/setupJest.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/setupJest.ts b/src/setupJest.ts index fbe2fbf0088..b597458e095 100644 --- a/src/setupJest.ts +++ b/src/setupJest.ts @@ -206,7 +206,6 @@ import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { postEventToProviders } from "lib/utils/track/providers" import { ScreenDimensionsWithSafeAreas } from "lib/utils/useScreenDimensions" import { NativeModules } from "react-native" -import { createMockEnvironment } from "relay-test-utils" type OurNativeModules = typeof LegacyNativeModules & { ArtsyNativeModule: typeof ArtsyNativeModule } From 8135db0451b6f689859c343b64908b8b34877de3 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 15 Jul 2021 21:27:06 +0200 Subject: [PATCH 09/14] fix: fixed timer problems --- .../__tests__/ArtsyReactWebView-tests.tsx | 45 ++++++++----------- .../__tests__/Composer-tests.tsx | 5 +-- src/lib/Scenes/Sale/__tests__/Sale-tests.tsx | 30 +++++++------ 3 files changed, 37 insertions(+), 43 deletions(-) diff --git a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx index f5db3f01a37..e62598700e0 100644 --- a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx +++ b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx @@ -1,3 +1,4 @@ +import { waitFor } from "@testing-library/react-native" import mockFetch from "jest-fetch-mock" import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { goBack, navigate } from "lib/navigation/navigate" @@ -40,7 +41,7 @@ describe(ArtsyReactWebViewPage, () => { it("shares the correct URL", () => { const tree = render({ showShareButton: true }) tree.root.findByType(FancyModalHeader).props.onRightButtonPress() - setTimeout(() => expect(jest.fn()).toHaveBeenCalledWith()) + waitFor(() => expect(jest.fn()).toHaveBeenCalledTimes(1)) }) it("calls goBack when the close/back button is pressed", () => { const tree = render() @@ -164,12 +165,6 @@ describe(ArtsyReactWebViewPage, () => { }) describe(useWebViewCookies, () => { - beforeAll(() => { - jest.useFakeTimers() - }) - afterAll(() => { - jest.useRealTimers() - }) beforeEach(() => { mockFetch.mockClear() }) @@ -182,13 +177,15 @@ describe(useWebViewCookies, () => { act(() => { renderWithWrappers() }) - expect(mockFetch).toHaveBeenCalledWith("https://staging.artsy.net", { - method: "HEAD", - headers: { "X-Access-Token": "userAccessToken" }, - }) - expect(mockFetch).toHaveBeenCalledWith("https://live-staging.artsy.net/login", { - method: "HEAD", - headers: { "X-Access-Token": "userAccessToken" }, + waitFor(() => { + expect(mockFetch).toHaveBeenCalledWith("https://staging.artsy.net", { + method: "HEAD", + headers: { "X-Access-Token": "userAccessToken" }, + }) + expect(mockFetch).toHaveBeenCalledWith("https://live-staging.artsy.net/login", { + method: "HEAD", + headers: { "X-Access-Token": "userAccessToken" }, + }) }) }) it("retries if it fails", async () => { @@ -196,32 +193,26 @@ describe(useWebViewCookies, () => { mockFetch.mockReturnValue(Promise.resolve({ ok: false, status: 500 } as any)) const tree = renderWithWrappers() await act(() => undefined) - expect(mockFetch).toHaveBeenCalledTimes(2) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(2)) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(4) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(4)) await act(() => undefined) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(6) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(6)) await act(() => undefined) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(8) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(8)) await act(() => undefined) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(10) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(10)) tree.unmount() await act(() => undefined) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(10) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(10)) await act(() => undefined) - jest.runOnlyPendingTimers() - expect(mockFetch).toHaveBeenCalledTimes(10) + waitFor(() => expect(mockFetch).toHaveBeenCalledTimes(10)) }) }) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/__tests__/Composer-tests.tsx b/src/lib/Scenes/Inbox/Components/Conversations/__tests__/Composer-tests.tsx index 68a094267e8..c976e1fe014 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/__tests__/Composer-tests.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/__tests__/Composer-tests.tsx @@ -1,3 +1,4 @@ +import { waitFor } from "@testing-library/react-native" import { ComposerTestsQuery } from "__generated__/ComposerTestsQuery.graphql" import { __globalStoreTestUtils__ } from "lib/store/GlobalStore" import { extractText } from "lib/tests/extractText" @@ -135,9 +136,7 @@ describe("inquiry offer enabled", () => { input.props.onFocus() - setTimeout(() => { - expect(tree.root.findAllByType(CTAPopUp)[0]).not.toBeDefined() - }, 0) + waitFor(() => expect(tree.root.findAllByType(CTAPopUp)[0]).not.toBeDefined()) }) describe("with associated orders (OrderCTAs)", () => { diff --git a/src/lib/Scenes/Sale/__tests__/Sale-tests.tsx b/src/lib/Scenes/Sale/__tests__/Sale-tests.tsx index c6d208ddc29..0bb35a4acf7 100644 --- a/src/lib/Scenes/Sale/__tests__/Sale-tests.tsx +++ b/src/lib/Scenes/Sale/__tests__/Sale-tests.tsx @@ -1,3 +1,4 @@ +import { waitFor } from "@testing-library/react-native" import { navigate, popParentViewController } from "lib/navigation/navigate" import { __globalStoreTestUtils__ } from "lib/store/GlobalStore" import { renderWithWrappers } from "lib/tests/renderWithWrappers" @@ -32,12 +33,10 @@ describe("Sale", () => { beforeEach(() => { mockEnvironment = createMockEnvironment() - jest.useFakeTimers() }) afterEach(() => { jest.clearAllMocks() - jest.useRealTimers() }) it("switches to live auction view when sale goes live", () => { @@ -60,10 +59,11 @@ describe("Sale", () => { ) expect(navigate).toHaveBeenCalledTimes(0) - jest.advanceTimersByTime(1000) - expect(navigate).toHaveBeenCalledTimes(1) - expect(navigate).toHaveBeenCalledWith("https://live-staging.artsy.net/live-sale-slug") - expect(popParentViewController).toHaveBeenCalledTimes(1) + waitFor(() => { + expect(navigate).toHaveBeenCalledTimes(1) + expect(navigate).toHaveBeenCalledWith("https://live-staging.artsy.net/live-sale-slug") + expect(popParentViewController).toHaveBeenCalledTimes(1) + }) }) it("switches to live auction view when sale goes live with no endAt", () => { @@ -87,10 +87,12 @@ describe("Sale", () => { ) expect(navigate).toHaveBeenCalledTimes(0) - jest.advanceTimersByTime(1000) - expect(navigate).toHaveBeenCalledTimes(1) - expect(navigate).toHaveBeenCalledWith("https://live-staging.artsy.net/live-sale-slug") - expect(popParentViewController).toHaveBeenCalledTimes(1) + + waitFor(() => { + expect(navigate).toHaveBeenCalledTimes(1) + expect(navigate).toHaveBeenCalledWith("https://live-staging.artsy.net/live-sale-slug") + expect(popParentViewController).toHaveBeenCalledTimes(1) + }) }) it("doesn't switch to live auction view when sale is closed", () => { @@ -110,9 +112,11 @@ describe("Sale", () => { ) expect(navigate).toHaveBeenCalledTimes(0) - jest.advanceTimersByTime(1000) - expect(navigate).toHaveBeenCalledTimes(0) - expect(popParentViewController).toHaveBeenCalledTimes(0) + + waitFor(() => { + expect(navigate).toHaveBeenCalledTimes(0) + expect(popParentViewController).toHaveBeenCalledTimes(0) + }) }) it("renders a Register button when registrations are open", () => { From cc394bbc86d3c0e1d5f7141af77768b01b1f503d Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 29 Jul 2021 18:32:17 +0200 Subject: [PATCH 10/14] spec: moved relay createEnv mock to setupJest --- .../Components/Bidding/Screens/__tests__/ConfirmBid-tests.tsx | 4 ---- src/lib/Scenes/Home/__tests__/Home-tests.tsx | 4 ---- src/lib/Scenes/MyProfile/__tests__/LoggedInUserInfo-tests.tsx | 4 ---- .../MyProfile/__tests__/MyProfilePushNotifications-tests.tsx | 4 ---- src/lib/Scenes/OrderHistory/__tests__/OrderHistory-tests.tsx | 4 ---- src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx | 4 ---- src/lib/Scenes/VanityURL/__tests__/VanityURLEntity-tests.tsx | 4 ---- .../middlewares/__tests__/metaphysicsMiddleware-tests.ts | 4 ---- src/setupJest.ts | 4 ++++ 9 files changed, 4 insertions(+), 32 deletions(-) diff --git a/src/lib/Components/Bidding/Screens/__tests__/ConfirmBid-tests.tsx b/src/lib/Components/Bidding/Screens/__tests__/ConfirmBid-tests.tsx index 62937dad45a..eacdd6f3d8d 100644 --- a/src/lib/Components/Bidding/Screens/__tests__/ConfirmBid-tests.tsx +++ b/src/lib/Components/Bidding/Screens/__tests__/ConfirmBid-tests.tsx @@ -1,7 +1,3 @@ -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - import { BidderPositionQueryResponse } from "__generated__/BidderPositionQuery.graphql" import { ConfirmBid_sale_artwork } from "__generated__/ConfirmBid_sale_artwork.graphql" import { ConfirmBidCreateBidderPositionMutationResponse } from "__generated__/ConfirmBidCreateBidderPositionMutation.graphql" diff --git a/src/lib/Scenes/Home/__tests__/Home-tests.tsx b/src/lib/Scenes/Home/__tests__/Home-tests.tsx index f14af16ab28..3684480c0ee 100644 --- a/src/lib/Scenes/Home/__tests__/Home-tests.tsx +++ b/src/lib/Scenes/Home/__tests__/Home-tests.tsx @@ -16,10 +16,6 @@ jest.mock("lib/Scenes/Home/Components/SalesRail", () => ({ SalesRailFragmentContainer: jest.fn(() => null), })) -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - import { EmailConfirmationBanner } from "lib/Scenes/Home/Components/EmailConfirmationBanner" import { SalesRailFragmentContainer } from "lib/Scenes/Home/Components/SalesRail" import { GlobalStoreProvider } from "lib/store/GlobalStore" diff --git a/src/lib/Scenes/MyProfile/__tests__/LoggedInUserInfo-tests.tsx b/src/lib/Scenes/MyProfile/__tests__/LoggedInUserInfo-tests.tsx index 7e4a62f112d..751dfa3bc76 100644 --- a/src/lib/Scenes/MyProfile/__tests__/LoggedInUserInfo-tests.tsx +++ b/src/lib/Scenes/MyProfile/__tests__/LoggedInUserInfo-tests.tsx @@ -8,10 +8,6 @@ import { act } from "react-test-renderer" import { createMockEnvironment } from "relay-test-utils" import { UserProfileQueryRenderer } from "../LoggedInUserInfo" -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - jest.unmock("react-relay") const env = (defaultEnvironment as any) as ReturnType diff --git a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx index f493fe0a701..e8e207ea386 100644 --- a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx +++ b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx @@ -14,10 +14,6 @@ import { PushAuthorizationStatus, } from "../MyProfilePushNotifications" -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - const mockFetchNotificationPermissions = LegacyNativeModules.ARTemporaryAPIModule .fetchNotificationPermissions as jest.Mock diff --git a/src/lib/Scenes/OrderHistory/__tests__/OrderHistory-tests.tsx b/src/lib/Scenes/OrderHistory/__tests__/OrderHistory-tests.tsx index de01c688bb5..b57f33922e0 100644 --- a/src/lib/Scenes/OrderHistory/__tests__/OrderHistory-tests.tsx +++ b/src/lib/Scenes/OrderHistory/__tests__/OrderHistory-tests.tsx @@ -13,10 +13,6 @@ import { OrderHistoryPlaceholder } from "../OrderHistory" import { OrderHistoryRowContainer } from "../OrderHistoryRow" jest.unmock("react-relay") -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - describe(OrderHistoryQueryRender, () => { it("Loads OrderHistoryQueryRender", () => { const tree = renderWithWrappers() diff --git a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx index 5d6f4cb804c..2a108ab0c9f 100644 --- a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx @@ -111,10 +111,6 @@ const TestWrapper: typeof AutosuggestResults = (props) => ( ) -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - jest.mock("lodash", () => ({ ...jest.requireActual("lodash"), throttle: (f: any) => f, diff --git a/src/lib/Scenes/VanityURL/__tests__/VanityURLEntity-tests.tsx b/src/lib/Scenes/VanityURL/__tests__/VanityURLEntity-tests.tsx index 240bc0ea020..100a2f2d2a0 100644 --- a/src/lib/Scenes/VanityURL/__tests__/VanityURLEntity-tests.tsx +++ b/src/lib/Scenes/VanityURL/__tests__/VanityURLEntity-tests.tsx @@ -12,10 +12,6 @@ import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" import { VanityURLEntityRenderer } from "../VanityURLEntity" import { VanityURLPossibleRedirect } from "../VanityURLPossibleRedirect" -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - jest.unmock("react-relay") jest.mock("../VanityURLPossibleRedirect", () => { diff --git a/src/lib/relay/middlewares/__tests__/metaphysicsMiddleware-tests.ts b/src/lib/relay/middlewares/__tests__/metaphysicsMiddleware-tests.ts index cfd06f7dbd1..679e712810d 100644 --- a/src/lib/relay/middlewares/__tests__/metaphysicsMiddleware-tests.ts +++ b/src/lib/relay/middlewares/__tests__/metaphysicsMiddleware-tests.ts @@ -1,10 +1,6 @@ import { persistedQueryMiddleware } from "../metaphysicsMiddleware" import { GraphQLRequest } from "../types" -jest.mock("lib/relay/createEnvironment", () => ({ - defaultEnvironment: require("relay-test-utils").createMockEnvironment(), -})) - jest.mock("../../../../../data/complete.queryMap.json", () => ({ "query-id": "persisted-query-text", })) diff --git a/src/setupJest.ts b/src/setupJest.ts index b597458e095..3f4dd5770e4 100644 --- a/src/setupJest.ts +++ b/src/setupJest.ts @@ -46,6 +46,10 @@ jest.mock("lib/utils/track/providers", () => ({ postEventToProviders: jest.fn(), })) +jest.mock("lib/relay/createEnvironment", () => ({ + defaultEnvironment: require("relay-test-utils").createMockEnvironment(), +})) + jest.mock("tipsi-stripe", () => ({ setOptions: jest.fn(), paymentRequestWithCardForm: jest.fn(), From 4a6a7e443b90a5da2fb84cbbfd90e904c1fcbd8e Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 29 Jul 2021 18:34:30 +0200 Subject: [PATCH 11/14] chore: cleanup --- src/lib/tests/renderWithWrappers.tsx | 4 ---- src/setupJest.ts | 16 ---------------- 2 files changed, 20 deletions(-) diff --git a/src/lib/tests/renderWithWrappers.tsx b/src/lib/tests/renderWithWrappers.tsx index c932c4cd61a..f1b414e7bd5 100644 --- a/src/lib/tests/renderWithWrappers.tsx +++ b/src/lib/tests/renderWithWrappers.tsx @@ -1,19 +1,16 @@ import { render } from "@testing-library/react-native" import { PopoverMessageProvider } from "lib/Components/PopoverMessage/PopoverMessageProvider" import { ToastProvider } from "lib/Components/Toast/toastHook" -// import { defaultEnvironment } from "lib/relay/createEnvironment" import { GlobalStoreProvider } from "lib/store/GlobalStore" import { track } from "lib/utils/track" import { ProvideScreenDimensions } from "lib/utils/useScreenDimensions" import { Theme } from "palette" import React from "react" import ReactTestRenderer from "react-test-renderer" -// import { RelayEnvironmentProvider } from "relay-hooks" import { ReactElement } from "simple-markdown" export const Wrappers: React.FC = ({ children }) => { return ( - // @@ -25,7 +22,6 @@ export const Wrappers: React.FC = ({ children }) => { - // ) } diff --git a/src/setupJest.ts b/src/setupJest.ts index 3f4dd5770e4..d308e1996ed 100644 --- a/src/setupJest.ts +++ b/src/setupJest.ts @@ -285,10 +285,6 @@ function getNativeModules(): OurNativeModules { lockActivityScreenOrientation: jest.fn(), gitCommitShortHash: "de4dc0de", }, - // ARGraphQLQueryCache: { - // _setResponseForQueryIDWithVariables: jest.fn(() => ({ wow: 1 })), - // _responseForQueryIDWithVariables: jest.fn(() => ({ wow: 5 })), - // }, } } @@ -304,18 +300,6 @@ jest.mock("lib/navigation/navigate", () => ({ SlugType: { partner: "partner", fair: "fair" }, })) -// let mockDefaultEnvironment: ReturnType - -// jest.mock("lib/relay/createEnvironment", () => { -// return { -// defaultEnvironment: mockDefaultEnvironment, -// } -// }) - -// beforeEach(() => { -// mockDefaultEnvironment = createMockEnvironment() -// }) - Object.assign(NativeModules, getNativeModules()) const _ = jest.requireActual("lodash") From 7f9e640b89b09e7f59653f3d9fb91d4ab5db48a3 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 29 Jul 2021 19:32:36 +0200 Subject: [PATCH 12/14] Revert "Merge branch 'master' into gkartalis/rn-testing-library" This reverts commit 420315693696059beb27e56e6cc9b53928dd5b37, reversing changes made to 4a6a7e443b90a5da2fb84cbbfd90e904c1fcbd8e. --- .circleci/config.yml | 12 +- .gitignore | 2 - .secrets.baseline | 103 - .stylelintrc | 21 + .vscode/settings.json | 2 + Artsy.xcodeproj/project.pbxproj | 44 +- Artsy/App/ARAnalyticsVisualizer.h | 7 + Artsy/App/ARAnalyticsVisualizer.m | 72 + Artsy/App/ARAppActivityContinuationDelegate.m | 8 +- Artsy/App/ARAppDelegate+Analytics.h | 1 + Artsy/App/ARAppDelegate+Analytics.m | 87 +- Artsy/App/ARAppDelegate+Emission.m | 12 +- Artsy/App/ARAppDelegate.h | 9 +- Artsy/App/ARAppDelegate.m | 78 +- Artsy/App/ARAppNotificationsDelegate.h | 3 +- Artsy/App/ARAppNotificationsDelegate.m | 51 +- Artsy/App/AROptions.h | 1 + Artsy/App/AROptions.m | 1 + Artsy/App/ARScreenPresenterModule.m | 51 +- Artsy/App/ARSegmentProvider.h | 9 + Artsy/App/ARSegmentProvider.m | 36 + Artsy/App/ARSentryAnalyticsProvider.h | 6 + Artsy/App/ARSentryAnalyticsProvider.m | 44 + Artsy/App_Resources/Artsy-Info.plist | 5 - .../Apple/UIImageView+AsyncImageLoading.h | 2 +- .../Apple/UIImageView+AsyncImageLoading.m | 28 +- Artsy/Networking/API_Modules/ARUserManager.h | 2 + Artsy/Networking/API_Modules/ARUserManager.m | 22 +- .../API_Modules/ArtsyAPI+Sailthru.h | 11 + .../API_Modules/ArtsyAPI+Sailthru.m | 35 + Artsy/Networking/API_Modules/ArtsyAPI+Sales.m | 1 + Artsy/Networking/ARAuthProviders.m | 4 +- Artsy/Networking/ARRouter.h | 1 + Artsy/Networking/ARRouter.m | 5 + Artsy/Networking/ArtsyAPI.m | 9 +- Artsy/Resources/Artsy-Bridging-Header.h | 1 + .../ARAugmentedFloorBasedVIRViewController.m | 11 +- .../VCs/ARAugmentedVIRSetupViewController.m | 4 +- .../Admin/ARAdminSettingsViewController.m | 13 + .../AuctionInformationViewController.swift | 6 +- .../RefinementOptionsViewController.swift | 4 +- .../Core/ARViewInRoomViewController.m | 4 +- ...veAuctionLotCollectionViewDataSource.swift | 5 +- .../AROnboardingViewController.m | 19 +- .../ARSignUpSplashViewController.m | 18 +- .../ARPersonalizeViewController.m | 29 +- .../View_Controllers/Util/ARFeedImageLoader.m | 2 +- .../Util/ARNavigationController.m | 1 + .../Util/Errors/ARNetworkErrorManager.m | 4 +- .../Util/Sharing/ARSharingController.m | 4 +- .../Analytics_Tests/ARAppAnalyticsSpec.m | 40 + .../ARAppActivityContinuationDelegateTests.m | 16 + .../ARAppNotificationsDelegateTests.m | 38 +- .../ARTestImageCachingFunctions.swift | 2 +- .../Stubs/ARStubbedAnalyticsProvider.h | 28 + .../Stubs/ARStubbedAnalyticsProvider.m | 73 + Artsy_Tests/Supporting_Files/ARTestHelper.m | 1 - CHANGELOG.legacy.yml => CHANGELOG.yml | 84 +- Gemfile.lock | 87 +- HACKS.md | 20 +- Podfile | 12 +- Podfile.lock | 82 +- app.json | 2 +- dangerfile.ts | 28 + data/schema.graphql | 44 +- docs/README.md | 1 - docs/deploy_to_app_store.md | 1 + docs/palette_v3_migration_guide.md | 75 - docs/pull_request_template.md | 2 +- docs/storybook.md | 42 - emission/Emission.podspec | 2 +- emission/Pod/Classes/Core/AREmission.h | 3 - emission/Pod/Classes/Core/AREmission.m | 19 - emission/Pod/Classes/Core/AREventsModule.m | 5 + .../ARNotificationsManager.h | 2 - .../ARNotificationsManager.m | 19 - .../AROpaqueImageView.m | 23 +- fastlane/Fastfile | 22 +- index.android.js | 26 +- index.ios.js | 23 +- index.tests.ios.js | 1 + jest.config.js | 2 - package.json | 66 +- ...segment+analytics-react-native+1.4.4.patch | 32 + ...+analytics-react-native-appboy+1.4.8.patch | 35 + patches/react-native-appboy-sdk+1.29.1.patch | 29 + ...react-native-push-notification+7.4.0.patch | 13 - scripts/set-storybook-environment.js | 23 - scripts/start_packager.sh | 4 - .../FairArticlesQuery.graphql.ts | 52 +- .../FairArticles_fair.graphql.ts | 12 +- .../FairEditorialTestsQuery.graphql.ts | 13 +- .../FairEditorial_fair.graphql.ts | 9 +- src/__generated__/FairQuery.graphql.ts | 15 +- src/__generated__/FairTestsQuery.graphql.ts | 15 +- src/__generated__/Fair_fair.graphql.ts | 9 +- .../SavedAddressesFormQuery.graphql.ts | 234 - .../SavedAddressesFormTestsQuery.graphql.ts | 234 - .../SavedAddressesForm_me.graphql.ts | 170 - .../SavedAddressesQuery.graphql.ts | 26 +- .../SavedAddressesRefetchQuery.graphql.ts | 26 +- .../SavedAddressesTestsQuery.graphql.ts | 26 +- .../SavedAddresses_me.graphql.ts | 22 +- .../SavedSearchButtonQuery.graphql.ts | 154 - .../SavedSearchButtonTestsQuery.graphql.ts | 177 - .../SavedSearchButton_me.graphql.ts | 62 - .../VanityURLEntityQuery.graphql.ts | 15 +- .../addNewAddressMutation.graphql.ts | 290 - ...ddressDeleteUserAddressMutation.graphql.ts | 288 - .../setAsDefaultAddressMutation.graphql.ts | 207 - .../updateUserAddressMutation.graphql.ts | 300 - src/lib/AndroidApp.tsx | 4 +- src/lib/AppProviders.tsx | 24 +- src/lib/AppRegistry.tsx | 30 +- .../Artist/ArtistArtworks/ArtistArtworks.tsx | 60 +- .../ArtistArtworks/SavedSearchBanner.tsx | 91 +- .../ArtistArtworks/SavedSearchButton.tsx | 99 - .../__tests__/ArtistCollectionsRail-tests.tsx | 9 +- .../ArtistNotableWorksRail-tests.tsx | 9 +- .../__tests__/SavedSearchButton-tests.tsx | 80 - src/lib/Components/Artist/ArtistHeader.tsx | 2 - .../Artist/ArtistInsights/ArtistInsights.tsx | 15 +- .../ArtistInsightsAuctionResults.tsx | 38 +- src/lib/Components/ArtistListItem.tsx | 78 +- src/lib/Components/ArtsyReactWebView.tsx | 5 +- .../ArtworkFilter/ArtworkFilterHelpers.ts | 18 +- .../ArtworkFilterOptionsScreen.tsx | 10 +- .../ArtworkFilter/Filters/ColorsOptions.tsx | 3 +- .../Filters/FilterToggleButton.tsx | 3 +- .../ArtworkFilter/Filters/KeywordFilter.tsx | 32 +- .../Filters/PriceRangeOptions.tsx | 1 - .../Filters/SingleSelectOption.tsx | 58 +- .../ArtworkFilter/Filters/SizeOptions.tsx | 5 +- .../ArtworkFilter/Filters/YearOptions.tsx | 3 +- .../Filters/__tests__/ColorsSwatch-tests.tsx | 18 +- .../GalleriesAndInstitutionsOptions-tests.tsx | 2 +- .../__tests__/LocationCitiesOptions-tests.tsx | 2 +- .../Filters/__tests__/SizeOptions-tests.tsx | 2 +- .../__tests__/TimePeriodOptions-tests.tsx | 4 +- .../convertersToFilterParams-tests.ts | 14 +- .../__tests__/FilterModal-tests.tsx | 12 +- .../FilteredArtworkGridZeroState.tsx | 5 +- .../InfiniteScrollArtworksGrid.tsx | 4 +- .../ArtworkTileRail/ArtworkTileRailCard.tsx | 9 +- .../__tests__/ArtworkTileRailCard-tests.tsx | 89 +- .../Buttons/DarkNavigationButton.tsx | 26 +- src/lib/Components/ConnectivityBanner.tsx | 1 - .../__tests__/CountdownTimer-tests.tsx | 4 +- .../FancyModal/FancyModalHeader.tsx | 10 +- src/lib/Components/Gene/GeneArtworks.tsx | 2 +- .../Gene/__tests__/GeneArtworks-tests.tsx | 12 +- .../Components/GenericArtistSeriesRail.tsx | 3 +- .../Home/ArtistRails/ArtistCard.tsx | 50 +- src/lib/Components/HoursCollapsible.tsx | 36 +- src/lib/Components/Input/Input.tsx | 34 +- src/lib/Components/Input/InputTitle.tsx | 3 +- .../Lists/AuctionResultListItem.tsx | 3 +- src/lib/Components/Lists/SavedItemRow.tsx | 3 +- src/lib/Components/Lists/ShowItemRow.tsx | 117 +- src/lib/Components/LoadFailureView.tsx | 3 +- src/lib/Components/LocationMap/index.tsx | 5 +- src/lib/Components/MenuItem.tsx | 3 +- src/lib/Components/PhoneInput/PhoneInput.tsx | 3 +- src/lib/Components/Photos/AddEditPhotos.tsx | 3 +- .../PopoverMessage/PopoverMessage.tsx | 107 +- .../PopoverMessage/PopoverMessageProvider.tsx | 126 +- .../__tests__/PopoverMessage-tests.tsx | 44 +- .../RelatedArtists/RelatedArtist.tsx | 12 +- .../SaleArtworkTileRailCard.tsx | 9 +- src/lib/Components/ScrollableTabBar.tsx | 9 +- src/lib/Components/SectionTitle.tsx | 3 +- src/lib/Components/Select.tsx | 5 +- src/lib/Components/Spinner.tsx | 3 +- .../StickyTabPage/StickyTabPageFlatList.tsx | 3 +- .../StickyTabPage/StickyTabPageTabBar.tsx | 5 +- src/lib/Components/SwitchMenu.tsx | 43 +- src/lib/Components/TabBar.tsx | 106 +- src/lib/Components/TextArea.tsx | 6 +- src/lib/Components/Toast/Toast.ts | 9 - .../Toast/{ToastComponent.tsx => Toast.tsx} | 38 +- .../Toast/__tests__/Toast-tests.tsx | 8 +- src/lib/Components/Toast/toastHook.tsx | 55 +- src/lib/Components/Toast/types.ts | 22 - src/lib/Components/TouchableRow.tsx | 15 +- .../Components/WorksForYou/Notification.tsx | 38 +- .../__tests__/Notification-tests.tsx | 2 +- .../__tests__/ArtistListItem-tests.tsx | 11 +- .../__tests__/ArtsyReactWebView-tests.tsx | 2 +- .../__tests__/HoursCollapsible-tests.tsx | 25 +- .../Components/__tests__/ReadMore-tests.tsx | 41 +- src/lib/Icons/ChevronIcon.tsx | 8 +- src/lib/Icons/Crosshair.tsx | 33 +- src/lib/NativeModules/Events.tsx | 15 + src/lib/NativeModules/LegacyNativeModules.tsx | 3 + src/lib/Scenes/About/About.tsx | 3 +- src/lib/Scenes/Artist/Artist.tsx | 2 +- src/lib/Scenes/Artist/SearchCriteria.tsx | 4 +- .../__tests__/ArtistSavedSearch-tests.tsx | 14 - .../ArtistSeries/ArtistSeriesListItem.tsx | 3 +- src/lib/Scenes/Artwork/Artwork.tsx | 3 +- .../Artwork/Components/ArtworkActions.tsx | 22 +- .../CommercialButtons/BidButton.tsx | 12 +- .../CollapsibleArtworkDetails.tsx | 2 +- .../CommercialButtons/InquiryModal.tsx | 3 +- .../InquirySuccessNotification.tsx | 5 +- .../LocationAutocomplete.tsx | 5 +- .../__tests__/BidButton-tests.tsx | 13 +- .../__tests__/CommercialButtons-tests.tsx | 26 +- .../CommercialEditionSetInformation.tsx | 5 +- .../Components/CommercialInformation.tsx | 49 +- .../ImageCarouselFullScreen-tests.tsx | 15 +- .../Components/__tests__/AboutWork-tests.tsx | 29 +- .../__tests__/ArtworkActions-tests.tsx | 58 +- .../__tests__/ArtworkHistory-tests.tsx | 55 +- .../__tests__/ArtworkTombstone-tests.tsx | 121 +- .../__tests__/AuctionPrice-tests.tsx | 9 +- .../CommercialEditionSetInformation-tests.tsx | 17 +- .../__tests__/CommercialInformation-tests.tsx | 16 +- .../CommercialPartnerInformation-tests.tsx | 71 +- .../__tests__/ContextCard-tests.tsx | 81 +- .../__tests__/FollowArtistButton-tests.tsx | 25 +- .../Components/__tests__/OtherWorks-tests.tsx | 53 +- .../__tests__/PartnerCard-tests.tsx | 97 +- ...RequestConditionReport-analytics-tests.tsx | 27 +- .../RequestConditionReport-tests.tsx | 37 +- .../ArtworkAttributionClassFAQ.tsx | 2 +- .../AuctionResultsForYou.tsx | 2 +- .../__tests__/AuctionResultsForYou-tests.tsx | 2 +- src/lib/Scenes/BottomTabs/BottomTabs.tsx | 3 +- .../Scenes/BottomTabs/BottomTabsButton.tsx | 3 +- src/lib/Scenes/City/City.tsx | 5 +- src/lib/Scenes/City/CityPicker.tsx | 11 +- .../BMWEventSection/__tests__/index-tests.tsx | 33 +- .../City/Components/BMWEventSection/index.tsx | 55 +- .../Event/__tests__/index-tests.tsx | 9 +- .../Scenes/City/Components/Event/index.tsx | 70 +- .../EventSection/__tests__/index-tests.tsx | 21 +- .../Components/FairEventSectionCard.tsx | 10 +- .../__tests__/index-tests.tsx | 9 +- .../Components/FairEventSection/index.tsx | 51 +- .../Components/SavedEventSection/index.tsx | 7 +- .../TabFairItemRow/__tests__/index-tests.tsx | 9 +- .../City/Components/TabFairItemRow/index.tsx | 60 +- .../CollectionArtistSeriesRail-tests.tsx | 57 +- .../FeaturedCollectionsRail.tsx | 6 +- .../OtherCollections/OtherCollectionsRail.tsx | 16 +- .../__tests__/OtherCollectionsRail-tests.tsx | 2 +- .../__tests__/FeaturedArtists-tests.tsx | 9 +- .../FullFeaturedArtistList-tests.tsx | 9 +- .../__tests__/CollectionHeader-tests.tsx | 49 +- .../Components/ImageSelection.tsx | 6 +- .../Consignments/Components/SearchResults.tsx | 12 +- .../Consignments/Components/TextArea.tsx | 4 +- .../Consignments/Components/TextInput.tsx | 121 +- .../Scenes/Consignments/Components/Toggle.tsx | 28 +- .../Consignments/Screens/Confirmation.tsx | 109 +- .../Scenes/Consignments/Screens/Location.tsx | 49 +- .../Scenes/Fair/Components/FairEditorial.tsx | 5 +- src/lib/Scenes/Fair/Components/SimpleTabs.tsx | 3 +- src/lib/Scenes/Fair/Fair.tsx | 2 +- src/lib/Scenes/Fair/FairArticles.tsx | 5 +- src/lib/Scenes/Favorites/FavoriteArtists.tsx | 32 +- src/lib/Scenes/Favorites/FavoriteArtworks.tsx | 22 +- src/lib/Scenes/ForceUpdate/ForceUpdate.tsx | 3 +- .../Components/EmailConfirmationBanner.tsx | 3 +- src/lib/Scenes/Home/Components/HomeHero.tsx | 3 +- .../Home/Components/SaleArtworksHomeRail.tsx | 2 +- src/lib/Scenes/Home/Components/SalesRail.tsx | 145 +- .../__tests__/SaleArtworksHomeRail-tests.tsx | 2 +- .../Components/Conversations/Composer.tsx | 86 +- .../Conversations/ConversationSnippet.tsx | 97 +- .../Conversations/Conversations.tsx | 3 +- .../Conversations/EditionSelectBox.tsx | 6 +- .../Components/Conversations/Message.tsx | 51 +- .../Components/Conversations/OfferIcon.tsx | 21 +- .../Conversations/Preview/ArtworkPreview.tsx | 7 +- .../Preview/Attachment/AttachmentPreview.tsx | 18 +- .../Preview/Attachment/FileDownload.tsx | 1 - .../Conversations/Preview/ShowPreview.tsx | 11 +- .../Inbox/Screens/ConversationDetails.tsx | 2 +- .../Map/Components/CitySwitcherButton.tsx | 79 +- src/lib/Scenes/Map/Components/ShowCard.tsx | 59 +- .../Map/Components/UserPositionButton.tsx | 4 +- src/lib/Scenes/Map/GlobalMap.tsx | 30 +- .../Components/MyAccountFieldEditScreen.tsx | 39 +- .../Components/MyCollectionArtworkHeader.tsx | 3 +- .../Components/Dimensions.tsx | 3 +- .../MyCollectionArtworkFormAddPhotos.tsx | 3 +- ...CollectionArtworkFormAdditionalDetails.tsx | 3 +- .../MyCollectionArtworkListItem.tsx | 6 +- .../MyProfilePushNotifications-tests.tsx | 4 +- src/lib/Scenes/Onboarding/ForgotPassword.tsx | 3 +- .../OnboardingCreateAccount.tsx | 3 +- .../OnboardingCreateAccountEmail.tsx | 3 +- .../OnboardingCreateAccountName.tsx | 3 +- .../OnboardingCreateAccountPassword.tsx | 3 +- src/lib/Scenes/Onboarding/OnboardingLogin.tsx | 3 +- .../OnboardingPersonalization.tsx | 60 +- ...nboardingPersonalizationArtistListItem.tsx | 73 +- .../OnboardingPersonalizationModal.tsx | 3 +- .../Scenes/Onboarding/OnboardingWelcome.tsx | 3 +- .../Components/OrderDetailsPayment.tsx | 3 +- .../Scenes/Partner/Components/PartnerMap.tsx | 5 +- .../Partner/Components/PartnerShows.tsx | 111 +- .../PartnerLocationSection-tests.tsx | 9 +- .../__tests__/PartnerShows-tests.tsx | 9 +- .../Scenes/Sale/Components/SaleLotsList.tsx | 5 +- src/lib/Scenes/SaleFAQ/SaleFAQ.tsx | 2 +- .../Scenes/Sales/__tests__/index-tests.tsx | 9 +- src/lib/Scenes/Sales/index.tsx | 27 +- .../Components/AddAddressButton.tsx | 19 - .../Scenes/SavedAddresses/SavedAddresses.tsx | 153 +- .../SavedAddresses/SavedAddressesForm.tsx | 284 - .../__tests__/SavedAddresses-tests.tsx | 81 +- .../__tests__/SavedAddressesForm-tests.tsx | 95 - .../SavedAddresses/mutations/addNewAddress.ts | 57 - .../mutations/deleteSavedAddress.ts | 55 - .../mutations/setAsDefaultAddress.ts | 49 - .../mutations/updateUserAddress.ts | 59 - src/lib/Scenes/Search/AutosuggestResults.tsx | 3 +- src/lib/Scenes/Search/CityGuideCTA.tsx | 40 +- src/lib/Scenes/Search/Search.tsx | 3 +- src/lib/Scenes/Search/SearchResult.tsx | 5 +- .../__tests__/AutosuggestResults-tests.tsx | 13 +- .../Search/__tests__/RecentSearches-tests.tsx | 16 +- .../Scenes/Search/__tests__/Search-tests.tsx | 16 +- .../VanityURLPossibleRedirect-tests.tsx | 18 +- .../Components/ViewingRoomViewWorksButton.tsx | 5 +- src/lib/Scenes/ViewingRoom/ViewingRoom.tsx | 2 +- .../ViewingRoom/ViewingRoomArtworks.tsx | 3 +- .../Scenes/ViewingRoom/ViewingRoomsList.tsx | 3 +- src/lib/navigation/__tests__/routes-tests.tsx | 12 +- src/lib/navigation/navigate.ts | 4 +- src/lib/navigation/routes.tsx | 6 +- .../__tests__/errorMiddleware-tests.ts | 2 +- src/lib/relay/middlewares/errorMiddleware.ts | 4 +- src/lib/store/AuthModel.ts | 25 - src/lib/store/GlobalStoreModel.ts | 3 - src/lib/store/NativeModel.ts | 36 +- src/lib/store/ToastModel.ts | 44 - src/lib/store/__tests__/migration-tests.ts | 17 - src/lib/store/config/EnvironmentModel.tsx | 2 +- src/lib/store/config/features.ts | 19 +- src/lib/store/migration.ts | 6 +- src/lib/tests/renderRelayTree.tsx | 24 +- src/lib/utils/AdminMenu.tsx | 11 +- src/lib/utils/QAInfo.tsx | 3 +- .../utils/__tests__/renderMarkdown-tests.tsx | 17 +- src/lib/utils/hideBackButtonOnScroll.tsx | 2 +- src/lib/utils/placeholders.tsx | 3 +- src/lib/utils/renderMarkdown.tsx | 12 +- .../utils/track/SegmentTrackingProvider.ts | 76 +- src/lib/utils/track/providers.tsx | 16 +- src/palette/ClassTheme.tsx | 13 - src/palette/PaletteFlag.tsx | 59 - src/palette/Theme.tsx | 177 +- src/palette/elements/Avatar/Avatar.tsx | 8 +- src/palette/elements/BorderBox/BorderBox.tsx | 10 +- .../elements/Button/Button.stories.tsx | 45 - src/palette/elements/Button/Button.test.tsx | 42 +- src/palette/elements/Button/Button.tsx | 35 +- src/palette/elements/Cards/CardTag.tsx | 6 +- src/palette/elements/Cards/LargeCard.tsx | 7 +- src/palette/elements/Cards/MediumCard.tsx | 6 +- src/palette/elements/Cards/SmallCard.tsx | 8 +- src/palette/elements/Checkbox/Check.tsx | 28 +- src/palette/elements/Flex/Flex.tsx | 4 +- src/palette/elements/Message/Message.tsx | 10 +- src/palette/elements/Radio/RadioDot.tsx | 46 +- src/palette/elements/Separator/Separator.tsx | 9 +- src/palette/elements/Spinner/Spinner.tsx | 6 +- src/palette/elements/Text/Text.tsx | 7 +- .../elements/Text/__tests__/Text.test.tsx | 21 +- src/palette/elements/Text/tokens.ts | 22 +- src/palette/elements/Touchable/Touchable.tsx | 48 +- .../Touchable/TouchableHighlightColor.tsx | 5 +- .../elements/Typography/Typography.tsx | 36 +- src/palette/helpers/__tests__/color.test.ts | 8 + src/palette/helpers/__tests__/color.tests.tsx | 102 - src/palette/helpers/__tests__/space.test.ts | 9 + src/palette/helpers/__tests__/space.tests.tsx | 76 - src/palette/helpers/styled.tsx | 6 - src/palette/hooks.ts | 12 - src/palette/index.tsx | 2 - src/palette/platform/primitives.ts | 12 + src/palette/svgs/AddCircleFillIcon.tsx | 3 +- src/palette/svgs/AddCircleIcon.tsx | 3 +- src/palette/svgs/AddIcon.tsx | 4 +- src/palette/svgs/AlertCircleFillIcon.tsx | 4 +- src/palette/svgs/AlertIcon.tsx | 3 +- src/palette/svgs/ArrowCircleFillIcons.tsx | 32 +- src/palette/svgs/ArrowDownCircleIcon.tsx | 3 +- src/palette/svgs/ArrowDownIcon.tsx | 3 +- src/palette/svgs/ArrowLeftCircleIcon.tsx | 3 +- src/palette/svgs/ArrowLeftIcon.tsx | 3 +- src/palette/svgs/ArrowRightCircleIcon.tsx | 3 +- src/palette/svgs/ArrowRightIcon.tsx | 3 +- src/palette/svgs/ArrowUpCircleIcon.tsx | 3 +- src/palette/svgs/ArrowUpIcon.tsx | 3 +- src/palette/svgs/ArtsyLogoBlackIcon.tsx | 4 +- src/palette/svgs/ArtsyLogoWhiteIcon.tsx | 1 + src/palette/svgs/ArtsyMarkBlackIcon.tsx | 3 +- src/palette/svgs/ArtsyMarkWhiteIcon.tsx | 1 + src/palette/svgs/ArtworkIcon.tsx | 3 +- src/palette/svgs/AuctionIcon.tsx | 3 +- src/palette/svgs/BellFillIcon.tsx | 3 +- src/palette/svgs/BellIcon.tsx | 3 +- src/palette/svgs/BlueChipIcon.tsx | 3 +- src/palette/svgs/BriefcaseIcon.tsx | 3 +- src/palette/svgs/CertificateIcon.tsx | 3 +- src/palette/svgs/CheckCircleFillIcon.tsx | 3 +- src/palette/svgs/CheckCircleIcon.tsx | 3 +- src/palette/svgs/CheckIcon.tsx | 3 +- src/palette/svgs/CloseCircleIcon.tsx | 3 +- src/palette/svgs/CloseIcon.tsx | 3 +- src/palette/svgs/CollapseIcon.tsx | 3 +- src/palette/svgs/DecreaseIcon.tsx | 3 +- src/palette/svgs/DocumentIcon.tsx | 3 +- src/palette/svgs/DownloadIcon.tsx | 3 +- src/palette/svgs/EditIcon.tsx | 3 +- src/palette/svgs/EnterIcon.tsx | 3 +- src/palette/svgs/EnvelopeIcon.tsx | 3 +- src/palette/svgs/EstablishedIcon.tsx | 3 +- src/palette/svgs/ExpandIcon.tsx | 3 +- src/palette/svgs/EyeClosedIcon.tsx | 3 +- src/palette/svgs/EyeOpenedIcon.tsx | 3 +- src/palette/svgs/FacebookIcon.tsx | 4 +- src/palette/svgs/FairIcon.tsx | 3 +- src/palette/svgs/FilterIcon.tsx | 3 +- src/palette/svgs/GenomeIcon.tsx | 3 +- src/palette/svgs/GraphIcon.tsx | 3 +- src/palette/svgs/HeartFillIcon.tsx | 3 +- src/palette/svgs/HeartIcon.tsx | 3 +- src/palette/svgs/HomeIcon.tsx | 4 +- src/palette/svgs/Icon.tsx | 2 +- src/palette/svgs/IncreaseIcon.tsx | 3 +- src/palette/svgs/InfoCircleIcon.tsx | 4 +- src/palette/svgs/InstitutionIcon.tsx | 3 +- src/palette/svgs/LoaderIcon.tsx | 3 +- src/palette/svgs/LockIcon.tsx | 4 +- src/palette/svgs/LogoutIcon.tsx | 8 +- src/palette/svgs/MagnifyingGlassIcon.tsx | 3 +- src/palette/svgs/MapPinIcon.tsx | 3 +- src/palette/svgs/MenuIcon.tsx | 4 +- src/palette/svgs/MessageIcon.tsx | 4 +- src/palette/svgs/MoneyFillIcon.tsx | 6 +- src/palette/svgs/MoreIcon.tsx | 3 +- src/palette/svgs/NoArtworkIcon.tsx | 4 +- src/palette/svgs/NoImageIcon.tsx | 4 +- src/palette/svgs/PageIcon.tsx | 4 +- src/palette/svgs/PaymentIcon.tsx | 4 +- src/palette/svgs/PublicationIcon.tsx | 8 +- src/palette/svgs/QuestionCircleIcon.tsx | 3 +- src/palette/svgs/ReloadIcon.tsx | 4 +- src/palette/svgs/SettingsIcon.tsx | 4 +- src/palette/svgs/ShareIcon.tsx | 4 +- src/palette/svgs/TagIcon.tsx | 4 +- src/palette/svgs/TimerIcon.tsx | 4 +- src/palette/svgs/TopEmergingIcon.tsx | 4 +- src/palette/svgs/TrashIcon.tsx | 4 +- src/palette/svgs/TwitterIcon.tsx | 4 +- src/palette/svgs/UserMultiIcon.tsx | 4 +- src/palette/svgs/UserSingleIcon.tsx | 4 +- src/palette/svgs/VerifiedIcon.tsx | 4 +- src/palette/svgs/WhatsAppAppIcon.tsx | 2 +- src/palette/svgs/XCircleIcon.tsx | 3 +- src/palette/svgs/sf/BoltCircleFill.tsx | 3 +- src/palette/svgs/sf/BoltFill.tsx | 4 +- src/palette/svgs/sf/BookmarkFill.tsx | 3 +- src/palette/svgs/sf/ClockFill.tsx | 3 +- .../svgs/sf/ExclamationMarkCircleFill.tsx | 4 +- src/palette/svgs/sf/StarCircleFill.tsx | 4 +- src/palette/svgs/sf/Stopwatch.tsx | 3 +- src/setupJest.ts | 28 +- src/storybook/addons.js | 1 - src/storybook/helpers.tsx | 46 - src/storybook/index.js | 5 - src/storybook/package.json | 3 - src/storybook/rn-addons.js | 0 src/storybook/storyLoader.js | 15 - src/storybook/storybook-ui.js | 17 - tsconfig.json | 16 +- typings/storybook.d.ts | 7 - typings/styled-components.native.d.ts | 22 +- yarn.lock | 6639 +++-------------- 485 files changed, 4770 insertions(+), 13643 deletions(-) delete mode 100644 .secrets.baseline create mode 100644 .stylelintrc create mode 100644 Artsy/App/ARAnalyticsVisualizer.h create mode 100644 Artsy/App/ARAnalyticsVisualizer.m create mode 100644 Artsy/App/ARSegmentProvider.h create mode 100644 Artsy/App/ARSegmentProvider.m create mode 100644 Artsy/App/ARSentryAnalyticsProvider.h create mode 100644 Artsy/App/ARSentryAnalyticsProvider.m create mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h create mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m create mode 100644 Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m create mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h create mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m rename CHANGELOG.legacy.yml => CHANGELOG.yml (96%) delete mode 100644 docs/palette_v3_migration_guide.md delete mode 100644 docs/storybook.md create mode 100644 patches/@segment+analytics-react-native+1.4.4.patch create mode 100644 patches/@segment+analytics-react-native-appboy+1.4.8.patch create mode 100644 patches/react-native-appboy-sdk+1.29.1.patch delete mode 100644 patches/react-native-push-notification+7.4.0.patch delete mode 100755 scripts/set-storybook-environment.js delete mode 100644 src/__generated__/SavedAddressesFormQuery.graphql.ts delete mode 100644 src/__generated__/SavedAddressesFormTestsQuery.graphql.ts delete mode 100644 src/__generated__/SavedAddressesForm_me.graphql.ts delete mode 100644 src/__generated__/SavedSearchButtonQuery.graphql.ts delete mode 100644 src/__generated__/SavedSearchButtonTestsQuery.graphql.ts delete mode 100644 src/__generated__/SavedSearchButton_me.graphql.ts delete mode 100644 src/__generated__/addNewAddressMutation.graphql.ts delete mode 100644 src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts delete mode 100644 src/__generated__/setAsDefaultAddressMutation.graphql.ts delete mode 100644 src/__generated__/updateUserAddressMutation.graphql.ts delete mode 100644 src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx delete mode 100644 src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx delete mode 100644 src/lib/Components/Toast/Toast.ts rename src/lib/Components/Toast/{ToastComponent.tsx => Toast.tsx} (77%) delete mode 100644 src/lib/Components/Toast/types.ts delete mode 100644 src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts delete mode 100644 src/lib/store/ToastModel.ts delete mode 100644 src/palette/ClassTheme.tsx delete mode 100644 src/palette/PaletteFlag.tsx delete mode 100644 src/palette/elements/Button/Button.stories.tsx create mode 100644 src/palette/helpers/__tests__/color.test.ts delete mode 100644 src/palette/helpers/__tests__/color.tests.tsx create mode 100644 src/palette/helpers/__tests__/space.test.ts delete mode 100644 src/palette/helpers/__tests__/space.tests.tsx delete mode 100644 src/palette/helpers/styled.tsx delete mode 100644 src/palette/hooks.ts create mode 100644 src/palette/platform/primitives.ts delete mode 100644 src/storybook/addons.js delete mode 100644 src/storybook/helpers.tsx delete mode 100644 src/storybook/index.js delete mode 100644 src/storybook/package.json delete mode 100644 src/storybook/rn-addons.js delete mode 100644 src/storybook/storyLoader.js delete mode 100644 src/storybook/storybook-ui.js delete mode 100644 typings/storybook.d.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 9ae069fd477..c9595957044 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -154,12 +154,12 @@ commands: steps: - restore_cache: keys: - - v5-app_build_ios-{{ checksum ".manifests/app_build" }} + - v4-app_build_ios-{{ checksum ".manifests/app_build" }} - run: name: Build App - command: ./scripts/ci-ios + command: ls derived_data || ./scripts/ci-ios - save_cache: - key: v5-app_build_ios-{{ checksum ".manifests/app_build" }} + key: v4-app_build_ios-{{ checksum ".manifests/app_build" }} paths: - derived_data - node_modules/react-native-config @@ -503,14 +503,12 @@ workflows: - beta-android - app_store_submission - play_store_submission - - update-changelog - build-test-js: filters: branches: ignore: - app_store_submission - play_store_submission - - update-changelog - horizon/block: context: horizon project_id: 37 @@ -526,7 +524,6 @@ workflows: - app_store_submission - play_store_submission - beta-android - - update-changelog requires: - build-test-js - horizon/block @@ -537,7 +534,6 @@ workflows: - app_store_submission - play_store_submission - beta-ios - - update-changelog requires: - build-test-js - horizon/block @@ -547,8 +543,6 @@ workflows: only: - beta-ios - beta-android - ignore: - - update-changelog requires: - build-test-app-ios - build-test-app-android diff --git a/.gitignore b/.gitignore index 376a4066663..50b76e18861 100644 --- a/.gitignore +++ b/.gitignore @@ -138,5 +138,3 @@ android/app/src/main/assets/fonts # Firebase files android/app/google-services.json GoogleService-Info.plist - -storybook.json diff --git a/.secrets.baseline b/.secrets.baseline deleted file mode 100644 index b644f382638..00000000000 --- a/.secrets.baseline +++ /dev/null @@ -1,103 +0,0 @@ -{ - "version": "1.1.0", - "plugins_used": [ - { - "name": "ArtifactoryDetector" - }, - { - "name": "AWSKeyDetector" - }, - { - "name": "AzureStorageKeyDetector" - }, - { - "name": "Base64HighEntropyString", - "limit": 4.5 - }, - { - "name": "BasicAuthDetector" - }, - { - "name": "CloudantDetector" - }, - { - "name": "HexHighEntropyString", - "limit": 3.0 - }, - { - "name": "IbmCloudIamDetector" - }, - { - "name": "IbmCosHmacDetector" - }, - { - "name": "JwtTokenDetector" - }, - { - "name": "KeywordDetector", - "keyword_exclude": "" - }, - { - "name": "MailchimpDetector" - }, - { - "name": "NpmDetector" - }, - { - "name": "PrivateKeyDetector" - }, - { - "name": "SlackDetector" - }, - { - "name": "SoftlayerDetector" - }, - { - "name": "SquareOAuthDetector" - }, - { - "name": "StripeDetector" - }, - { - "name": "TwilioKeyDetector" - } - ], - "filters_used": [ - { - "path": "detect_secrets.filters.allowlist.is_line_allowlisted" - }, - { - "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", - "min_level": 2 - }, - { - "path": "detect_secrets.filters.heuristic.is_indirect_reference" - }, - { - "path": "detect_secrets.filters.heuristic.is_likely_id_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_lock_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_potential_uuid" - }, - { - "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" - }, - { - "path": "detect_secrets.filters.heuristic.is_sequential_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_swagger_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_templated_secret" - } - ], - "results": {}, - "generated_at": "2021-07-26T13:07:17Z" -} diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 00000000000..afca977d041 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,21 @@ +{ + "processors": ["stylelint-processor-styled-components"], + "extends": [ + "stylelint-config-standard", + "stylelint-config-styled-components" + ], + "syntax": "scss", + "rules": { + "selector-type-no-unknown": [true, { "ignoreTypes": ["checkbox", "twitterwidget"] }], + "property-no-unknown": [true, { "ignoreProperties": ["resize-mode", "flexgrow"] }], + "block-opening-brace-space-after": null, + "block-closing-brace-space-before": null, + "declaration-colon-newline-after": null, + "value-list-comma-newline-after": null, + "declaration-block-no-redundant-longhand-properties": null, + "color-hex-length": null, + "block-no-empty": null, + "declaration-empty-line-before": null, + "function-calc-no-unspaced-operator": null + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 97f6f2999a5..8686265ca10 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,8 @@ "Podfile": "ruby", "*.h": "objective-c", "*.js": "javascriptreact", + "*.snap": "javascriptreact", + ".stylelintrc": "json", "yarn.lock": "text" }, "eslint.enable": false, diff --git a/Artsy.xcodeproj/project.pbxproj b/Artsy.xcodeproj/project.pbxproj index 15466f416c4..d39547b6606 100644 --- a/Artsy.xcodeproj/project.pbxproj +++ b/Artsy.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 1CC9EBA41CC76CDD00A74E3C /* followButtonChecked.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */; }; 1CC9EBA51CC76CDD00A74E3C /* followButtonChecked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */; }; 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */; }; + 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */; }; 1CF709B31CB803AA00C00FF4 /* AROnboardingHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */; }; 1CFA4EB61E5C4B6B00D44A5A /* full_logo_black_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */; }; 1CFA4EB71E5C4B6B00D44A5A /* full_logo_black_medium@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB41E5C4B6B00D44A5A /* full_logo_black_medium@2x.png */; }; @@ -110,6 +111,7 @@ 3CF144B818E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF144B718E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m */; }; 3CFB078B18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */; }; 3CFBE33618C5848900C781D0 /* ARFileUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */; }; + 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */; }; 491A4DE2168E4343003B2246 /* Gene.m in Sources */ = {isa = PBXBuildFile; fileRef = 491A4DE1168E4343003B2246 /* Gene.m */; }; 4938742917BD512700724795 /* ARSignUpSplashViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938742717BD512700724795 /* ARSignUpSplashViewController.m */; }; 4938743617BDB2CD00724795 /* ARCrossfadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938743517BDB2CD00724795 /* ARCrossfadingImageView.m */; }; @@ -135,6 +137,7 @@ 51B4BA451C6A24490014A394 /* AuctionInformationViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */; }; 51B4BA481C6A2B7B0014A394 /* AuctionSaleNetworkModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */; }; 51B4BA491C6A2B7F0014A394 /* AuctionBiddersNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C31C6A239E007148B7 /* AuctionBiddersNetworkModel.swift */; }; + 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */; }; 51D141B71AF0F14B000091CF /* ARTestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D141B61AF0F14B000091CF /* ARTestHelper.m */; }; 51DA12251B596035001B6F2A /* RefreshIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */; }; 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DCC6C71C60E26800455309 /* AuctionInformationViewController.swift */; }; @@ -248,6 +251,7 @@ 60026AF21BDE3EFB0040257C /* ARWebViewCacheHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 60026AF11BDE3EFB0040257C /* ARWebViewCacheHost.m */; }; 600415C917C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 600415C817C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m */; }; 600A734317DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m in Sources */ = {isa = PBXBuildFile; fileRef = 600A734217DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m */; }; + 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */ = {isa = PBXBuildFile; fileRef = 600B8B441C4FCEEC00776F84 /* CHANGELOG.yml */; }; 600EE29E16B3003F002E9F9A /* ARNavigationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 600EE29C16B3003F002E9F9A /* ARNavigationButton.m */; }; 60107F161CC7DC1D002F772E /* ARTestImageCachingFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60107F151CC7DC1D002F772E /* ARTestImageCachingFunctions.swift */; }; 6016120420B7446800FD54B0 /* ARVIRModalClose.png in Resources */ = {isa = PBXBuildFile; fileRef = 6016120120B7446700FD54B0 /* ARVIRModalClose.png */; }; @@ -355,6 +359,7 @@ 60C1C3181C5FA34400EC98EE /* ARSerifNavigationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */; }; 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */; }; 60CB547C1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */; }; + 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */; }; 60CE3CAB1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */; }; 60D312471EA6CFD000B13E59 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60D312461EA6CFD000B13E59 /* ReplayKit.framework */; }; 60D70DE41D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D70DE31D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift */; }; @@ -363,6 +368,7 @@ 60DCDAD71C6533DF00BB61D7 /* ARSerifNavigationViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */; }; 60E719FE1B4C6032008948FA /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 60E719FD1B4C6032008948FA /* Launch Screen.xib */; }; 60E71A011B4C60AC008948FA /* Artsy_Logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 60E71A001B4C60AC008948FA /* Artsy_Logo.png */; }; + 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */; }; 60ED311F1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */; }; 60ED31221C8F746A0071DD89 /* FakeSalesPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */; }; 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */; }; @@ -418,6 +424,7 @@ CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EC24F9684400ED2843 /* Range@2x.png */; }; CB6CE8F124F9684400ED2843 /* Thumb.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8ED24F9684400ED2843 /* Thumb.png */; }; CB6CE8F224F9684400ED2843 /* Track@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EE24F9684400ED2843 /* Track@2x.png */; }; + CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */; }; CB879D0C180746C900E2D8EC /* AuctionLot.m in Sources */ = {isa = PBXBuildFile; fileRef = CB879D0B180746C900E2D8EC /* AuctionLot.m */; }; CB9E244117CBC36F00773A9A /* ARAuthProviders.m in Sources */ = {isa = PBXBuildFile; fileRef = CB9E244017CBC36F00773A9A /* ARAuthProviders.m */; }; CBB469D0181F1F1200B5692B /* Bid.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB469CF181F1F1200B5692B /* Bid.m */; }; @@ -534,6 +541,7 @@ 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = followButtonChecked.png; sourceTree = ""; }; 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@2x.png"; sourceTree = ""; }; 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@3x.png"; sourceTree = ""; }; + 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARAppAnalyticsSpec.m; path = Analytics_Tests/ARAppAnalyticsSpec.m; sourceTree = ""; }; 1CF709B11CB803AA00C00FF4 /* AROnboardingHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AROnboardingHeaderView.h; sourceTree = ""; }; 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AROnboardingHeaderView.m; sourceTree = ""; }; 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "full_logo_black_large@2x.png"; sourceTree = ""; }; @@ -661,6 +669,8 @@ 3CFB078918EB417F00792024 /* ARSecureTextFieldWithPlaceholder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSecureTextFieldWithPlaceholder.h; sourceTree = ""; }; 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSecureTextFieldWithPlaceholder.m; sourceTree = ""; }; 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARFileUtilsTests.m; sourceTree = ""; }; + 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAnalyticsVisualizer.h; sourceTree = ""; }; + 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARAnalyticsVisualizer.m; sourceTree = ""; }; 482115D14BD4E126B81B3A2B /* libPods-Artsy Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Artsy Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 491A4DE0168E4343003B2246 /* Gene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gene.h; sourceTree = ""; }; 491A4DE1168E4343003B2246 /* Gene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Gene.m; sourceTree = ""; }; @@ -722,6 +732,8 @@ 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionSaleNetworkModelTests.swift; sourceTree = ""; }; 518B421D1B57CF7100210A02 /* AttentionIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AttentionIcon@2x.png"; sourceTree = ""; }; 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionInformationViewControllerTests.swift; sourceTree = ""; }; + 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ArtsyAPI+Sailthru.h"; sourceTree = ""; }; + 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ArtsyAPI+Sailthru.m"; sourceTree = ""; }; 51D141B51AF0F14B000091CF /* ARTestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARTestHelper.h; sourceTree = ""; }; 51D141B61AF0F14B000091CF /* ARTestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTestHelper.m; sourceTree = ""; }; 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RefreshIcon@2x.png"; sourceTree = ""; }; @@ -1034,6 +1046,8 @@ 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSerifNavigationViewController.m; sourceTree = ""; }; 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionToolbarView.swift; path = Live_Auctions/Views/LiveAuctionToolbarView.swift; sourceTree = ""; }; 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionViewControllerTests.swift; path = Live_Auction/LiveAuctionViewControllerTests.swift; sourceTree = ""; }; + 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSentryAnalyticsProvider.h; sourceTree = ""; }; + 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSentryAnalyticsProvider.m; sourceTree = ""; }; 60CE3CA91B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArtsyOHHTTPAPI.h; sourceTree = ""; }; 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArtsyOHHTTPAPI.m; sourceTree = ""; }; 60D312461EA6CFD000B13E59 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; @@ -1045,6 +1059,8 @@ 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARSerifNavigationViewControllerSpec.m; path = Components/ARSerifNavigationViewControllerSpec.m; sourceTree = ""; }; 60E719FD1B4C6032008948FA /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; 60E71A001B4C60AC008948FA /* Artsy_Logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Artsy_Logo.png; sourceTree = ""; }; + 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARStubbedAnalyticsProvider.h; sourceTree = ""; }; + 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARStubbedAnalyticsProvider.m; sourceTree = ""; }; 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewControllerTests.swift; path = Live_Auction/LiveAuctionLotViewControllerTests.swift; sourceTree = ""; }; 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FakeSalesPerson.swift; path = Live_Auction/FakeSalesPerson.swift; sourceTree = ""; }; 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewModel.swift; path = Live_Auctions/ViewModels/LiveAuctionLotViewModel.swift; sourceTree = ""; }; @@ -1131,6 +1147,8 @@ CB6CE8EC24F9684400ED2843 /* Range@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Range@2x.png"; sourceTree = ""; }; CB6CE8ED24F9684400ED2843 /* Thumb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Thumb.png; sourceTree = ""; }; CB6CE8EE24F9684400ED2843 /* Track@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Track@2x.png"; sourceTree = ""; }; + CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSegmentProvider.h; sourceTree = ""; }; + CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSegmentProvider.m; sourceTree = ""; }; CB879D0A180746C900E2D8EC /* AuctionLot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuctionLot.h; sourceTree = ""; }; CB879D0B180746C900E2D8EC /* AuctionLot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuctionLot.m; sourceTree = ""; }; CB9E243F17CBC36F00773A9A /* ARAuthProviders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAuthProviders.h; sourceTree = ""; }; @@ -1252,6 +1270,8 @@ 342F95F94C5759B9CA05AB59 /* Artwork+Extensions.h */, 3CE0DA3018A13604000E537A /* OHHTTPStubs+Artsy.h */, 3CE0DA3118A13604000E537A /* OHHTTPStubs+Artsy.m */, + 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */, + 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */, ); path = Stubs; sourceTree = ""; @@ -2512,10 +2532,16 @@ 60A0E9FB1C51070F002754A8 /* Analytics */ = { isa = PBXGroup; children = ( + CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */, + CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */, + 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */, + 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */, 5EFE2BE21910FC81003B5EEA /* ARAppDelegate+Analytics.h */, 5EFE2BE31910FC81003B5EEA /* ARAppDelegate+Analytics.m */, 6088B75217D1DBAC00E4BB67 /* ARAnalyticsConstants.h */, 6088B75317D1DBAC00E4BB67 /* ARAnalyticsConstants.m */, + 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */, + 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */, ); name = Analytics; sourceTree = ""; @@ -2607,6 +2633,8 @@ 3CB37D96192246B500089A1D /* ArtsyAPI+ErrorHandlers.m */, 608AABDA1B3884C600855A1C /* ARKeychainable.h */, 608AABDB1B3884C600855A1C /* ARKeychainable.m */, + 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */, + 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */, ); name = "API Modules"; path = API_Modules; @@ -2725,6 +2753,7 @@ 60E738721C64AC7C00AC381B /* Analytics Tests */ = { isa = PBXGroup; children = ( + 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */, ); name = "Analytics Tests"; sourceTree = ""; @@ -3083,6 +3112,7 @@ 5E80CA822093C29500BCFD82 /* CircleCheckGreen@3x.png in Resources */, 604E08232051E9E000785717 /* ARVIRPhone@2x.png in Resources */, CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */, + 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */, 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */, 608B707B17D4A1C80088A56C /* FooterBackground@2x.png in Resources */, 3C4AE99319094F96009C0E8B /* ViewInRoom_BaseNoBench@2x.png in Resources */, @@ -3241,10 +3271,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Artsy/Pods-Artsy-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.ContentCards.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/Appboy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.InAppMessage.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.NewsFeed.bundle", + "${PODS_ROOT}/Appboy-iOS-SDK/AppboyKit/Appboy.bundle", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Bold.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-BoldItalic.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Italic.otf", @@ -3272,10 +3299,7 @@ ); name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.ContentCards.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.InAppMessage.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.NewsFeed.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Bold.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-BoldItalic.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Italic.otf", @@ -3403,6 +3427,7 @@ 60A4A63E1D05C924005946EF /* UIViewController+BlurredStatusView.swift in Sources */, 60A309AD1AC9A7C8000783C1 /* NSString+StringBetweenStrings.m in Sources */, 1CC9EB9A1CC12B5400A74E3C /* AROnboardingFollowableTableViewCell.m in Sources */, + 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */, 3C7880BC18B9081C00595E30 /* ARNotificationView.m in Sources */, 60863E471D0B49AE0053B51C /* ArtsyAPI+HEAD.m in Sources */, 5EBA3E831DFF4CCB005B4BEE /* ARTwoWayDictionaryTransformer.m in Sources */, @@ -3411,6 +3436,7 @@ 60B6F0F21662AADF007C9587 /* ARAppConstants.m in Sources */, 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */, 5EF8407E1CECDFFD006248D7 /* LiveAuctionLotCollectionViewLayoutAttributes.swift in Sources */, + 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */, 5EA0E74C1DCA3DD200CE9203 /* Interstellar+Artsy.swift in Sources */, 49EC62181778AF100020D648 /* PartnerShow.m in Sources */, 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */, @@ -3458,6 +3484,7 @@ 5E3816FA1CBEDDF900477B17 /* LotListCollectionViewCell.swift in Sources */, 491A4DE2168E4343003B2246 /* Gene.m in Sources */, 602BC089168E0C0E00069FDB /* ARReusableLoadingView.m in Sources */, + CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */, 5E830A521E969B1800A56C75 /* ArtsyEcho.m in Sources */, 6099F907178F24750004EF04 /* ARDefaultNavigationTransition.m in Sources */, 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */, @@ -3563,6 +3590,7 @@ 5EFEF1C81CEB7C5800E3AAB2 /* LiveAuctionLotCollectionViewDataSource.swift in Sources */, 60F9B08F1D83255800DBAC8C /* ARAdminNetworkModel.m in Sources */, 342F9D9296B47F66184FA760 /* NSDate+DateRange.m in Sources */, + 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */, 5E47F35B1C4444A900EC0751 /* SaleViewModel.swift in Sources */, 60BC92F31BBEC89B00D13E56 /* ARApplicationShortcutItemDelegate.m in Sources */, E667F12C18EC889F00503F50 /* ARLogFormatter.m in Sources */, @@ -3621,6 +3649,7 @@ 3CF144A918E4607900B1A764 /* SystemTimeTests.m in Sources */, E649708918D7762F009DB0C4 /* ARImageItemProviderTests.m in Sources */, E61E772619A5477300C55E14 /* ARExpectaExtensions.m in Sources */, + 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */, 5EF840801CED0C5F006248D7 /* LiveAuctionFancyLotCollectionViewLayoutTests.swift in Sources */, 3C3FEA8E1884346D00E1A16F /* ARUserManager+Stubs.m in Sources */, B30FEF5A181EEA47009E4EAD /* ARBidButtonTests.m in Sources */, @@ -3652,6 +3681,7 @@ 5E9A78231906BA3D00734E1B /* OCMArg+ClassChecker.m in Sources */, 5E088DB11C58145600C448D7 /* UIViewController+Tests.swift in Sources */, D3C8C2061B66D2FF004CAD7F /* ARImageTests.m in Sources */, + 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */, 3CE75A0B18B6367F00885355 /* ARValueTransformerTests.m in Sources */, 3CA1E820188465F0003C622D /* Sale+Extensions.m in Sources */, 5E1BF7491EEB239800A9ED63 /* SaleOnHoldOverlayViewTests.swift in Sources */, diff --git a/Artsy/App/ARAnalyticsVisualizer.h b/Artsy/App/ARAnalyticsVisualizer.h new file mode 100644 index 00000000000..ff4f8d1bf8b --- /dev/null +++ b/Artsy/App/ARAnalyticsVisualizer.h @@ -0,0 +1,7 @@ +#import +#import + + +@interface ARAnalyticsVisualizer : ARAnalyticalProvider + +@end diff --git a/Artsy/App/ARAnalyticsVisualizer.m b/Artsy/App/ARAnalyticsVisualizer.m new file mode 100644 index 00000000000..32f17ce0e7c --- /dev/null +++ b/Artsy/App/ARAnalyticsVisualizer.m @@ -0,0 +1,72 @@ + + +#import "ARAnalyticsVisualizer.h" +#import "ARNotificationView.h" +#import "ARScreenPresenterModule.h" + +#import + + +@implementation ARAnalyticsVisualizer + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties +{ + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *title = [self alertTitleForEvent:event withProperties:properties]; + + [ARNotificationView showNoticeInView:[self findVisibleWindow] title:title time:1.5 response:^{ + UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:[properties description] preferredStyle:UIAlertControllerStyleActionSheet]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Copy Description" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[UIPasteboard generalPasteboard] setValue:[properties description]forPasteboardType:(NSString *)kUTTypePlainText]; + }]]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Copy Stack Trace for Devs" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSString *stack = [NSString stringWithFormat:@"%@", [NSThread callStackSymbols]]; + [[UIPasteboard generalPasteboard] setValue:stack forPasteboardType:(NSString *)kUTTypePlainText]; + }]]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Great, continue." style:UIAlertActionStyleCancel handler:nil]]; + + // Sometimes the TopVC is being presented, e.g. for onboarding/ showing login, or the alerts + UIViewController *topVC = [ARScreenPresenterModule currentlyPresentedVC]; + + if (alert.popoverPresentationController) { + // Being presented on an iPad, so it needs some further configuration. + // See: https://stackoverflow.com/questions/31577140/uialertcontroller-is-crashed-ipad + alert.popoverPresentationController.sourceView = topVC.view; + alert.popoverPresentationController.sourceRect = topVC.view.bounds; + alert.popoverPresentationController.permittedArrowDirections = 0; + } + + [topVC presentViewController:alert animated:YES completion:nil]; + }]; + }); +} + +- (NSString *)alertTitleForEvent:(NSString *)event withProperties:(NSDictionary *)properties +{ + if ([event isEqualToString:@"Screen view"]) { + return [NSString stringWithFormat:@"Screen View: %@", properties[@"slug"] ?: properties[@"screen"]]; + } else { + if (properties.allKeys.count == 1) { + return [NSString stringWithFormat:@"%@: %@ - %@", event, properties.allKeys.firstObject, properties.allValues.firstObject]; + + } else { + return event; + } + } +} + +- (UIWindow *)findVisibleWindow +{ + NSArray *windows = [[UIApplication sharedApplication] windows]; + for (UIWindow *window in [windows reverseObjectEnumerator]) { + if (!window.hidden) { + return window; + } + } + return nil; +} + +@end diff --git a/Artsy/App/ARAppActivityContinuationDelegate.m b/Artsy/App/ARAppActivityContinuationDelegate.m index e34f4598eda..29bf56e81ae 100644 --- a/Artsy/App/ARAppActivityContinuationDelegate.m +++ b/Artsy/App/ARAppActivityContinuationDelegate.m @@ -3,6 +3,7 @@ #import "ARAppDelegate+Analytics.h" #import "ARUserManager.h" #import "ArtsyAPI.h" +#import "ArtsyAPI+Sailthru.h" #import #import @@ -44,8 +45,11 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct static void DecodeURL(NSURL *URL, void (^callback)(NSURL *URL)) { - // TODO: Decode Braze url - callback(URL); + if ([URL.host isEqualToString:SailthruLinkDomain]) { + [ArtsyAPI getDecodedURLAndRegisterClick:URL completion:callback]; + } else { + callback(URL); + } } @end diff --git a/Artsy/App/ARAppDelegate+Analytics.h b/Artsy/App/ARAppDelegate+Analytics.h index df64da3704a..6db4da22d4e 100644 --- a/Artsy/App/ARAppDelegate+Analytics.h +++ b/Artsy/App/ARAppDelegate+Analytics.h @@ -3,6 +3,7 @@ @interface ARAppDelegate (Analytics) +- (void)setupAnalytics; - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer; @end diff --git a/Artsy/App/ARAppDelegate+Analytics.m b/Artsy/App/ARAppDelegate+Analytics.m index a720c042473..de9ef0702e1 100644 --- a/Artsy/App/ARAppDelegate+Analytics.m +++ b/Artsy/App/ARAppDelegate+Analytics.m @@ -1,8 +1,48 @@ // MARK: Formatter Exempt #import "ARAppDelegate+Analytics.h" +#import #import "ARAnalyticsConstants.h" -#import +#import +#import + +#import "AROptions.h" +#import "Artsy-Swift.h" + +#import "Artist.h" +#import "Artwork.h" +#import "ARDefaults.h" +#import "ARUserManager.h" +#import "Fair.h" +#import "FairOrganizer.h" +#import "Gene.h" +#import "Partner.h" +#import "PartnerShow.h" +#import "Profile.h" +#import "ARAnalyticsVisualizer.h" +#import "ARAppNotificationsDelegate.h" + +// View Controllers +#import "ARInternalMobileWebViewController.h" +#import "ARSignUpSplashViewController.h" +#import "ARPersonalizeViewController.h" +#import "AROnboardingPersonalizeTableViewController.h" +#import "ARPriceRangeViewController.h" +#import "ARViewInRoomViewController.h" +#import "ARSharingController.h" +#import "ARNavigationController.h" +#import "ARSentryAnalyticsProvider.h" +#import "ARSegmentProvider.h" +#import "ARAugmentedRealityConfig.h" +#import "ARAugmentedVIRSetupViewController.h" +#import "ARAugmentedFloorBasedVIRViewController.h" + + +// Views +#import "ARAppStatus.h" + +#import +#import // Note the Eigen Schema: // https://docs.google.com/spreadsheets/u/1/d/1bLbeOgVFaWzLSjxLOBDNOKs757-zBGoLSM1lIz3OPiI/edit#gid=497747862 @@ -10,11 +50,54 @@ @implementation ARAppDelegate (Analytics) - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer { + [ARUserManager identifyAnalyticsUser]; NSString *concreteReferrer = referrer ? referrer : @"unknown"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsDeepLinkOpened traits:@{ + [ARAnalytics event:ARAnalyticsDeepLinkOpened withProperties:@{ @"link" : url.absoluteString, @"referrer": concreteReferrer, }]; } +- (void)setupAnalytics +{ + NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; + NSString *sentryEnv = [ReactNativeConfig envFor:@"SENTRY_DSN"]; + + if (ARAppStatus.isBetaOrDev) { + segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; + } + + if (ARAppStatus.isDev) { + sentryEnv = nil; + } + + // For OSS builds don't ship the sentry env + if (sentryEnv && ![sentryEnv isEqualToString:@"-"]) { + id sentry = [[ARSentryAnalyticsProvider alloc] initWithDSN:sentryEnv]; + [ARAnalytics setupProvider:sentry]; + } + + if ([AROptions boolForOption:AROptionsShowAnalyticsOnScreen]) { + ARAnalyticsVisualizer *visualizer = [ARAnalyticsVisualizer new]; + [ARAnalytics setupProvider:visualizer]; + } + + [ARAnalytics setupProvider:[[ARSegmentProvider alloc] initWithIdentifier:segmentWriteKey integrations:nil]]; + + [ARUserManager identifyAnalyticsUser]; + [ARAnalytics incrementUserProperty:ARAnalyticsAppUsageCountProperty byInt:1]; + + switch ([[[UIScreen mainScreen] traitCollection] userInterfaceStyle]) { + case UIUserInterfaceStyleUnspecified: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"unspecified"]; + break; + case UIUserInterfaceStyleLight: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"light"]; + break; + case UIUserInterfaceStyleDark: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"dark"]; + break; + } +} + @end diff --git a/Artsy/App/ARAppDelegate+Emission.m b/Artsy/App/ARAppDelegate+Emission.m index ae07e8f24ba..2fa0ac2b251 100644 --- a/Artsy/App/ARAppDelegate+Emission.m +++ b/Artsy/App/ARAppDelegate+Emission.m @@ -34,6 +34,7 @@ #import #import #import +#import #import "ARAdminNetworkModel.h" #import "Artsy-Swift.h" @@ -115,7 +116,7 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; [ARRouter setup]; if (launchCount == 1) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsFreshInstall traits:@{}]; + [ARAnalytics event:ARAnalyticsFreshInstall]; } if (launchCount == 3) { @@ -159,18 +160,19 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; if (info[@"action_type"]) { // Track event [properties removeObjectForKey:@"action_type"]; - [[AREmission sharedInstance] sendEvent:info[@"action_type"] traits:[properties copy]]; + [ARAnalytics event:info[@"action_type"] withProperties:[properties copy]]; } else if (info[@"action"]) { if ([info[@"action"] isEqualToString:@"screen"]) { // Screen event from cohesion - [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen_owner_type"] traits:[properties copy]]; + [ARAnalytics pageView:info[@"context_screen_owner_type"] withProperties:[properties copy]]; } else { // Track event - [[AREmission sharedInstance] sendEvent:info[@"action"] traits:[properties copy]]; + [ARAnalytics event:info[@"action"] withProperties:[properties copy]]; } } else { // Screen event - [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen"] traits:[properties copy]]; + [properties removeObjectForKey:@"context_screen"]; + [ARAnalytics pageView:info[@"context_screen"] withProperties:[properties copy]]; } }; } diff --git a/Artsy/App/ARAppDelegate.h b/Artsy/App/ARAppDelegate.h index 1de76424f1c..e02adda2e71 100644 --- a/Artsy/App/ARAppDelegate.h +++ b/Artsy/App/ARAppDelegate.h @@ -1,8 +1,8 @@ #import #import "AROnboardingViewController.h" -#import +#import -@class ARWindow, ArtsyEcho; +@class ARWindow, SailthruMobile, ArtsyEcho; // This class, and infact the complete JSDecoupledAppDelegate class, is not used during testing. // The test app delegate class is ARTestHelper and is responsible for seting up the test env. @@ -11,7 +11,7 @@ // (`[JSDecoupledAppDelegate sharedAppDelegate]`) to perform your tests on. -@interface ARAppDelegate : UIResponder +@interface ARAppDelegate : UIResponder + (ARAppDelegate *)sharedInstance; @@ -21,6 +21,9 @@ @property (strong, nonatomic, readonly) NSString *referralURLRepresentation; @property (strong, nonatomic, readonly) NSString *landingURLRepresentation; +/// Shared Sailthru instance. +@property (strong, readonly) SailthruMobile *sailThru; + /// The Artsy echo instance for feature flags, and url routing etc @property (nonatomic, readwrite, strong) ArtsyEcho *echo; diff --git a/Artsy/App/ARAppDelegate.m b/Artsy/App/ARAppDelegate.m index ad524c96355..5b7ef6f67c1 100644 --- a/Artsy/App/ARAppDelegate.m +++ b/Artsy/App/ARAppDelegate.m @@ -5,11 +5,10 @@ #import #import #import -#import "AppboyReactUtils.h" -#import -#import +#import #import "ARAnalyticsConstants.h" + #import "ARAppDelegate.h" #import "ARAppDelegate+Analytics.h" #import "ARAppDelegate+Emission.h" @@ -86,6 +85,8 @@ + (void)load // protocol, as it means we would have to implement `application:openURL:options:` which seems tricky if we still // have to implement `application:openURL:sourceApplication:annotation:` as well. [JSDecoupledAppDelegate sharedAppDelegate].URLResourceOpeningDelegate = (id)_sharedInstance; + + } + (ARAppDelegate *)sharedInstance @@ -131,6 +132,11 @@ - (void)setupForAppLaunch // Temp Fix for: https://github.com/artsy/eigen/issues/602 [self forceCacheCustomFonts]; + // This cannot be moved after the view setup code, as it + // relies on swizzling alloc on new objects, thus should be + // one of the first things that happen. + [self setupAnalytics]; + [JSDecoupledAppDelegate sharedAppDelegate].remoteNotificationsDelegate = [[ARAppNotificationsDelegate alloc] init]; self.window = [[ARWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; @@ -144,7 +150,7 @@ - (void)setupForAppLaunch [[ARLogger sharedLogger] startLogging]; [self setupEmission]; - self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Artsy" initialProperties:@{}]; + self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Main" initialProperties:@{}]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; @@ -153,6 +159,7 @@ - (void)setupForAppLaunch self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; } + [ARWebViewCacheHost startup]; [self registerNewSessionOpened]; } @@ -166,51 +173,30 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [self setupForAppLaunch]; - [self setupAnalytics:application withLaunchOptions:launchOptions]; - - FBSDKApplicationDelegate *fbAppDelegate = [FBSDKApplicationDelegate sharedInstance]; - [fbAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; - if ([FIRApp defaultApp] == nil) { - [FIRApp configure]; - } - return YES; -} - -- (void)setupAnalytics:(UIApplication *)application withLaunchOptions:(NSDictionary *)launchOptions -{ - UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; - center.delegate = [self remoteNotificationsDelegate]; - NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_STAGING_APP_KEY_IOS"]; - if (![ARAppStatus isDev]) { - brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; - } + NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; - NSString *brazeSDKEndPoint = @"sdk.iad-06.braze.com"; NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary]; - appboyOptions[ABKEndpointKey] = brazeSDKEndPoint; + appboyOptions[ABKAppboyEndpointDelegateKey] = self; [Appboy startWithApiKey:brazeAppKey inApplication:application withLaunchOptions:launchOptions withAppboyOptions:appboyOptions]; - NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; - if (![ARAppStatus isDev]) { - segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; + FBSDKApplicationDelegate *fbAppDelegate = [FBSDKApplicationDelegate sharedInstance]; + [fbAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; + if ([FIRApp defaultApp] == nil) { + [FIRApp configure]; } + return YES; +} - SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:segmentWriteKey]; - configuration.trackApplicationLifecycleEvents = YES; - configuration.trackPushNotifications = YES; - configuration.trackDeepLinks = YES; - [SEGAnalytics setupWithConfiguration:configuration]; - [[SEGAppboyIntegrationFactory instance] saveLaunchOptions:launchOptions]; - [[AppboyReactUtils sharedInstance] populateInitialUrlFromLaunchOptions:launchOptions]; +- (NSString *)getApiEndpoint:(NSString *)appboyApiEndpoint { + return @"sdk.iad-06.braze.com"; } - (void)registerNewSessionOpened { - // TODO: Customise APPBOY Sessions - //A session is started when you call [[Appboy sharedInstance] startWithApiKey:inApplication:withLaunchOptions:withAppboyOptions] + [ARAnalytics startTimingEvent:ARAnalyticsTimePerSession]; } /// This happens every time we come _back_ to the app from the background @@ -218,22 +204,16 @@ - (void)registerNewSessionOpened - (void)applicationWillEnterForeground:(UIApplication *)application { [self registerNewSessionOpened]; - - NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; - if (currentUserId) { - [[Appboy sharedInstance] changeUser: currentUserId]; - } } - (void)applicationDidEnterBackground:(UIApplication *)application { - // MANUALLY track lifecycle event. Segment already does this if - // trackLifecycleSessions: true + [ARAnalytics finishTimingEvent:ARAnalyticsTimePerSession]; } - (ARAppNotificationsDelegate *)remoteNotificationsDelegate; { - return (ARAppNotificationsDelegate *)[[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; + return [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; } - (void)forceCacheCustomFonts @@ -249,6 +229,11 @@ - (void)forceCacheCustomFonts - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:(BOOL)animated { + // We now have a proper Artsy user, not just a local temporary ID + // So we have to re-identify the analytics user + // to ensure we start sending the Gravity ID as well as the local temporary ID + [ARUserManager identifyAnalyticsUser]; + // And update emission's auth state [[AREmission sharedInstance] updateState:@{ [ARStateKey userID]: [[[ARUserManager sharedManager] currentUser] userID], @@ -256,16 +241,13 @@ - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:( [ARStateKey authenticationToken]: [[ARUserManager sharedManager] userAuthenticationToken], }]; - NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; - [[Appboy sharedInstance] changeUser: currentUserId]; - ar_dispatch_main_queue(^{ if ([User currentUser]) { [self setupAdminTools]; } if (!([[NSUserDefaults standardUserDefaults] integerForKey:AROnboardingUserProgressionStage] == AROnboardingStageOnboarding)) { - ARAppNotificationsDelegate *remoteNotificationsDelegate = [self remoteNotificationsDelegate]; + ARAppNotificationsDelegate *remoteNotificationsDelegate = [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; [remoteNotificationsDelegate registerForDeviceNotificationsWithContext:ARAppNotificationsRequestContextOnboarding]; } }); diff --git a/Artsy/App/ARAppNotificationsDelegate.h b/Artsy/App/ARAppNotificationsDelegate.h index 9678d8a58a6..b834f9ee588 100644 --- a/Artsy/App/ARAppNotificationsDelegate.h +++ b/Artsy/App/ARAppNotificationsDelegate.h @@ -2,9 +2,8 @@ #import #import -#import -@interface ARAppNotificationsDelegate : NSObject +@interface ARAppNotificationsDelegate : NSObject typedef NS_ENUM(NSInteger, ARAppNotificationsRequestContext) { ARAppNotificationsRequestContextLaunch, diff --git a/Artsy/App/ARAppNotificationsDelegate.m b/Artsy/App/ARAppNotificationsDelegate.m index e5e9e9bfb8a..106351d42f7 100644 --- a/Artsy/App/ARAppNotificationsDelegate.m +++ b/Artsy/App/ARAppNotificationsDelegate.m @@ -3,8 +3,6 @@ #import "ArtsyAPI+Notifications.h" #import "ArtsyAPI+DeviceTokens.h" #import "ArtsyAPI+CurrentUserFunctions.h" -#import -#import #import "ARAppDelegate.h" #import "ARAppConstants.h" @@ -19,6 +17,7 @@ #import #import +#import #import #import "Appboy-iOS-SDK/AppboyKit.h" @@ -94,7 +93,7 @@ - (void)registerUserInterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext, @@ -118,11 +117,12 @@ - (void)registerUserDisinterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext }]; + [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:ARPushNotificationsDialogueLastSeenDate]; } @@ -167,7 +167,7 @@ - (void)registerForDeviceNotificationsWithApple UNAuthorizationOptions authOptions = (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert); [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { NSString *grantedString = granted ? @"YES" : @"NO"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationsRequested traits:@{@"granted" : grantedString}]; + [ARAnalytics event:ARAnalyticsPushNotificationsRequested withProperties:@{@"granted" : grantedString}]; [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted]; }]; @@ -189,7 +189,7 @@ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotif analyticsContext = @"Launch"; } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext @@ -212,7 +212,7 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext @@ -231,11 +231,12 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio // Save device token purely for the admin settings view. [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:ARAPNSDeviceTokenKey]; - [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsEnabledNotificationsProperty: @1}]; - [[Appboy sharedInstance] registerDeviceToken:deviceTokenData]; + [[Appboy sharedInstance] registerPushToken:deviceToken]; // We only record device tokens on the Artsy service in case of Beta or App Store builds. #ifndef DEBUG + [ARAnalytics setUserProperty:ARAnalyticsEnabledNotificationsProperty toValue:@"true"]; + // Apple says to always save the device token, as it may change. In addition, since we allow a device to register // for notifications even if the user has not signed-in, we must be sure to always update this to ensure the Artsy // service always has an up-to-date record of devices and associated users. @@ -257,17 +258,10 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler; { - + [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; [[Appboy sharedInstance] registerApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler]; - - if ([Appboy sharedInstance] == nil) { - [[SEGAppboyIntegrationFactory instance] saveRemoteNotification:userInfo]; - } - - [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; - handler(UIBackgroundFetchResultNoData); } @@ -314,13 +308,12 @@ - (void)applicationDidReceiveRemoteNotification:(NSDictionary *)userInfo inAppli - (void)receivedNotification:(NSDictionary *)notificationInfo; { - [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationReceived traits:notificationInfo]; - [[SEGAnalytics sharedAnalytics] receivedRemoteNotification:notificationInfo]; + [ARAnalytics event:ARAnalyticsNotificationReceived withProperties:notificationInfo]; } - (void)tappedNotification:(NSDictionary *)notificationInfo url:(NSString *)url; { - [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationTapped traits:notificationInfo]; + [ARAnalytics event:ARAnalyticsNotificationTapped withProperties:notificationInfo]; NSDictionary *props = [self filteredProps:notificationInfo]; [[AREmission sharedInstance] navigate:url withProps:props]; @@ -360,22 +353,4 @@ - (BOOL)tokensAreTheSame:(NSString *)newToken previousToken:(NSString * _Nullabl } } -#pragma mark - UNUserNotificationCenterDelegate - -- (void)userNotificationCenter:(UNUserNotificationCenter *)center - willPresentNotification:(UNNotification *)notification - withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { - if (@available(iOS 14.0, *)) { - completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner); - } else { - completionHandler(UNNotificationPresentationOptionAlert); - } -} - -- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { - [[Appboy sharedInstance] userNotificationCenter:center - didReceiveNotificationResponse:response - withCompletionHandler:completionHandler]; -} - @end diff --git a/Artsy/App/AROptions.h b/Artsy/App/AROptions.h index 8bef7417fba..55b836c4d5a 100644 --- a/Artsy/App/AROptions.h +++ b/Artsy/App/AROptions.h @@ -3,6 +3,7 @@ // All the options as consts extern NSString *const AROptionsDebugARVIR; extern NSString *const AROptionsDisableNativeLiveAuctions; +extern NSString *const AROptionsShowAnalyticsOnScreen; extern NSString *const AROptionsShowMartsyOnScreen; @interface AROptions : NSObject diff --git a/Artsy/App/AROptions.m b/Artsy/App/AROptions.m index d857255acf9..e48bf6ba96e 100644 --- a/Artsy/App/AROptions.m +++ b/Artsy/App/AROptions.m @@ -7,6 +7,7 @@ // Up here is the NSUserDefault set, and sent into Emission // UI Tweaks +NSString *const AROptionsShowAnalyticsOnScreen = @"AROptionsShowAnalyticsOnScreen"; NSString *const AROptionsShowMartsyOnScreen = @"AROptionsShowMartsyOnScreen"; // UX changes diff --git a/Artsy/App/ARScreenPresenterModule.m b/Artsy/App/ARScreenPresenterModule.m index ca47415dab1..96b71252798 100644 --- a/Artsy/App/ARScreenPresenterModule.m +++ b/Artsy/App/ARScreenPresenterModule.m @@ -105,12 +105,12 @@ - (dispatch_queue_t)methodQueue; ARModalViewController *modal = [[ARModalViewController alloc] initWithStack:stack]; modal.modalPresentationStyle = modalPresentationStyle; - + UIViewController *topVC = [self.class currentlyPresentedVC]; UIViewController *parentVC = [topVC presentingViewController]; - + BOOL shouldReplaceTopVC = [viewDescriptor[@"replace"] boolValue]; - + if (shouldReplaceTopVC) { [parentVC dismissViewControllerAnimated:NO completion:^{ [parentVC presentViewController:modal animated:YES completion:^{ @@ -347,31 +347,28 @@ - (void)presentNativeEmailComposer:(nonnull NSString *)toAddress subject:(nonnul // But in case there is severe RAM or disk pressure, the image might already be evicted from the cache. // In the rare occurence that a cache lookup fails, download the image into the cache first. SDWebImageManager *manager = [SDWebImageManager sharedManager]; - NSString *key = [manager cacheKeyForURL:url]; - [manager.imageCache containsImageForKey:key cacheType:SDImageCacheTypeAll completion:^(SDImageCacheType containsCacheType) { - if (containsCacheType != SDImageCacheTypeNone) { - [manager.imageCache queryImageForKey:key options:0 context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - // TODO: Verify that this _does_ actually get a cache hit most often. + if ([manager cachedImageExistsForURL:url]) { + NSString *key = [manager cacheKeyForURL:url]; + UIImage *image = [manager.imageCache imageFromDiskCacheForKey:key]; + // TODO: Verify that this _does_ actually get a cache hit most often. + gotImageBlock(image); + } else { + [manager downloadImageWithURL:url options:(SDWebImageHighPriority) progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (finished && !error) { gotImageBlock(image); - }]; - } else { - [manager loadImageWithURL:url options:SDWebImageHighPriority progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (finished && !error) { - gotImageBlock(image); - } else { - // Errors are unlikely to happen, but we should handle them just in case. - // This represents both an image cache-miss _and_ a failure to - // download the image on its own. Very unlikely. - NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; - [alert addAction:defaultAction]; - [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; - } - }]; - } - }]; - }]; + } else { + // Errors are unlikely to happen, but we should handle them just in case. + // This represents both an image cache-miss _and_ a failure to + // download the image on its own. Very unlikely. + NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; + [alert addAction:defaultAction]; + [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; + } + }]; + } + }]; } #pragma mark - MFMailComposeViewControllerDelegate diff --git a/Artsy/App/ARSegmentProvider.h b/Artsy/App/ARSegmentProvider.h new file mode 100644 index 00000000000..6dd9cfb0c1d --- /dev/null +++ b/Artsy/App/ARSegmentProvider.h @@ -0,0 +1,9 @@ +#import +#import "SegmentioProvider.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ARSegmentProvider : SegmentioProvider +@end + +NS_ASSUME_NONNULL_END diff --git a/Artsy/App/ARSegmentProvider.m b/Artsy/App/ARSegmentProvider.m new file mode 100644 index 00000000000..60e2a17ca74 --- /dev/null +++ b/Artsy/App/ARSegmentProvider.m @@ -0,0 +1,36 @@ +#import "ARSegmentProvider.h" +#import "ARAnalyticsProviders.h" +#import "SEGAnalytics.h" + +@interface ARSegmentProvider () +@property (nonatomic, copy) NSDictionary *traits; +@end + +@implementation ARSegmentProvider + +/* + * Overrides initializer to disable tracking the idfa in the Segment config + * the rest of the provider's functionality should be the same + */ +- (instancetype)initWithIdentifier:(NSString *)identifier integrations:(NSArray *)integrations { + if ((self = [super init])) { + SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWithWriteKey:identifier]; + config.enableAdvertisingTracking = NO; + for (id integration in integrations) { + [config use:integration]; + } + [SEGAnalytics setupWithConfiguration:config]; + _traits = @{}; + } + return self; +} + +/* + * Overrides identify call to not pass emails to Segment + */ +- (void)identifyUserWithID:(NSString *)userID anonymousID:(NSString *)anonymousID andEmailAddress:(NSString *)email { + [super identifyUserWithID:userID anonymousID:anonymousID andEmailAddress:nil]; +} + +@end + diff --git a/Artsy/App/ARSentryAnalyticsProvider.h b/Artsy/App/ARSentryAnalyticsProvider.h new file mode 100644 index 00000000000..428c71ba1b1 --- /dev/null +++ b/Artsy/App/ARSentryAnalyticsProvider.h @@ -0,0 +1,6 @@ +#import +#import + +@interface ARSentryAnalyticsProvider : ARAnalyticalProvider +- (id)initWithDSN:(NSString *)DSN; +@end diff --git a/Artsy/App/ARSentryAnalyticsProvider.m b/Artsy/App/ARSentryAnalyticsProvider.m new file mode 100644 index 00000000000..c8530d62e4e --- /dev/null +++ b/Artsy/App/ARSentryAnalyticsProvider.m @@ -0,0 +1,44 @@ +#import "ARSentryAnalyticsProvider.h" +#import +#import +#import +#import +#import + +@implementation ARSentryAnalyticsProvider + +- (id)initWithDSN:(NSString *)DSN +{ + self = [super init]; + if (!self) { return nil; } + + [SentrySDK startWithConfigureOptions:^(SentryOptions *options) { + options.dsn = DSN; + }]; + + return self; +} + +- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email +{ + if (userID) { + NSParameterAssert(email); + SentryUser *user = [[SentryUser alloc] initWithUserId:userID]; + user.email = email; + user.username = email; + [SentrySDK setUser:user]; + } +} + +// An event in Sentry terms is a crash, so in this case we're sending along events from analytics as breadcrumbs + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties +{ + SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:kSentryLevelDebug category:event]; + breadcrumb.data = properties; + breadcrumb.timestamp = [NSDate new]; + [SentrySDK addBreadcrumb:breadcrumb]; +} + +@end + diff --git a/Artsy/App_Resources/Artsy-Info.plist b/Artsy/App_Resources/Artsy-Info.plist index cd670a6b684..07569efc426 100644 --- a/Artsy/App_Resources/Artsy-Info.plist +++ b/Artsy/App_Resources/Artsy-Info.plist @@ -2,11 +2,6 @@ - Braze - - LogLevel - 0 - AppIdentifierPrefix $(AppIdentifierPrefix) CFBundleDevelopmentRegion diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h index 79ddaeeed23..eae013afd81 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h @@ -7,7 +7,7 @@ - (void)ar_setImageWithURL:(NSURL *)url; -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completed; +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completed; - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m index a44f1c19fb0..0ce27b13fa3 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m @@ -1,5 +1,4 @@ #import -#import #import #import "ARAppConstants.h" @@ -12,7 +11,7 @@ @implementation UIImageView (AsyncImageLoading) - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder - completed:(SDExternalCompletionBlock)completionBlock + completed:(SDWebImageCompletionBlock)completionBlock { if (!placeholder) { placeholder = [UIImage imageFromColor:[UIColor artsyGrayRegular]]; @@ -20,19 +19,13 @@ - (void)ar_setImageWithURL:(NSURL *)url // In testing provide the ability to do a synchronous fast image cache call if (!ARPerformWorkAsynchronously) { - SDImageCache *imageCache = [SDImageCache sharedImageCache]; - NSString *key = url.absoluteString; - [imageCache containsImageForKey:key cacheType:SDImageCacheTypeMemory completion:^(SDImageCacheType containsCacheType) { - if (containsCacheType != SDImageCacheTypeNone) { - [imageCache queryImageForKey:key options:SDWebImageQueryMemoryDataSync context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - self.image = image; - if (completionBlock != nil) { - completionBlock(self.image, nil, containsCacheType, url); - } - }]; - return; - } - }]; + SDWebImageManager *manager = [SDWebImageManager sharedManager]; + if ([manager cachedImageExistsForURL:url]) { + NSString *key = [manager cacheKeyForURL:url]; + self.image = [manager.imageCache imageFromDiskCacheForKey:key]; + if (completionBlock) { completionBlock(self.image, nil, SDImageCacheTypeDisk, url); } + return; + } } if ([ARLogger shouldLogNetworkRequests]) { @@ -69,7 +62,7 @@ - (void)ar_setImageWithURL:(NSURL *)url if (completionBlock) { completionBlock(image, error, cacheType, imageURL); } - }]; + }]; } else { [self sd_setImageWithURL:url placeholderImage:placeholder completed:completionBlock]; } @@ -85,7 +78,8 @@ - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder [self ar_setImageWithURL:url placeholderImage:placeholder completed:nil]; } -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completionBlock{ +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completionBlock +{ [self ar_setImageWithURL:url placeholderImage:nil completed:completionBlock]; } diff --git a/Artsy/Networking/API_Modules/ARUserManager.h b/Artsy/Networking/API_Modules/ARUserManager.h index ab69e65ee3a..e9ce64210bd 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.h +++ b/Artsy/Networking/API_Modules/ARUserManager.h @@ -14,6 +14,8 @@ extern NSString *const ARUserSessionStartedNotification; + (BOOL)didCreateAccountThisSession; ++ (void)identifyAnalyticsUser; + - (User *)currentUser; - (void)storeUserData; diff --git a/Artsy/Networking/API_Modules/ARUserManager.m b/Artsy/Networking/API_Modules/ARUserManager.m index c479b565210..04ee172335e 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.m +++ b/Artsy/Networking/API_Modules/ARUserManager.m @@ -23,6 +23,7 @@ #import "ARDispatchManager.h" #import "ARScreenPresenterModule.h" +#import #import #import @@ -61,6 +62,15 @@ + (BOOL)didCreateAccountThisSession return self.sharedManager.didCreateAccountThisSession; } ++ (void)identifyAnalyticsUser +{ + User *user = [User currentUser]; + NSString *anonymousID = self.sharedManager.localTemporaryUserUUID; + + [ARAnalytics setUserProperty:@"is_temporary_user" toValue:@(user == nil)]; + [ARAnalytics identifyUserWithID:user.userID anonymousID:anonymousID andEmailAddress:user.email]; +} + - (instancetype)init { self = [super init]; @@ -328,7 +338,7 @@ - (void)createUserWithName:(NSString *)name if (success) success(user); - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"email"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"email"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { ARActionLog(@"Creating a new user account failed. Error: %@,\nJSON: %@", error.localizedDescription, JSON); failure(error, JSON); @@ -359,7 +369,7 @@ - (void)createUserViaFacebookWithToken:(NSString *)token email:(NSString *)email if (success) { success(user); } - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"facebook"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"facebook"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -393,7 +403,7 @@ - (void)createUserViaAppleWithUID:(NSString *)appleUID if (success) { success(user); } - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"apple"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"apple"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -470,7 +480,7 @@ - (void)sendPasswordResetForEmail:(NSString *)email success:(void (^)(void))succ AFHTTPRequestOperation *op = [AFHTTPRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { if (success) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPasswordSent traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingForgotPasswordSent]; success(); } } @@ -493,6 +503,8 @@ - (void)storeUserData [NSKeyedArchiver archiveRootObject:self.currentUser toFile:userDataPath]; #pragma clang diagnostic pop + [ARUserManager identifyAnalyticsUser]; + [[NSUserDefaults standardUserDefaults] setObject:self.currentUser.userID forKey:ARUserIdentifierDefault]; [[NSUserDefaults standardUserDefaults] synchronize]; } @@ -724,7 +736,7 @@ - (void)tryLoginWithSharedWebCredentials:(void (^)(NSError *error))completion; } else { NSDictionary *account = [(__bridge NSArray *)credentials firstObject]; if (account) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"safari keychain"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"safari keychain"}]; [[ARUserManager sharedManager] loginWithUsername:account[(__bridge NSString *)kSecAttrAccount] password:account[(__bridge NSString *)kSecSharedPassword] diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h new file mode 100644 index 00000000000..f87949c3dbb --- /dev/null +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h @@ -0,0 +1,11 @@ +#import "ArtsyAPI.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ArtsyAPI (Sailthru) + ++ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m new file mode 100644 index 00000000000..8dff80332d5 --- /dev/null +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m @@ -0,0 +1,35 @@ +#import "ArtsyAPI+Sailthru.h" +#import "ARRouter.h" + +#import +#import + +@implementation ArtsyAPI (Sailthru) + ++ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; +{ + [[[AREmission sharedInstance] notificationsManagerModule] afterBootstrap:^{ + [ARRouter setup]; + [ArtsyAPI _getDecodedURLAndRegisterClick:encodedURL completion:completion]; + }]; +} + ++ (void)_getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; +{ + NSURLRequest *request = [ARRouter newSailthruRegisterClickAndDecodeURLRequest:encodedURL]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setRedirectResponseBlock:^NSURLRequest *(id _, NSURLRequest *request, NSURLResponse *response) { + if (response == nil) { + return request; + } else { + NSURL *decodedURL = [NSURL URLWithString:[(NSHTTPURLResponse *)response allHeaderFields][@"Location"]]; + dispatch_async(dispatch_get_main_queue(), ^{ + completion(decodedURL); + }); + return nil; + } + }]; + [[NSOperationQueue mainQueue] addOperation:operation]; +} + +@end diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m index fcc5a3d21c1..36cb9cdd556 100644 --- a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m @@ -7,6 +7,7 @@ #import "MTLModel+JSON.h" #import +#import @implementation ArtsyAPI (Sales) diff --git a/Artsy/Networking/ARAuthProviders.m b/Artsy/Networking/ARAuthProviders.m index 9cfd5f99805..0762cad409a 100644 --- a/Artsy/Networking/ARAuthProviders.m +++ b/Artsy/Networking/ARAuthProviders.m @@ -7,7 +7,7 @@ #import #import -#import +#import #import "ARAnalyticsConstants.h" #import @@ -29,7 +29,7 @@ + (void)getTokenForFacebook:(void (^)(NSString *token, NSString *email, NSString } else if (!error && !result.token) { NSString *description = error ? [error description] : @"token was nil"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsErrorFailedToGetFacebookCredentials traits:@{ @"error" : description }]; + [ARAnalytics event:ARAnalyticsErrorFailedToGetFacebookCredentials withProperties:@{ @"error" : description }]; ARErrorLog(@"Couldn't get Facebook credentials"); failure(error); diff --git a/Artsy/Networking/ARRouter.h b/Artsy/Networking/ARRouter.h index 175abcbc9e7..801321978e4 100644 --- a/Artsy/Networking/ARRouter.h +++ b/Artsy/Networking/ARRouter.h @@ -128,5 +128,6 @@ #pragma mark - Misc + (NSURLRequest *)newHEADRequestForPath:(NSString *)path; ++ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; @end diff --git a/Artsy/Networking/ARRouter.m b/Artsy/Networking/ARRouter.m index 16e90e0d161..64e2998052a 100644 --- a/Artsy/Networking/ARRouter.m +++ b/Artsy/Networking/ARRouter.m @@ -746,4 +746,9 @@ + (NSURLRequest *)newHEADRequestForPath:(NSString *)path return [self requestWithMethod:@"HEAD" URLString:fullPath parameters:nil]; } ++ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; +{ + return [self requestWithMethod:@"HEAD" URLString:encodedURL.absoluteString parameters:nil]; +} + @end diff --git a/Artsy/Networking/ArtsyAPI.m b/Artsy/Networking/ArtsyAPI.m index 7b41bed2fbf..a4cfeba7a87 100644 --- a/Artsy/Networking/ArtsyAPI.m +++ b/Artsy/Networking/ArtsyAPI.m @@ -15,6 +15,7 @@ #import #import #import +#import #import #import @@ -49,7 +50,7 @@ + (AFHTTPRequestOperation *)performGraphQLRequest:(NSURLRequest *)request succes if (errors) { // GraphQL queries that fail will return 200s but indicate failures with the "errors" key. We need to check them. NSLog(@"Failure fetching GraphQL query: %@", errors); - [[AREmission sharedInstance] sendEvent:ARAnalyticsGraphQLResponseError traits:json]; + [ARAnalytics event:ARAnalyticsGraphQLResponseError withProperties:json]; if (failure) { failure([NSError errorWithDomain:@"GraphQL" code:0 userInfo:json]); } @@ -269,7 +270,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAClass:( id object = nil; if (key && [jsonDictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[jsonDictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:jsonDictionary error:nil]; } @@ -342,7 +343,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO if (key && [dictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[dictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:dictionary error:nil]; } @@ -351,7 +352,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO [returnArray addObject:object]; } } - + ar_dispatch_main_queue(^{ success(returnArray); }); diff --git a/Artsy/Resources/Artsy-Bridging-Header.h b/Artsy/Resources/Artsy-Bridging-Header.h index 1cf4c789df2..0c6ea08df08 100644 --- a/Artsy/Resources/Artsy-Bridging-Header.h +++ b/Artsy/Resources/Artsy-Bridging-Header.h @@ -90,6 +90,7 @@ #import #import #import +#import #import #import #import diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m index a539758c858..2512ee80eea 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m @@ -10,7 +10,7 @@ #import "ARAppConstants.h" #import "ARDefaults.h" #import -#import +#import #import #import #import @@ -283,7 +283,7 @@ - (void)dismissInformationalView:(BOOL)animated - (void)hasRegisteredPlanes { - [[AREmission sharedInstance] sendEvent:@"success" traits:@{ + [ARAnalytics event:@"success" withProperties:@{ @"action_name" : @"arDetectedPlanes", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @@ -317,13 +317,12 @@ - (void)isShowingGhostWall:(BOOL)showing - (void)hasPlacedArtwork { - [[AREmission sharedInstance] sendEvent:@"success" traits:@{ + [ARAnalytics event:@"success" withProperties:@{ @"action_name" : @"arPlacedArtwork", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @"owner_slug": self.config.artworkSlug ?: @"unknown", }]; - ar_dispatch_main_queue(^{ [self.informationView next]; }); @@ -342,7 +341,7 @@ - (void)hasPlacedWall - (void)exitARContext { - [[AREmission sharedInstance] sendEvent:@"ar_view_in_room_time" traits:@{ + [ARAnalytics event:@"ar_view_in_room_time" withProperties:@{ @"length" : @([self timeInAR]) }]; // Ensure we jump past the SetupVC @@ -424,7 +423,7 @@ - (void)viewDidAppear:(BOOL)animated; { [super viewDidAppear:animated]; - [[AREmission sharedInstance] sendScreenEvent:@"AR View in Room" traits:@{}]; + [ARAnalytics pageView:@"AR View in Room"]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self presentInformationalInterface:animated]; diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m index c01a8831721..1f5d66af2ba 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m @@ -6,7 +6,7 @@ #import #import #import -#import +#import #import "ARAppConstants.h" #import "ARDefaults.h" @@ -199,7 +199,7 @@ - (void)viewDidLoad - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - [[AREmission sharedInstance] sendEvent:@"AR Allow Camera Access" traits:@{}]; + [ARAnalytics pageView:@"AR Allow Camera Access"]; } - (void)restartVideo:(NSNotification *)notification diff --git a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m index 91fdd2621df..ad5d60ca30a 100644 --- a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m +++ b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m @@ -69,6 +69,7 @@ - (void)viewDidLoad [tableViewData addSectionData:labsSection]; ARSectionData *toggleSections = [[ARSectionData alloc] initWithCellDataArray:@[ + [self generateOnScreenAnalytics], [self generateOnScreenMartsy] ]]; toggleSections.headerTitle = @"Options"; @@ -167,6 +168,18 @@ - (ARCellData *)showConsignmentsFlow }]; } +- (ARCellData *)generateOnScreenAnalytics +{ + NSString *message = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen] ? @"Stop" : @"Start"; + NSString * title = NSStringWithFormat(@"%@ on Screen Analytics", message); + + return [self tappableCellDataWithTitle:title selection:^{ + BOOL current = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen]; + [AROptions setBool:!current forOption:AROptionsShowAnalyticsOnScreen]; + exit(YES); + }]; +} + - (ARCellData *)generateOnScreenMartsy { NSString *message = [AROptions boolForOption:AROptionsShowMartsyOnScreen] ? @"Hide" : @"Show"; diff --git a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift index 10019129990..b9e3e77473a 100644 --- a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift +++ b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift @@ -49,7 +49,7 @@ class AuctionInformationViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if navigationController?.topViewController == self { - AREmission.sharedInstance().sendScreenEvent("Sale Information", traits: [ + ARAnalytics.pageView("Sale Information", withProperties: [ "auction_slug": saleViewModel.saleID, "slug": NSString(format: "/auction/%@/info", saleViewModel.saleID) ]) @@ -178,7 +178,7 @@ class AuctionInformationViewController: UIViewController { } func showContact(_ animated: Bool) { - AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ + ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ "auction_slug": saleViewModel.saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" @@ -199,7 +199,7 @@ class AuctionInformationViewController: UIViewController { func showBuyersPremium(_ animated: Bool) { let saleID = saleViewModel.saleID - AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ + ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ "auction_slug": saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" diff --git a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift index 3552c4a4adb..a6022dc9f6b 100644 --- a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift +++ b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift @@ -128,10 +128,10 @@ class RefinementAnalyticsOption: NSObject { } func sendAsEvent() { - AREmission.sharedInstance().sendEvent(name, traits: properties) + ARAnalytics.event(name, withProperties: properties) } func sendAsPageView() { - AREmission.sharedInstance().sendScreenEvent(name, traits: properties) + ARAnalytics.pageView(name, withProperties: properties) } } diff --git a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m index 3293ca1db54..c510a44cb10 100644 --- a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m +++ b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m @@ -1,6 +1,6 @@ #import "ARViewInRoomViewController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artwork.h" @@ -99,7 +99,7 @@ - (BOOL)prefersStatusBarHidden - (void)viewDidAppear:(BOOL)animated { - [[AREmission sharedInstance] sendEvent:ARAnalyticsArtworkViewInRoom traits:@{ + [ARAnalytics event:ARAnalyticsArtworkViewInRoom withProperties:@{ @"interaction_type": self.popOnRotation ? @"rotation" : @"button", @"artwork_slug": self.artwork.artworkID ?: @"", @"artist_slug": self.artwork.artist.artistID ?: @"", diff --git a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift index 16d00001f83..f5b73b8fc73 100644 --- a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift +++ b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift @@ -7,7 +7,8 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { static let CellClass = LiveAuctionLotImageCollectionViewCell.self let salesPerson: LiveAuctionsSalesPersonType - let imagePrefetcher = SDWebImagePrefetcher.shared; + let imagePrefetcher = SDWebImagePrefetcher.shared() + init(salesPerson: LiveAuctionsSalesPersonType) { self.salesPerson = salesPerson super.init() @@ -19,7 +20,7 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { func beginThumbnailPrecache() { let thumbnailURLs = (1.. Int { diff --git a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m index 2605d738f06..889cf800d05 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m @@ -19,6 +19,7 @@ #import "ARParallaxEffect.h" #import "ArtsyAPI+Private.h" +#import #import "ARAnalyticsConstants.h" #import "ARDispatchManager.h" #import "ARFollowable.h" @@ -94,7 +95,7 @@ - (instancetype)init - (void)viewDidLoad { [super viewDidLoad]; - + self.view.backgroundColor = [UIColor whiteColor]; self.view.tintColor = [UIColor artsyPurpleRegular]; @@ -394,7 +395,7 @@ - (void)personalizePasswordDone:(NSString *)password - (void)personalizeLoginWithPasswordDone:(NSString *)password { [self loginUserWithEmail:self.email password:password withSuccess:^{ - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"email"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"email"}]; [self finishAccountCreation]; }]; } @@ -476,7 +477,7 @@ - (void)conditionsOfSaleLinkTapped - (void)setPriceRangeDone:(NSInteger)range { NSString *stringRange = [NSString stringWithFormat:@"%@", @(range)]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingBudgetSelected traits:@{ @"budget" : stringRange }]; + [ARAnalytics event:ARAnalyticsOnboardingBudgetSelected withProperties:@{ @"budget" : stringRange }]; self.budgetRange = range; } @@ -556,7 +557,7 @@ - (void)sendPasswordResetEmail:(NSString *)email sender:(id)sender } failure:^(NSError *error) { ARErrorLog(@"Password reset failed for %@. Error: %@", email, error.localizedDescription); [(ARPersonalizeViewController *)sender passwordResetError:@"Couldn’t send reset password link. Please try again, or contact support@artsy.net"]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : @"Couldn’t send reset password link."}]; + [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : @"Couldn’t send reset password link."}]; }]; } @@ -565,7 +566,7 @@ - (void)applyPersonalizationToUser { if (self.budgetRange && self.followedItemsDuringOnboarding) { NSString *stringRange = [NSString stringWithFormat:@"%@", @(self.budgetRange)]; - [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsPriceRangeProperty: stringRange}]; + [ARAnalytics setUserProperty:ARAnalyticsPriceRangeProperty toValue:stringRange]; User *user = [User currentUser]; user.priceRange = stringRange; @@ -675,8 +676,8 @@ - (void)loginWithFacebookCredentialToken:(NSString *)token // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"facebook"}]; - [sself finishAccountCreation]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"facebook"}]; + [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; } @@ -816,7 +817,7 @@ - (void)loginWithAppleUID:(NSString *)appleUID idToken:(NSString *)idToken { // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"apple"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"apple"}]; [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; @@ -854,7 +855,7 @@ - (void)displayError:(NSString *)errorMessage } } [(ARPersonalizeViewController *)self.topViewController showErrorWithMessage:errorMessage]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : errorMessage}]; + [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : errorMessage}]; } - (void)displayNetworkFailureError diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m index 42c2136af2b..5421067ed8b 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m @@ -19,7 +19,7 @@ #import #import #import -#import +#import @interface ARSignUpSplashTextViewController : UIViewController @@ -88,7 +88,7 @@ - (void)viewWillAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding start" traits:@{}]; + [ARAnalytics pageView:@"Onboarding start"]; void(^removeSpinners)(void) = ^ { if (!self.spinnerView) { return; @@ -191,7 +191,7 @@ - (void)showBackgroundViews // Business as usual [self.spinnerView alignToView:self.view]; } - + [self.spinnerView startAnimating]; NSArray *images = [self.pages map:^id(NSDictionary *object) { @@ -215,7 +215,7 @@ - (void)setupControls; [self.getStartedButton setBackgroundColor:[UIColor blackColor] forState:UIControlStateHighlighted]; [self.getStartedButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; } - + self.descriptionLabel = [[ARSerifLineHeightLabel alloc] initWithLineSpacing:6]; self.descriptionLabel.backgroundColor = [UIColor clearColor]; self.descriptionLabel.opaque = NO; @@ -224,10 +224,10 @@ - (void)setupControls; self.descriptionLabel.textAlignment = NSTextAlignmentCenter; self.descriptionLabel.numberOfLines = 0; self.descriptionLabel.text = self.pages[0][@"copy"]; - + ARTermsAndConditionsView *label = [[ARTermsAndConditionsView alloc] init]; label.hidden = YES; - + [self.view addSubview:self.descriptionLabel]; [self.view addSubview:self.getStartedButton]; [self.view addSubview:label]; @@ -235,11 +235,11 @@ - (void)setupControls; [self.descriptionLabel constrainWidth:self.useLargeLayout ? @"500" : @"280" height:self.useLargeLayout ? @"160" : @"120"]; [self.descriptionLabel alignCenterXWithView:self.view predicate:@"0"]; self.spaceDescription = [self.descriptionLabel constrainBottomSpaceToView:self.getStartedButton predicate:self.useLargeLayout ? @"-190" : @"-25"]; - + [self.getStartedButton alignBottomEdgeWithView:label predicate:self.useLargeLayout ? @"-170" : @"-80"]; [self.getStartedButton alignCenterXWithView:self.view predicate:@"0"]; [self.getStartedButton constrainWidth:self.useLargeLayout ? @"340" : @"300" height:@"50"]; - + [label constrainWidth:@"280" height:@"40"]; [label alignCenterXWithView:self.view predicate:@"0"]; @@ -288,7 +288,7 @@ - (UIImage *)backgroundImage - (void)startOnboarding:(id)sender { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingGetStarted traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingGetStarted]; [self.delegate splashDone:self]; } diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m index 2a091908d26..fda9627d05b 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m @@ -24,7 +24,6 @@ #import #import #import -#import // maxim's sneaky last comment in Eigen (for a dummy commit). This can be removed when you find it ;). @@ -102,19 +101,19 @@ - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your email" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your email"]; } else if (self.state == AROnboardingStagePersonalizeLogin) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your password" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your password"]; } else if (self.state == AROnboardingStagePersonalizePassword) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding create a password" traits:@{}]; + [ARAnalytics pageView:@"Onboarding create a password"]; } else if (self.state == AROnboardingStagePersonalizeName) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your full name" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your full name"]; } else if (self.state == AROnboardingStagePersonalizeArtists) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow artists" traits:@{}]; + [ARAnalytics pageView:@"Onboarding follow artists"]; } else if (self.state == AROnboardingStagePersonalizeCategories) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow categories" traits:@{}]; + [ARAnalytics pageView:@"Onboarding follow categories"]; } else if (self.state == AROnboardingStagePersonalizeBudget) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding select budget" traits:@{}]; + [ARAnalytics pageView:@"Onboarding select budget"]; } } @@ -643,7 +642,7 @@ - (void)showErrorWithMessage:(NSString *)errorMessage - (void)forgotPassword:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPassword traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingForgotPassword]; } UIAlertController *forgotPasswordAlert = [UIAlertController alertControllerWithTitle:@"Forgot Password" message:@"Please enter your email address and we’ll send you a reset link." @@ -760,7 +759,7 @@ - (void)searchStarted }; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingTappedSearch traits:context]; + [ARAnalytics event:ARAnalyticsOnboardingTappedSearch withProperties:context]; } [self.headerView searchStarted]; } @@ -831,7 +830,7 @@ - (void)artistFollowed:(Artist *)artist sourceScreen = @"onboarding recommended"; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsArtistFollow traits:@{ + [ARAnalytics event:ARAnalyticsArtistFollow withProperties:@{ @"artist_slug" : artist.artistID ?: @"", @"artist_id" : artist.artistID ?: @"", @"source_screen" : sourceScreen @@ -880,7 +879,7 @@ - (void)categoryFollowed:(Gene *)category } else if (self.searchResultsTable.contentDisplayMode == ARTableViewContentDisplayModeRelatedResults) { sourceScreen = @"onboarding recommended"; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsGeneFollow traits:@{ + [ARAnalytics event:ARAnalyticsGeneFollow withProperties:@{ @"gene_id" : category.geneID ?: @"", @"source_screen" : sourceScreen }]; @@ -990,7 +989,7 @@ - (void)nextTapped:(id)sender - (void)backTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingAlreadyAccountBack traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingAlreadyAccountBack]; } self.comingBack = YES; [self.delegate backTapped]; @@ -999,7 +998,7 @@ - (void)backTapped:(id)sender - (void)facebookSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithFacebook traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingConnectWithFacebook]; } self.comingBack = YES; [self.delegate personalizeFacebookSignInTapped]; @@ -1008,7 +1007,7 @@ - (void)facebookSignInTapped:(id)sender - (void)appleSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithApple traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingConnectWithApple]; } self.comingBack = YES; [self.delegate personalizeAppleSignInTapped]; diff --git a/Artsy/View_Controllers/Util/ARFeedImageLoader.m b/Artsy/View_Controllers/Util/ARFeedImageLoader.m index 30804969304..8af4c5ea199 100644 --- a/Artsy/View_Controllers/Util/ARFeedImageLoader.m +++ b/Artsy/View_Controllers/Util/ARFeedImageLoader.m @@ -4,7 +4,7 @@ #import "UIImage+ImageFromColor.h" #import "UIImageView+AsyncImageLoading.h" -#import + // From the gravity source //version :small, if: :is_processing_delayed? do diff --git a/Artsy/View_Controllers/Util/ARNavigationController.m b/Artsy/View_Controllers/Util/ARNavigationController.m index ad42f88f71a..8a49270d079 100644 --- a/Artsy/View_Controllers/Util/ARNavigationController.m +++ b/Artsy/View_Controllers/Util/ARNavigationController.m @@ -27,6 +27,7 @@ #import #import #import +#import static void *ARNavigationControllerButtonStateContext = &ARNavigationControllerButtonStateContext; static void *ARNavigationControllerScrollingChiefContext = &ARNavigationControllerScrollingChiefContext; diff --git a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m index 3ad49a27dc3..c38eee69b36 100644 --- a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m +++ b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m @@ -2,9 +2,9 @@ #import "ARCustomEigenLabels.h" #import "ARScreenPresenterModule.h" +#import #import #import -#import @interface ARNetworkErrorManager () @property (nonatomic, strong) UILabel *activeModalView; @@ -30,7 +30,7 @@ + (void)presentActiveError:(NSError *)error; + (void)presentActiveError:(NSError *)error withMessage:(NSString *)message; { - [SentrySDK captureError:error]; + [ARAnalytics error:error withMessage:message]; ARNetworkErrorManager *manager = [self sharedManager]; if (manager.activeModalView == nil) { diff --git a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m index eafa1ce1a54..b039fa3eec3 100644 --- a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m +++ b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m @@ -1,6 +1,6 @@ #import "ARSharingController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artist.h" @@ -80,7 +80,7 @@ - (void)presentActivityViewControllerFromView:(UIView *)view frame:(CGRect)frame - (void)handleActivityCompletion:(NSString *)activityType completed:(BOOL)completed { if (completed) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsShare traits:@{ + [ARAnalytics event:ARAnalyticsShare withProperties:@{ @"object_type" : NSStringFromClass(self.object.class) ?: @"", @"service" : activityType ?: @"" }]; diff --git a/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m b/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m new file mode 100644 index 00000000000..590bdbca953 --- /dev/null +++ b/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m @@ -0,0 +1,40 @@ +#import "ARAppDelegate.h" +#import "ARAppDelegate+Analytics.h" +#import "ARStubbedAnalyticsProvider.h" +#import +#import "ARAnalyticsConstants.h" + +/// Depending on how this spec turns out, it may be worth migrating it into it's own target +/// as, in theory, this spec can leak into all the others due to the triggering of analytics. + +/// Imports for the VC/Views + +// #import "ARArtistViewController.h" + +/// ZZ to make it go last, thanks to XCTest implmentation details +SpecBegin(ZZAppAnalytics); + +// This should only get run once, as it does all the swizzling +// calling that multiple times looks to me like it could +// end up with unexpected behavior + +beforeAll(^{ + ARAppDelegate *delegate = [[ARAppDelegate alloc] init]; + [delegate setupAnalytics]; +}); + +__block ARStubbedAnalyticsProvider *analytics; + +/// Kill off all existing providers, then replace with our easily introspected provider: + +beforeEach(^{ + analytics = [[ARStubbedAnalyticsProvider alloc] initWithIdentifier:@""]; + [[ARAnalytics currentProviders].copy each:^(id provider) { + [ARAnalytics removeProvider:provider]; + }]; + + [ARAnalytics setupProvider:analytics]; +}); + + +SpecEnd diff --git a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m index bf8e4822b92..a4e5b1b30cc 100644 --- a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m @@ -1,6 +1,7 @@ #import "ARAppActivityContinuationDelegate.h" #import "ARUserManager.h" #import "ARAppDelegate+Analytics.h" +#import "ArtsyAPI+Sailthru.h" #import #import @@ -87,6 +88,21 @@ continueUserActivity:activity restorationHandler:^(NSArray *_) {}]).to.beTruthy(); }); + + it(@"requests a decoded URL from Sailthru and then routes the WebBrowsing link to the appropriate view controller and shows it", ^{ + NSURL *sailthruURL = [NSURL URLWithString:@"https://link.artsy.net/click/some-opaque-ID"]; + + NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + activity.webpageURL = sailthruURL; + + [[apiMock expect] getDecodedURLAndRegisterClick:sailthruURL + completion:[OCMArg checkWithBlock:^(void (^callback)(NSURL *URL)) { + callback(URL); + return YES; + }]]; + [delegate application:app continueUserActivity:activity restorationHandler:^(NSArray *_) {}]; + [apiMock verify]; + }); }); SpecEnd; diff --git a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m index 9c7a3c2d15e..c0611ffb424 100644 --- a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m @@ -1,10 +1,10 @@ #import "ARAppNotificationsDelegate.h" +#import #import "ARAnalyticsConstants.h" #import "ARNotificationView.h" #import "ARSerifNavigationViewController.h" #import "UIApplicationStateEnum.h" #import -#import static NSDictionary * DictionaryWithAppState(NSDictionary *input, UIApplicationState appState) @@ -29,33 +29,27 @@ - (UIViewController *)getGlobalTopViewController; __block UIApplication *app = nil; __block ARAppNotificationsDelegate *delegate = nil; __block UIApplicationState appState = -1; - __block id mockEmissionSharedInstance = nil; - __block id mockSegmentSharedInstance = nil; + __block id mockAnalytics = nil; beforeEach(^{ app = [UIApplication sharedApplication]; delegate = [[ARAppNotificationsDelegate alloc] init]; - mockEmissionSharedInstance = [OCMockObject partialMockForObject:AREmission.sharedInstance];; - - // Setup a segment shared instance otherwise the tests will crash - SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"GARBAGE"]; - [SEGAnalytics setupWithConfiguration:configuration]; + mockAnalytics = [OCMockObject mockForClass:[ARAnalytics class]]; }); afterEach(^{ - [mockEmissionSharedInstance stopMocking]; - [mockSegmentSharedInstance stopMocking]; + [mockAnalytics stopMocking]; }); sharedExamplesFor(@"when receiving a notification", ^(id _) { it(@"triggers an analytics event for receiving a notification", ^{ - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationReceived traits:DictionaryWithAppState(notification, appState)]; - [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationTapped traits:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationReceived withProperties:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics reject] event:ARAnalyticsNotificationTapped withProperties:OCMOCK_ANY]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; }); }); @@ -74,19 +68,21 @@ - (UIViewController *)getGlobalTopViewController; describe(@"with stubbed top menu VC", ^{ it(@"navigates to the url provided", ^{ - [[mockEmissionSharedInstance expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; + id mock = [OCMockObject partialMockForObject:AREmission.sharedInstance]; + [[mock expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mock verify]; + [mock stopMocking]; }); it(@"triggers an analytics event when a notification has been tapped", ^{ - [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics reject] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; }); it(@"does not display the message in aps/alert", ^{ @@ -126,12 +122,12 @@ - (UIViewController *)getGlobalTopViewController; return YES; }]]; - [[mockEmissionSharedInstance stub] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics stub] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; [mockNotificationView stopMocking]; }); diff --git a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift index 64c35891322..2bde6852c9b 100644 --- a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift +++ b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift @@ -4,5 +4,5 @@ func cacheColoredImageForURL(_ url: URL?, color: UIColor = UIColor.debugColourPu precondition(url != nil) let image = UIImage(from: color, with: CGSize(width: 500, height: 500)) - SDWebImageManager.shared.imageCache.store(image, imageData:nil, forKey: url!.absoluteString, cacheType: .memory, completion: nil) + SDWebImageManager.shared().saveImage(toCache: image, for: url!) } diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h new file mode 100644 index 00000000000..ff48f6b4e63 --- /dev/null +++ b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h @@ -0,0 +1,28 @@ +#import +#import + + +@interface ARStubbedAnalyticsProvider : ARAnalyticalProvider + +@property (readonly, nonatomic, copy) NSString *lastProviderIdentifier; + +@property (readonly, nonatomic, copy) NSString *lastEventName; +@property (readonly, nonatomic, copy) NSDictionary *lastEventProperties; + +@property (readonly, nonatomic, copy) NSMutableArray *eventNames; + +@property (readonly, nonatomic, copy) NSString *lastUserPropertyValue; +@property (readonly, nonatomic, copy) NSString *lastUserPropertyKey; +@property (readonly, nonatomic, assign) NSInteger lastUserPropertyCount; + +@property (readonly, nonatomic, copy) NSString *email; +@property (readonly, nonatomic, copy) NSString *identifier; + +@property (readonly, nonatomic, strong) NSError *lastError; +@property (readonly, nonatomic, copy) NSString *lastErrorMessage; + +@property (readonly, nonatomic, strong) UINavigationController *lastMonitoredNavigationController; + +@property (readonly, nonatomic, copy) NSString *lastRemoteLog; + +@end diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m new file mode 100644 index 00000000000..6ca65fdab5a --- /dev/null +++ b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m @@ -0,0 +1,73 @@ +#import "ARStubbedAnalyticsProvider.h" + + +@implementation ARStubbedAnalyticsProvider + +- (id)initWithIdentifier:(NSString *)identifier +{ + self = [super initWithIdentifier:identifier]; + if (!self) return nil; + + _lastProviderIdentifier = identifier; + _eventNames = [NSMutableArray array]; + + return self; +} + +- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email +{ + _identifier = userID; + _email = email; +} + +- (void)setUserProperty:(NSString *)property toValue:(NSString *)value +{ + _lastUserPropertyKey = property; + _lastUserPropertyValue = value; +} + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties; +{ + _lastEventName = event; + _lastEventProperties = properties; + [_eventNames addObject:event]; +} + +- (void)incrementUserProperty:(NSString *)counterName byInt:(NSNumber *)amount +{ + _lastUserPropertyKey = counterName; + _lastUserPropertyCount += amount.integerValue; +} + +- (void)error:(NSError *)error withMessage:(NSString *)message +{ + _lastError = error; + _lastErrorMessage = message; +} + +- (void)monitorNavigationViewController:(UINavigationController *)controller +{ + _lastMonitoredNavigationController = controller; + [super monitorNavigationViewController:controller]; +} + + +- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval +{ + _lastEventName = event; +} + +- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval properties:(NSDictionary *)properties +{ + [super logTimingEvent:event withInterval:interval properties:properties]; + + _lastEventName = event; + _lastEventProperties = properties; +} + +- (void)remoteLog:(NSString *)parsedString +{ + _lastRemoteLog = parsedString; +} + +@end diff --git a/Artsy_Tests/Supporting_Files/ARTestHelper.m b/Artsy_Tests/Supporting_Files/ARTestHelper.m index a1a796a6b46..5ac3a0b7a2a 100644 --- a/Artsy_Tests/Supporting_Files/ARTestHelper.m +++ b/Artsy_Tests/Supporting_Files/ARTestHelper.m @@ -5,7 +5,6 @@ #import "ARUserManager.h" #import -#import #import "ARFonts.h" #import diff --git a/CHANGELOG.legacy.yml b/CHANGELOG.yml similarity index 96% rename from CHANGELOG.legacy.yml rename to CHANGELOG.yml index 7a8abafecb2..07e0d0d52b9 100644 --- a/CHANGELOG.legacy.yml +++ b/CHANGELOG.yml @@ -1,10 +1,7 @@ -# We are no longer using this changelog, see this RFC: https://github.com/artsy/eigen/issues/4499 - upcoming: - version: 6.10.1 + version: 6.10.0 date: TBD dev: - - Add new adress form - Add apple authentication - dzmitry - Add google authentication - dzmitry - Add new onboarding feature flag on ios - dzmitry @@ -23,62 +20,37 @@ upcoming: - Add tracking to "Unable To Load" screen - mounir - Adjust auction results for you tracking - ole - Make Home Auction Results By Followed Artists ready for release - mounir - - Replace ios native analytics with segment analytics - kizito - - user_facing: + - Prevent facebook auth for users without email - dzmitry + - Fix unfollowing categories - katsiaryna alshannikava + - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak + - Fix locations menu redirection - katsiaryna alshannikava + - Implement share button for articles - katsiaryna alshannikava, mounir + - Allow screen rotations on android tablets - kizito + - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava + - Connect auction results for you to metaphysics endpoint - yauheni + - Fix opening artist page after passing new onboarding on ios - dzmitry + - Polish Auction Results for you screen and home rail (behind feature flag) - ole + - Fix crash when opening app from background on android - brian + - Change error handling middleware & include optionalField graphql directive to home screen - ole + - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava + - Prevent users from submitting consignments for non target supply artists - ole + - Fix empty search for consignment submissions - dzmitry + - Release order history view - sweir + - Add Saved Addresses screen (behind feature flag) - ozzie + - Fix visual bug on auction result list item on artist insights screen - ole + - Fix auction result home rail loading spinner issue - ole + - Fix share button on BNMO Flow - ole, mounir, sam, george + - Annotate home screen queries with optionalField directive - ole + - Fix collection home rail loading spinner issue - ole + - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak + - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole + - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava + - Fix auction results for you description text scroll issue - ole + - Fix facebook login failing after signing up for a new account - stanislau hanchar - Add keyword search to artist auction reults - ole releases: - - version: 6.10.0 - - date: July 12, 2021 - - dev: - - Add apple authentication - dzmitry - - Add google authentication - dzmitry - - Add new onboarding feature flag on ios - dzmitry - - Add optionalField for Order History and Order Details - Serge0n - - Add specs for deleteSavedSearch and createSavedSearch mutations - dzmitry tratsiak - - Add toggledSavedSearch analytics tracking - devon blandin - - Allow custom attributes from a push notification payload to be passed through to React Native scenes - devon blandin - - Add diagnose script - mounir - - Pass size filter parameters to a saved search criteria - dzmitry tratsiak - - Update open simulator command in getting started docs - ole - - Fix follow artist button on ios - dzmitry - - Add analytics for AuctionResultsForYou and AuctionResultsRail components - yauheni - - Add a feature flag for Saved Addresses - ozzie - - Initial Push Notification Setup on android - kizito - - Replace deleteSavedSearch mutation on disableSavedSearch - dzmitry tratsiak - - Add tracking to "Unable To Load" screen - mounir - - Adjust auction results for you tracking - ole - - Make Home Auction Results By Followed Artists ready for release - mounir - - user_facing: - - Prevent facebook auth for users without email - dzmitry - - Fix unfollowing categories - katsiaryna alshannikava - - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak - - Fix locations menu redirection - katsiaryna alshannikava - - Implement share button for articles - katsiaryna alshannikava, mounir - - Allow screen rotations on android tablets - kizito - - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava - - Connect auction results for you to metaphysics endpoint - yauheni - - Fix opening artist page after passing new onboarding on ios - dzmitry - - Polish Auction Results for you screen and home rail (behind feature flag) - ole - - Fix crash when opening app from background on android - brian - - Change error handling middleware & include optionalField graphql directive to home screen - ole - - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava - - Prevent users from submitting consignments for non target supply artists - ole - - Fix empty search for consignment submissions - dzmitry - - Release order history view - sweir - - Add Saved Addresses screen (behind feature flag) - ozzie - - Fix visual bug on auction result list item on artist insights screen - ole - - Fix auction result home rail loading spinner issue - ole - - Fix share button on BNMO Flow - ole, mounir, sam, george - - Annotate home screen queries with optionalField directive - ole - - Fix collection home rail loading spinner issue - ole - - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak - - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole - - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava - - Fix auction results for you description text scroll issue - ole - - Fix facebook login failing after signing up for a new account - stanislau hanchar - - version: 6.9.5 - date: June 24, 2021 - dev: diff --git a/Gemfile.lock b/Gemfile.lock index 4687db560d7..a1f8818bab0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,7 +7,7 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - addressable (2.8.0) + addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) @@ -15,20 +15,20 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.1.1) - aws-partitions (1.479.0) - aws-sdk-core (3.117.0) + aws-partitions (1.451.0) + aws-sdk-core (3.114.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.44.0) + aws-sdk-kms (1.43.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.96.2) + aws-sdk-s3 (1.94.1) aws-sdk-core (~> 3, >= 3.112.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.4) + aws-sigv4 (1.2.3) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) celluloid (0.18.0) @@ -113,35 +113,27 @@ GEM escape (0.0.4) ethon (0.14.0) ffi (>= 1.15.0) - excon (0.85.0) - faraday (1.5.1) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) + excon (0.81.0) + faraday (1.4.1) faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0.1) faraday-net_http (~> 1.0) faraday-net_http_persistent (~> 1.1) - faraday-patron (~> 1.0) multipart-post (>= 1.2, < 3) ruby2_keywords (>= 0.0.4) faraday-cookie_jar (0.0.7) faraday (>= 0.8.0) http-cookie (~> 1.0.0) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-http-cache (2.2.0) faraday (>= 0.8) - faraday-httpclient (1.0.1) faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) + faraday-net_http_persistent (1.1.0) faraday_middleware (1.0.0) faraday (~> 1.0) - fastimage (2.2.4) - fastlane (2.188.0) + fastimage (2.2.3) + fastlane (2.182.0) CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.8, < 3.0.0) + addressable (>= 2.3, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) @@ -156,9 +148,8 @@ GEM faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-apis-androidpublisher_v3 (~> 0.1) - google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-storage (~> 1.31) + google-api-client (>= 0.37.0, < 0.39.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) highline (~> 2.0) json (< 3.0.0) jwt (>= 2.1.0, < 3) @@ -177,43 +168,48 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - fastlane-plugin-sentry (1.8.3) + fastlane-plugin-sentry (1.8.1) ffi (1.15.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) git (1.8.1) rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.8.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.4.1) + google-api-client (0.38.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) + googleauth (~> 0.9) + httpclient (>= 2.8.1, < 3.0) mini_mime (~> 1.0) representable (~> 3.0) - retriable (>= 2.0, < 4.a) + retriable (>= 2.0, < 4.0) + signet (~> 0.12) + google-apis-core (0.3.0) + addressable (~> 2.5, >= 2.5.1) + googleauth (~> 0.14) + httpclient (>= 2.8.1, < 3.0) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) rexml + signet (~> 0.14) webrick - google-apis-iamcredentials_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.5.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.3.0) + google-apis-core (~> 0.1) + google-apis-storage_v1 (0.3.0) + google-apis-core (~> 0.1) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) google-cloud-env (1.5.0) faraday (>= 0.17.3, < 2.0) google-cloud-errors (1.1.0) - google-cloud-storage (1.34.1) + google-cloud-storage (1.31.0) addressable (~> 2.5) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) google-apis-storage_v1 (~> 0.1) - google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) + google-cloud-core (~> 1.2) + googleauth (~> 0.9) mini_mime (~> 1.0) googleauth (0.16.2) faraday (>= 0.17.3, < 2.0) @@ -224,14 +220,14 @@ GEM signet (~> 0.14) highline (2.0.3) http-2 (0.11.0) - http-cookie (1.0.4) + http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.8.10) concurrent-ruby (~> 1.0) jmespath (1.4.0) json (2.5.1) - jwt (2.2.3) + jwt (2.2.2) kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) @@ -260,7 +256,7 @@ GEM plist (3.6.0) psych (3.3.0) public_suffix (4.0.6) - rake (13.0.6) + rake (13.0.3) rchardet (1.8.0) representable (3.1.1) declarative (< 0.1.0) @@ -270,8 +266,8 @@ GEM rexml (3.2.5) rouge (2.0.7) ruby-macho (1.4.0) - ruby2_keywords (0.0.5) - rubyzip (2.3.2) + ruby2_keywords (0.0.4) + rubyzip (2.3.0) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) @@ -308,13 +304,12 @@ GEM xcode-install (2.6.8) claide (>= 0.9.1, < 1.1.0) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.20.0) + xcodeproj (1.19.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) diff --git a/HACKS.md b/HACKS.md index 47f7fc82ef9..b30d9f2f8d4 100644 --- a/HACKS.md +++ b/HACKS.md @@ -198,27 +198,27 @@ As you can see in the PR and issue, android doesn't use ellipsis on the placehol We added a workaround on Input, to accept an array of placeholders, from longest to shortest, so that android can measure which one fits in the TextInput as placeholder, and it uses that. When android can handle a long placeholder and use ellipsis or if we don't use long placeholders anymore, this can go. -# `react-native-screens` fragment crash on open from background on Android +# `@segment/analytics-react-native` and `@segment/analytics-react-native-appboy` patch #### When can we remove this: -Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. +Once we work on [CX-1421](https://artsyproduct.atlassian.net/browse/CX-1421?atlOrigin=eyJpIjoiYjJiMWY4MThlOTY2NDc3ZGJiMTljZTJjM2FmMmVkZjQiLCJwIjoiaiJ9) to replace the native ios analytics with the TS analytics we use for android already. #### Explanation/Context: -There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be -added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. +Basically these patches remove the podspecs of these two deps. They confuse and break ios, and we don't use them there yet anyway. -This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. +Once we start working on replacing the native analytics with TS ones, then we remove these two patches too. -# `react-native-push-notification` Requiring unknown module on ios +# `react-native-screens` fragment crash on open from background on Android #### When can we remove this: -Once we want to use react-native-push-notification on iOS +Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. #### Explanation/Context: -This is happening because react-native-push-notification requires @react-native-community/push-notification-ios. We are not -adding this dependency at this time because it is unnecessary and we do not use react-native-push-notification on iOS. Also, -we do not want unnecessary conflicts between our native push notification implementation and @react-native-community/push-notification-ios's. +There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be +added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. + +This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. diff --git a/Podfile b/Podfile index 8baa7629712..6d7db46e6d2 100644 --- a/Podfile +++ b/Podfile @@ -53,8 +53,11 @@ end def remove_mapbox_creds if $user_already_had_netrc_file contents = File.read($netrc_path) - cleaned = contents.gsub(/machine api\.mapbox\.com\nlogin mapbox\npassword #{ENV['MAPBOX_DOWNLOAD_TOKEN']}\n/, "") + matches = contents.to_enum(:scan, /machine api\.mapbox\.com.*\n.*\n.*\n/).map { Regexp.last_match } + return if matches == nil or matches.length == 0 + last_match = matches.last File.open($netrc_path, 'w') { |f| + cleaned = last_match.pre_match + last_match.post_match f.write(cleaned) } else @@ -79,7 +82,7 @@ target 'Artsy' do pod 'AFNetworking', '~> 2.5', subspecs: %w[Reachability Serialization Security NSURLSession NSURLConnection] pod 'AFOAuth1Client', git: 'https://github.com/artsy/AFOAuth1Client.git', tag: '0.4.0-subspec-fix' pod 'AFNetworkActivityLogger' - pod 'SDWebImage', '5.8.3' + pod 'SDWebImage', '>= 3.7.2' # 3.7.2 contains a fix that allows you to not force decoding each image, which uses lots of memory # Core pod 'ARGenericTableViewController', git: 'https://github.com/artsy/ARGenericTableViewController.git' @@ -127,7 +130,9 @@ target 'Artsy' do pod 'Firebase/Auth' # Analytics - pod 'Segment-Appboy' + pod 'Analytics' + pod 'ARAnalytics', subspecs: %w[Segmentio] + pod 'Appboy-iOS-SDK' # Developer Pods pod 'DHCShakeNotifier' @@ -223,6 +228,7 @@ post_install do |installer| # * Send PRs for the rest %w[ Pods/ORStackView/Classes/ios/ORStackView.h + Pods/ARAnalytics/ARAnalytics.h Pods/NAMapKit/NAMapKit/*.h ].flat_map { |x| Dir.glob(x) }.each do |header| addition = "#import \n" diff --git a/Podfile.lock b/Podfile.lock index 497a5e6d924..07479a64d19 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,29 +19,18 @@ PODS: - AFNetworking/NSURLConnection (~> 2.5) - AFNetworking/NSURLSession (~> 2.5) - AFNetworking/Serialization (~> 2.5) - - Analytics (4.1.5) + - Analytics (3.6.9) - AppAuth (1.4.0): - AppAuth/Core (= 1.4.0) - AppAuth/ExternalUserAgent (= 1.4.0) - AppAuth/Core (1.4.0) - AppAuth/ExternalUserAgent (1.4.0) - - Appboy-iOS-SDK (4.3.1): - - Appboy-iOS-SDK/UI (= 4.3.1) - - Appboy-iOS-SDK/ContentCards (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/Core (4.3.1) - - Appboy-iOS-SDK/InAppMessage (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/NewsFeed (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/UI (4.3.1): - - Appboy-iOS-SDK/ContentCards - - Appboy-iOS-SDK/Core - - Appboy-iOS-SDK/InAppMessage - - Appboy-iOS-SDK/NewsFeed + - Appboy-iOS-SDK (2.25.0): + - SDWebImage (~> 3.7) + - ARAnalytics/CoreIOS (5.0.1) + - ARAnalytics/Segmentio (5.0.1): + - Analytics (>= 3) + - ARAnalytics/CoreIOS - ARGenericTableViewController (1.0.2) - "Artsy+UIColors (3.1.0)" - "Artsy+UIFonts (3.3.3)" @@ -91,7 +80,7 @@ PODS: - React-RCTText (= 0.63.3) - RNSentry (= 2.2.1) - RNSVG (= 9.13.3) - - SDWebImage (= 5.8.3) + - SDWebImage (< 4, >= 3.7.2) - tipsi-stripe (= 7.5.0) - Expecta (1.0.6) - "Expecta+Snapshots (3.1.1)": @@ -473,9 +462,6 @@ PODS: - React-cxxreact (= 0.63.3) - React-jsi (= 0.63.3) - React-jsinspector (0.63.3) - - react-native-appboy-sdk (1.30.0): - - Appboy-iOS-SDK (~> 4.3.0) - - React - react-native-cameraroll (1.3.0): - React - react-native-config (1.3.3): @@ -588,14 +574,6 @@ PODS: - React-jsi (= 0.63.3) - rn-fetch-blob (0.12.0): - React-Core - - RNAnalytics (1.5.0): - - Analytics - - React-Core - - RNAnalyticsIntegration-Appboy (1.5.0): - - Analytics - - React-Core - - RNAnalytics - - Segment-Appboy - RNAppleAuthentication (2.1.2): - React-Core - RNBootSplash (3.2.0): @@ -638,15 +616,9 @@ PODS: - React-Core - RNSVG (9.13.3): - React - - SDWebImage (5.8.3): - - SDWebImage/Core (= 5.8.3) - - SDWebImage/Core (5.8.3) - - Segment-Appboy (4.2.0): - - Analytics - - Segment-Appboy/Full-SDK (= 4.2.0) - - Segment-Appboy/Full-SDK (4.2.0): - - Analytics - - Appboy-iOS-SDK (~> 4.3.0) + - SDWebImage (3.7.3): + - SDWebImage/Core (= 3.7.3) + - SDWebImage/Core (3.7.3) - Sentry (6.1.4): - Sentry/Core (= 6.1.4) - Sentry/Core (6.1.4) @@ -676,6 +648,9 @@ DEPENDENCIES: - AFNetworking/Security (~> 2.5) - AFNetworking/Serialization (~> 2.5) - AFOAuth1Client (from `https://github.com/artsy/AFOAuth1Client.git`, tag `0.4.0-subspec-fix`) + - Analytics + - Appboy-iOS-SDK + - ARAnalytics/Segmentio - ARGenericTableViewController (from `https://github.com/artsy/ARGenericTableViewController.git`) - "Artsy+UIColors" - "Artsy+UIFonts" @@ -752,7 +727,6 @@ DEPENDENCIES: - React-jsi (from `./node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `./node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `./node_modules/react-native/ReactCommon/jsinspector`) - - react-native-appboy-sdk (from `node_modules/react-native-appboy-sdk`) - "react-native-cameraroll (from `node_modules/@react-native-community/cameraroll`)" - react-native-config (from `node_modules/react-native-config`) - "react-native-cookies (from `node_modules/@react-native-cookies/cookies`)" @@ -776,8 +750,6 @@ DEPENDENCIES: - React-RCTVibration (from `./node_modules/react-native/Libraries/Vibration`) - ReactCommon/turbomodule/core (from `./node_modules/react-native/ReactCommon`) - rn-fetch-blob (from `node_modules/rn-fetch-blob`) - - "RNAnalytics (from `node_modules/@segment/analytics-react-native`)" - - "RNAnalyticsIntegration-Appboy (from `node_modules/@segment/analytics-react-native-appboy`)" - "RNAppleAuthentication (from `node_modules/@invertase/react-native-apple-authentication`)" - RNBootSplash (from `node_modules/react-native-bootsplash`) - "RNCAsyncStorage (from `node_modules/@react-native-community/async-storage`)" @@ -794,8 +766,7 @@ DEPENDENCIES: - "RNSentry (from `node_modules/@sentry/react-native`)" - RNShare (from `node_modules/react-native-share`) - RNSVG (from `node_modules/react-native-svg`) - - SDWebImage (= 5.8.3) - - Segment-Appboy + - SDWebImage (>= 3.7.2) - Specta - Starscream - SwiftyJSON @@ -813,6 +784,7 @@ SPEC REPOS: - Analytics - AppAuth - Appboy-iOS-SDK + - ARAnalytics - boost-for-react-native - CocoaAsyncSocket - CocoaLumberjack @@ -865,7 +837,6 @@ SPEC REPOS: - PromisesObjC - Quick - SDWebImage - - Segment-Appboy - Sentry - Specta - Starscream @@ -938,8 +909,6 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "./node_modules/react-native/ReactCommon/jsinspector" - react-native-appboy-sdk: - :path: node_modules/react-native-appboy-sdk react-native-cameraroll: :path: "node_modules/@react-native-community/cameraroll" react-native-config: @@ -986,10 +955,6 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon" rn-fetch-blob: :path: node_modules/rn-fetch-blob - RNAnalytics: - :path: "node_modules/@segment/analytics-react-native" - RNAnalyticsIntegration-Appboy: - :path: "node_modules/@segment/analytics-react-native-appboy" RNAppleAuthentication: :path: "node_modules/@invertase/react-native-apple-authentication" RNBootSplash: @@ -1055,9 +1020,10 @@ SPEC CHECKSUMS: AFNetworkActivityLogger: 121486778117d53b3ab1c61d264b88081d0c3eee AFNetworking: 8dd5f9b9691e09186393069a12cc3b5ed7c8b511 AFOAuth1Client: 155a6237e57987cac18dac2ccd17cea5d324ad1a - Analytics: 084a3edda6517e308007c1a7810b8f1e8f2925aa + Analytics: 6541ce337e99d9f7a2240a8b3953940a7be5f998 AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 - Appboy-iOS-SDK: 33b31d5ade91a7d0718534798f4ab1146e7b0681 + Appboy-iOS-SDK: 720819acf77bcb7bdad658d26c064278a39639d9 + ARAnalytics: 896e530551168721fbb8852e044b8afb9baffdde ARGenericTableViewController: 61a0897ba66c35111b5d1cc3b44884282bd3c1a5 "Artsy+UIColors": 31c03c4146f5e6618a9b950f37dfe02dd9ac09a6 "Artsy+UIFonts": 597c44f264aead6bdc21898b690addd90e14edbd @@ -1070,7 +1036,7 @@ SPEC CHECKSUMS: DHCShakeNotifier: 64048427ecaa763f2472d0032f58bf7a10074eee DoubleConversion: cde416483dac037923206447da6e1454df403714 EDColor: c83f9a61f9f9b3c23d541f1feb561558e29cb088 - Emission: d1ca04d191776a641ee1224cd26da9eeec5d52ff + Emission: 9ede96bbbc777ebfc06e0e633599c4d09f72978d Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5 "Expecta+Snapshots": dcff217eef506dabd6dfdc7864ea2da321fafbb8 Extraction: 2be993a17f8f8c4fac988ebecaed93a409181faf @@ -1137,7 +1103,6 @@ SPEC CHECKSUMS: React-jsi: df07aa95b39c5be3e41199921509bfa929ed2b9d React-jsiexecutor: b56c03e61c0dd5f5801255f2160a815f4a53d451 React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2 - react-native-appboy-sdk: dd0f7fb390666c6cfea7e177dcf22c3391e9cc39 react-native-cameraroll: 463aff54e37cff27ea76eb792e6f1fa43b876320 react-native-config: 47fd4132d931f84aca9c31f302c3c867a8560b11 react-native-cookies: 3b5b182d008b714fefc337df15b787f00385a598 @@ -1161,8 +1126,6 @@ SPEC CHECKSUMS: React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba - RNAnalytics: a6dc48511d5d99b1ecaaf7157d8b5c618d15337e - RNAnalyticsIntegration-Appboy: 6940f54ff28e6be80f1e3b78c996b1f0945b4113 RNAppleAuthentication: e95bcfbd044013667f35c5ca20ae17d39500c009 RNBootSplash: 24175aa28fe203b10c48dc34e78d946fd33c77af RNCAsyncStorage: 3c304d1adfaea02ec732ac218801cb13897aa8c0 @@ -1179,8 +1142,7 @@ SPEC CHECKSUMS: RNSentry: 7104cdfc1072ccb86015d9c8f210d81ae76806c1 RNShare: fed99fd743f80ca255903c1da46fc9a6430efab6 RNSVG: f6177f8d7c095fada7cfee2e4bb7388ba426064c - SDWebImage: 112503ec94a5a2a41869503844a15e8d8f1ead5c - Segment-Appboy: 5688916eb8fb104b638116ba251cee5d4d8bd266 + SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Sentry: 9d055e2de30a77685e86b219acf02e59b82091fc Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 Starscream: f5da93fe6984c77b694366bf7299b7dc63a76f26 @@ -1195,6 +1157,6 @@ SPEC CHECKSUMS: Yoga: 7d13633d129fd179e01b8953d38d47be90db185a YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 4f9596015bfbf77634835ff623b13cb3bef9ed05 +PODFILE CHECKSUM: 01b096a826c973467c7cd9b46fdd107f7d1d5f71 COCOAPODS: 1.10.1 diff --git a/app.json b/app.json index 401e4cc6fbb..b1f5f525879 100644 --- a/app.json +++ b/app.json @@ -1,4 +1,4 @@ { - "version": "6.10.2", + "version": "6.10.0", "sentryReleaseName": "" } diff --git a/dangerfile.ts b/dangerfile.ts index 0e042971d08..49f6445ce11 100644 --- a/dangerfile.ts +++ b/dangerfile.ts @@ -3,6 +3,7 @@ import { danger, fail, markdown, warn } from "danger" // so the node API gives us errors: import * as fs from "fs" import { pickBy } from "lodash" +import * as yaml from "yaml" import { ParseResult } from "./scripts/changelog/changelog-types" import { changelogTemplateSections } from "./scripts/changelog/generateChangelogSectionTemplate" import { parsePRDescription } from "./scripts/changelog/parsePRDescription" @@ -88,6 +89,32 @@ const verifyRemainingDevWork = () => { } } +// Ensure the CHANGELOG is set up like we need +const validateChangelogYMLFile = async () => { + try { + // Ensure it is valid yaml + const changelogYML = fs.readFileSync("CHANGELOG.yml").toString() + const loadedDictionary = yaml.parse(changelogYML) + + // So that we don't accidentally copy & paste oour upcoming section wrong + const upcoming = loadedDictionary?.upcoming + if (upcoming) { + if (Array.isArray(upcoming)) { + fail("Upcoming an array in the CHANGELOG") + } + + // Deployments rely on this to send info to reviewers + else if (typeof upcoming === "object") { + if (!upcoming.user_facing) { + fail("There must be a `user_facing` section in the upcoming section of the CHANGELOG") + } + } + } + } catch (e) { + fail("The CHANGELOG is not valid YML:\n" + e.stack) + } +} + // Require changelog on Eigen PRs to be valid // See Eigen RFC: https://github.com/artsy/eigen/issues/4499 export const validatePRChangelog = () => { @@ -135,5 +162,6 @@ export const validatePRChangelog = () => { preventUsingEnzyme() preventUsingRenderRelayTree() verifyRemainingDevWork() + await validateChangelogYMLFile() validatePRChangelog() })() diff --git a/data/schema.graphql b/data/schema.graphql index 0e28f833b68..ee35aeef701 100644 --- a/data/schema.graphql +++ b/data/schema.graphql @@ -3935,33 +3935,7 @@ type CommerceShipment { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String! - deliveryEnd( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - deliveryStart( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - deliveryWindowModifier: String id: ID! - pickupEnd( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - pickupStart( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - pickupWindowModifier: String priceCents: Int! priceCurrency: String! status: String @@ -5194,9 +5168,6 @@ type ConversationInitiator { type ConversationItem { item: ConversationItemType - - # The actual, non-snapshotted artwork - liveArtwork: ConversationItemType permalink: String title: String } @@ -6030,16 +6001,7 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String - articlesConnection( - after: String - before: String - first: Int - - # Articles that are ready to be publicly viewed in the feed by everyone. - inEditorialFeed: Boolean - last: Int - sort: ArticleSorts - ): ArticleConnection + articlesConnection(after: String, before: String, first: Int, last: Int, sort: ArticleSorts): ArticleConnection artistsConnection( after: String before: String @@ -6161,7 +6123,6 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { before: String first: Int last: Int - page: Int # Number of artworks to return section: String @@ -8607,9 +8568,6 @@ type Partner implements Node { after: String before: String first: Int - - # Articles that are ready to be publicly viewed in the feed by everyone. - inEditorialFeed: Boolean last: Int page: Int sort: ArticleSorts diff --git a/docs/README.md b/docs/README.md index 3bbec7db36a..a8b27edc5c1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,6 @@ ## Meandering Around - [General Overview](overview.md) -- [Storybook / UI Components](storybook.md) ## Specific Problems diff --git a/docs/deploy_to_app_store.md b/docs/deploy_to_app_store.md index 939a2189de7..40e9e2a82d8 100644 --- a/docs/deploy_to_app_store.md +++ b/docs/deploy_to_app_store.md @@ -35,6 +35,7 @@ Our App Store releases are done manually, instead of automatically once Apple ap 1. Create a new version of the app in AppStoreConnect (if you don't do this, beta deployments will fail). - Go to "My Apps", click Eigen ("Artsy: Buy & Sell Original Art"), click "+ version or platform", click "iOS", and enter version number. 1. Run `./scripts/next`. This prompts for the next version number. **Use the same version as the previous step**. +1. Move the release from `upcoming` to `releases` in `CHANGELOG.yml` and add a new, empty entry under `upcoming`. Make sure the `date` is accurate. [Here is a previous commit](https://github.com/artsy/eigen/commit/4c9708b7082057de15f1dba51c057d8efacee0b5#diff-f5c8d85e3311e0af3edc9c70c7d01c10f03bba1d56d05a25820f5e4265e3df0d). 1. Add and commit the changed files, typically with `-m "Preparing for development, version X.Y.Z."`. 1. Run `./scripts/deploy-ios` to trigger a new beta. (When we add a new version, the first beta goes through additional TestFlight review by Apple. By trigger the beta now, we go through that review early, and avoid delaying future QA sessions.) 1. PR your changes back into the `master` branch. diff --git a/docs/palette_v3_migration_guide.md b/docs/palette_v3_migration_guide.md deleted file mode 100644 index 1ae9c3351ea..00000000000 --- a/docs/palette_v3_migration_guide.md +++ /dev/null @@ -1,75 +0,0 @@ -# Palette v3 migration guide - -- Use `ThemeV2` and `ThemeV3`. - Currently `Theme` is pointing to `ThemeV2`, and later it will point to `ThemeV3`. During the v2 -> v3 migration, the more explicit we are, the better. - -- Use `useTheme` to get access to `color` and `space`. - We used to use `color` and `space` imported from `palette` directly. Unforunately, this is not theme-aware, so we need to change our ways. Always use `const { color, space } = useTheme()` or `const color = useColor()` or `const space = useSpace()`, to get the theme-aware functionality we need. - -- Use `themeGet` for styled-components, but try to avoid styled-components. - If you need to access anything from the theme within a styled-component, you should use `themeGet` like: - -```tsx -import { themeGet } from "@styled-system/theme-get" - -const TheComp = styled(Flex)` - background-color: ${themeGet("colors.black100")}; - margin-left: ${themeGet("space.2")}px; - border-width: 3; -` -``` - -One limitation here is that you cannot use `0.5` or any other value of `space` that has a dot in the name. Prefer to use simple components instead, like: - -```tsx -const TheComp = (props) => { - const { color, space } = useTheme() - return ( - - ) -} -``` - -- Use `useThemeConfig` to make components behave correctly in both palette versions. - When a component has to be presented in both palette versions but use different styling in the two versions, we can use `useThemeConfig`. - For example, if we have a view that needs to have a `red` border in `v2` and a `blue` border in `v3`, we do: - -```tsx -const TheView = () => { - const theBorderColor = useThemeConfig({ - v2: "red", - v3: "blue", - }) - - return -} -``` - -- Use `ClassTheme` for class components. - `ClassTheme` exposes the hooks of the theme, so you can use it like: - -```tsx -import { ClassTheme } from "palette" - -class TheComp extends React.Component { - render() { - return ( - - {({color, space, theme}) => ( - - )} - - ) - } -} -``` diff --git a/docs/pull_request_template.md b/docs/pull_request_template.md index a23c4f5b3fd..9963aa9f9ce 100644 --- a/docs/pull_request_template.md +++ b/docs/pull_request_template.md @@ -21,7 +21,7 @@ This PR resolves [] - [ ] I have added a feature flag, or my changes don't require a feature flag. ([How do I add one?](https://github.com/artsy/eigen/blob/master/docs/developing_a_feature.md)) - [ ] I have documented any follow-up work that this PR will require, or it does not require any. - [ ] I have added an app state migration, or my changes do not require one. ([What are migrations?](https://github.com/artsy/eigen/blob/master/docs/adding_state_migrations.md)) -- [ ] I have added a changelog entry below or my changes do not require one. +- [ ] I have added a CHANGELOG.yml entry below or my changes do not require one.
Changelog updates diff --git a/docs/storybook.md b/docs/storybook.md deleted file mode 100644 index e1ebb553ce8..00000000000 --- a/docs/storybook.md +++ /dev/null @@ -1,42 +0,0 @@ -### Storybook - -We use [Storybook](https://storybook.js.org/tutorials/intro-to-storybook/react-native/en/get-started/) to build and display our UI components in isolation. - -**Run Storybook server** - -Opens a web server and browser UI that runs alongside the simulator. - -``` -yarn storybook-server -``` - -**Run Storybook as standalone app** - -Opens Storybook without loading the entire app (instead of `yarn start`). - -``` -yarn start-storybook -``` - -The screen can also be opened from the admin menu. - -**Run Storybook** - -Opens storybook as a screen in the app. - -``` -yarn storybook-ios -yarn storybook-android -``` - -**Adding new storybook stories** - -Make a file next to the file you want to make stories for, for example, if you want to make stories for `Checkbox.tsx`, make a file called `Checkbox.stories.tsx` next to it. - -You can look for other stories files for reference, but the main structure is: - -```tsx -storiesOf("Checkbox", module) - .add("A Story Name", () => ) - .add("Another Story Name", () => ) -``` diff --git a/emission/Emission.podspec b/emission/Emission.podspec index 4ba227c39e3..2587fb6af40 100644 --- a/emission/Emission.podspec +++ b/emission/Emission.podspec @@ -39,7 +39,7 @@ podspec = Pod::Spec.new do |s| s.dependency 'ISO8601DateFormatter' # To ensure a consistent image cache between app/lib - s.dependency 'SDWebImage', '5.8.3' + s.dependency 'SDWebImage', '>= 3.7.2', '< 4' # For custom animations in DeepZoomOverlay s.dependency 'INTUAnimationEngine' diff --git a/emission/Pod/Classes/Core/AREmission.h b/emission/Pod/Classes/Core/AREmission.h index aea2c8d2118..073c1718575 100644 --- a/emission/Pod/Classes/Core/AREmission.h +++ b/emission/Pod/Classes/Core/AREmission.h @@ -29,9 +29,6 @@ extern NSString *const AREnvTest; - (instancetype)initWithState:(NSDictionary *)state packagerURL:(nullable NSURL *)packagerURL NS_DESIGNATED_INITIALIZER; - (void)updateState:(NSDictionary *)state; -- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits; -- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits; -- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSString *)stateStringForKey:(NSString *)stateKey; - (NSString *)reactStateStringForKey:(NSString *)stateKey; - (BOOL)reactStateBoolForKey:(NSString *)stateKey; diff --git a/emission/Pod/Classes/Core/AREmission.m b/emission/Pod/Classes/Core/AREmission.m index 290508ed931..10150367787 100644 --- a/emission/Pod/Classes/Core/AREmission.m +++ b/emission/Pod/Classes/Core/AREmission.m @@ -87,25 +87,6 @@ - (void)updateState:(NSDictionary *)state [self.notificationsManagerModule updateState:state]; } -- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits -{ - NSMutableDictionary *eventTraits = [traits mutableCopy]; - [eventTraits addEntriesFromDictionary:@{@"event_name": name }]; - [self.notificationsManagerModule sendEvent:eventTraits]; -} - -- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits -{ - NSMutableDictionary *screenTraits = [traits mutableCopy]; - [screenTraits addEntriesFromDictionary:@{@"screen_name": screenName }]; - [self.notificationsManagerModule sendEvent:screenTraits]; -} - -- (void)sendIdentifyEvent:(NSDictionary *)traits -{ - [self.notificationsManagerModule sendIdentifyEvent:traits]; -} - - (NSString *)stateStringForKey:(NSString *)stateKey { NSString *result = [self.notificationsManagerModule.state valueForKey:stateKey]; diff --git a/emission/Pod/Classes/Core/AREventsModule.m b/emission/Pod/Classes/Core/AREventsModule.m index 5f4e8be7b55..f53cdd5d1ca 100644 --- a/emission/Pod/Classes/Core/AREventsModule.m +++ b/emission/Pod/Classes/Core/AREventsModule.m @@ -13,6 +13,11 @@ @implementation AREventsModule RCT_EXPORT_MODULE(); +RCT_EXPORT_METHOD(postEvent:(nonnull NSDictionary *)info) +{ + self.eventOccurred(info); +} + RCT_EXPORT_METHOD(requestAppStoreRating) { [SKStoreReviewController requestReview]; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h index 5b578ff9d4d..89b21785dde 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h @@ -28,8 +28,6 @@ - (instancetype)initWithState:(NSDictionary *)state; - (void)updateState:(NSDictionary *)state; -- (void)sendEvent:(NSDictionary *)traits; -- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSDictionary *)state; - (NSDictionary *)reactState; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m index d3b1c6d5d1c..824ba3dc12f 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m @@ -49,8 +49,6 @@ @interface ARNotificationsManager () static const NSString *stateChanged = @"STATE_CHANGED"; static const NSString *reactStateChanged = @"STATE_CHANGED"; static const NSString *requestNavigation = @"REQUEST_NAVIGATION"; -static const NSString *eventTracking = @"EVENT_TRACKING"; -static const NSString *identifyTracking = @"IDENTIFY_TRACKING"; @implementation ARNotificationsManager @@ -111,22 +109,6 @@ - (void)updateState:(NSDictionary *)state } } -- (void)sendEvent:(NSDictionary *)traits -{ - @synchronized(self) - { - [self dispatch:eventTracking data:traits]; - } -} - -- (void)sendIdentifyEvent:(NSDictionary *)traits -{ - @synchronized(self) - { - [self dispatch:identifyTracking data:traits]; - } -} - - (void)notificationReceived { [self dispatch:notificationReceived data:@{}]; @@ -148,7 +130,6 @@ - (void)requestNavigation:(NSString *)route withProps:(NSDictionary *)props [self afterBootstrap:^{ __strong typeof(self) sself = wself; if (!sself) return; - if (!route) return; [sself dispatch:requestNavigation data:@{@"route": route, @"props": props}]; }]; } diff --git a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m index 2152067b1a6..b158c2aa382 100644 --- a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m +++ b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m @@ -88,19 +88,17 @@ - (void)setImageURL:(NSURL *)imageURL; return; } + // TODO: Setting decompress to NO, because Eigen sets it to YES. + // We need to send a PR to SDWebImage to disable decoding + // with an option to the download method. + // SDWebImageManager *manager = [SDWebImageManager sharedManager]; - SDImageCache *imageCache = [SDImageCache sharedImageCache]; - - // Applying a global disabling of the decode feature - manager.optionsProcessor = [SDWebImageOptionsProcessor optionsProcessorWithBlock:^SDWebImageOptionsResult * _Nullable(NSURL * _Nullable url, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - // Global disable force decode feature - options |= SDWebImageAvoidDecodeImage; - - return [[SDWebImageOptionsResult alloc] initWithOptions:options context:context]; - }]; - + + manager.imageCache.shouldDecompressImages = NO; + manager.imageDownloader.shouldDecompressImages = NO; + __weak typeof(self) weakSelf = self; - [imageCache diskImageExistsWithKey:self.imageURL.absoluteString completion:^(BOOL isInCache) { + [manager cachedImageExistsForURL:self.imageURL completion:^(BOOL isInCache) { if (!isInCache) { self.backgroundColor = self.placeholderBackgroundColor; } @@ -110,11 +108,10 @@ - (void)setImageURL:(NSURL *)imageURL; options = options | (self.retryFailedURLs ? SDWebImageRetryFailed : 0); options = options | (self.highPriority ? SDWebImageHighPriority : 0); - self.downloadOperation = [manager loadImageWithURL:self.imageURL + self.downloadOperation = [manager downloadImageWithURL:self.imageURL options:options progress:nil completed:^(UIImage *image, - NSData* _Nullable _, NSError *error, SDImageCacheType __, BOOL completed, diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a79642d4270..f2ff6d28a2a 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -27,17 +27,24 @@ lane :ship_beta_ios do api_key = app_store_connect_api_key( key_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ID'], issuer_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ISSUER_ID'], - key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT_BASE64'], - is_key_content_base64: true, + key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT'], in_house: false, ) set_build_version_ios - latest_version = app_json['version'] + changelog_yaml = File.read('../CHANGELOG.yml') + changelog_data = YAML.safe_load(changelog_yaml) + + latest_version = changelog_data['upcoming']['version'] - # TODO: Once changelog infra is nailed down we should get release notes from there - beta_readme = "Thanks for using the Artsy beta!" + upcoming = changelog_data['upcoming'] + commit = `git log -n1 --format='%h'`.strip + notes = upcoming['user_facing'] || [] + beta_readme = "## #{upcoming['version']} - #{commit} \n\n - #{notes.join "\n - "} \n\n" + + # Make sure the stickers app is up to date in it's plist + `/usr/libexec/PlistBuddy -c "Set CFBundleVersion #{latest_version}" Artsy\ Stickers/Info.plist` # Builds the app sync_code_signing(app_identifier: ['net.artsy.artsy', 'net.artsy.artsy.Artsy-Stickers'], type: 'appstore') @@ -96,9 +103,9 @@ end date_str = DateTime.now.strftime("%Y.%m.%d.%H") lane :set_build_version_ios do system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" \"#{sticker_plist}\"") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{sticker_plist}") system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" \"#{sticker_plist}\"") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{sticker_plist}") end build_gradle = "../android/app/build.gradle" @@ -153,6 +160,7 @@ lane :ship_beta_android do vname, vcode = set_build_version_android tag_and_push(tag: "android-#{vname}-#{vcode}") + sentry_release_name = "android-#{vname}-#{vcode}" update_sentry_release_name(sentry_release_name: sentry_release_name) diff --git a/index.android.js b/index.android.js index c08f6923123..4fb01033f09 100644 --- a/index.android.js +++ b/index.android.js @@ -1,22 +1,8 @@ global.__TEST__ = false +require("react-native-gesture-handler") +require("react-native-screens").enableScreens() +require("./src/lib/utils/PushNotification").configure() +const { AppRegistry } = require('react-native') -// start storybook depending on content of storybook.json -let startStorybook = false - -if (__DEV__) { - try { - const fileContent = require("./storybook.json") - startStorybook = fileContent.startStorybook - } catch {} -} - -if (startStorybook) { - require("./src/storybook") -} else { - require("react-native-gesture-handler") - require("react-native-screens").enableScreens() - require("./src/lib/utils/PushNotification").configure() - const { AppRegistry } = require("react-native") - const { App } = require("./src/lib/AndroidApp") - AppRegistry.registerComponent("Artsy", () => App) -} +const {App} = require('./src/lib/AndroidApp') +AppRegistry.registerComponent("Artsy", () => App) diff --git a/index.ios.js b/index.ios.js index 72d525ff8df..9c87cf941ac 100644 --- a/index.ios.js +++ b/index.ios.js @@ -1,20 +1,5 @@ global.__TEST__ = false - -// start storybook depending on content of storybook.json -let startStorybook = false - -if (__DEV__) { - try { - const fileContent = require("./storybook.json") - startStorybook = fileContent.startStorybook - } catch {} -} - -if (startStorybook) { - require("./src/storybook") -} else { - require("react-native-gesture-handler") - require("react-native-screens").enableScreens() - require("./src/lib/ErrorReporting") - require("./src/lib/AppRegistry") -} +require("react-native-gesture-handler") +require("react-native-screens").enableScreens() +require("./src/lib/ErrorReporting") +require("./src/lib/AppRegistry") diff --git a/index.tests.ios.js b/index.tests.ios.js index 242b6a476ec..b6426dd1505 100644 --- a/index.tests.ios.js +++ b/index.tests.ios.js @@ -1 +1,2 @@ import "./index.ios" + diff --git a/jest.config.js b/jest.config.js index 0d700502df6..8488f3e0d1b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,8 +5,6 @@ module.exports = { "^lib/(.*)": "/src/lib/$1", "^palette$": "/src/palette", "^palette/(.*)": "/src/palette/$1", - "^storybook$": "/src/storybook", - "^storybook/(.*)": "/src/storybook/$1", "@images/(.*)": "/images/$1", "@relay/(.*)": "/src/lib/relay/$1", }, diff --git a/package.json b/package.json index 3c4cb93b6e0..139bf926e7e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "generate-cities-objc": "node scripts/generate-cities-objc.js", "generate-graphql-query-map": "node scripts/generate-graphql-query-map.js > emission/Pod/Classes/GraphQL/ARGraphQLQueryMap.generated.objc", "ios": "node node_modules/react-native/local-cli/cli.js run-ios", - "android": "./scripts/set-storybook-environment.js && react-native run-android", + "android": "react-native run-android", "clean-ios": "yarn rimraf ~/Library/Developer/Xcode/DerivedData", "clean-android": "cd android; ./gradlew clean cleanBuildCache; cd -", "clean": "yarn clean-ios; yarn clean-android", @@ -41,6 +41,7 @@ "start-packager-after-relay": "yarn relay && yarn start-packager", "start-servers": "concurrently --kill-others 'yarn start-packager-after-relay' 'yarn relay --watch'", "start": "yarn start-servers", + "stylelint-project": " stylelint -- 'src/**/*.{ts,tsx}'", "sync-cities": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/src/schema/city/cityDataSortedByDisplayPreference.json -o data/cityDataSortedByDisplayPreference.json", "sync-schema": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/_schemaV2.graphql -o data/schema.graphql; yarn prettier --write --parser graphql data/schema.graphql", "sync-schema:localhost": "cd ../metaphysics && yarn dump-schema v2 ../eigen/data/", @@ -50,13 +51,6 @@ "type-check:offence-ranking": "yarn -s type-check:offence 'TS\\d+' -o | sort | uniq -c | sort -r", "type-check:offence": "tsc --pretty false | grep -v __generated__ | grep -E", "type-check": "tsc", - "storybook-ios": "npx artsy open -i storybook", - "storybook-android": "npx artsy open -a storybook", - "prestorybook-server": "rnstl", - "storybook-server": "start-storybook -p 7007", - "build-storybook": "build-storybook", - "start-storybook": "STORYBOOK=1 yarn start", - "detect-secrets": "detect-secrets-launcher", "update-metaphysics": "node scripts/update-metaphysics.js" }, "repository": { @@ -84,8 +78,8 @@ "cheerio": "0.22.0" }, "dependencies": { - "@artsy/cohesion": "2.13.0", - "@artsy/palette-tokens": "2.1.2", + "@artsy/cohesion": "2.7.0", + "@artsy/palette-tokens": "^1.3.1", "@expo/react-native-action-sheet": "^3.8.0", "@invertase/react-native-apple-authentication": "^2.1.2", "@ptomasroos/react-native-multi-slider": "^2.2.2", @@ -102,10 +96,9 @@ "@react-navigation/bottom-tabs": "^5.11.7", "@react-navigation/native": "^5.9.2", "@react-navigation/stack": "^5.14.2", - "@segment/analytics-react-native": "^1.5.0", - "@segment/analytics-react-native-appboy": "^1.5.0", + "@segment/analytics-react-native": "^1.4.4", + "@segment/analytics-react-native-appboy": "^1.4.8", "@sentry/react-native": "2.2.1", - "@styled-system/theme-get": "^5.1.2", "easy-peasy": "3.3.0", "events": "3.1.0", "formik": "2.1.4", @@ -118,7 +111,7 @@ "query-string": "4.3.4", "react": "16.13.1", "react-native": "0.63.3", - "react-native-appboy-sdk": "^1.30.0", + "react-native-appboy-sdk": "^1.29.1", "react-native-bootsplash": "^3.2.0", "react-native-config": "https://github.com/artsy/react-native-config.git", "react-native-credit-card-input": "^0.4.1", @@ -149,16 +142,16 @@ "rn-fetch-blob": "0.12.0", "semver": "^7.3.4", "simple-markdown": "0.7.2", - "styled-components": "4.2.1", + "styled-components": "4.2.0", "styled-system": "5.1.5", "supercluster": "6.0.1", "tipsi-stripe": "https://github.com/artsy/tipsi-stripe.git#fix-infinite-loop", "url": "^0.11.0", - "yup": "0.29.1", - "zustand": "^3.5.7" + "yup": "0.29.1" }, "devDependencies": { - "@artsy/update-repo": "0.2.1", + "@artsy/auto-config": "1.0.2", + "@artsy/update-repo": "0.2.0", "@babel/core": "^7.12.9", "@babel/plugin-proposal-class-properties": "7.10.4", "@babel/plugin-proposal-decorators": "7.10.5", @@ -171,14 +164,11 @@ "@react-native-community/cli-platform-ios": "3.0.0", "@testing-library/jest-native": "^4.0.1", "@testing-library/react-native": "7.1.0", - "@storybook/addon-actions": "^5.3", - "@storybook/react-native": "^5.3.25", - "@storybook/react-native-server": "^5.3.23", "@types/argparse": "^2.0.8", "@types/chalk": "2.2.0", "@types/dedent": "0.7.0", "@types/jest": "25.1.5", - "@types/lodash": "4.14.149", + "@types/lodash": "4.14.170", "@types/luxon": "1.15.2", "@types/moment-timezone": "0.5.4", "@types/node": "12.7.5", @@ -195,16 +185,14 @@ "@types/relay-test-utils": "6.0.1", "@types/remove-markdown": "0.1.1", "@types/semver": "^7.3.4", - "@types/styled-components": "4.0.3", - "@types/styled-system": "5.1.12", - "@types/styled-system__theme-get": "^5.0.1", + "@types/styled-components": "4.0.2", + "@types/styled-system": "5.1.9", "@types/supercluster": "5.0.0", "@types/yup": "0.29.3", "argparse": "^2.0.1", "auto": "7.12.3", "awesome-typescript-loader": "3.4.1", "babel-jest": "25.2.6", - "babel-loader": "^8.2.2", "babel-plugin-import-graphql": "2.7.0", "babel-plugin-relay": "10.1.3", "chalk": "2.4.2", @@ -214,7 +202,6 @@ "danger": "^10.6.4", "danger-plugin-jest": "^1.3.0", "dedent": "0.7.0", - "detect-secrets": "^1.0.6", "dotenv": "8.2.0", "enzyme": "3.9.0", "enzyme-adapter-react-16": "1.13.0", @@ -225,6 +212,7 @@ "jest": "25.2.7", "jest-fetch-mock": "^3.0.3", "jest-raw-loader": "1.0.1", + "jest-styled-components": "7.0.0-2", "jest-watch-typeahead": "^0.6.1", "jetifier": "^1.6.6", "json5": "2.1.0", @@ -241,7 +229,6 @@ "puppeteer": "^7.1.0", "react-dom": "16.8.3", "react-native-flipper": "^0.94.1", - "react-native-storybook-loader": "^2.0.4", "react-relay-network-modern": "^6.0.0", "react-test-renderer": "16.13.1", "recursive-readdir-sync": "1.0.6", @@ -253,21 +240,20 @@ "relay-test-utils": "^10.0.1", "rimraf": "^3.0.2", "snapshot-diff": "0.2.2", + "stylelint": "9.8.0", + "stylelint-config-standard": "18.2.0", + "stylelint-config-styled-components": "0.1.1", + "stylelint-processor-styled-components": "1.5.1", "tmp": "0.1.0", "ts-node": "8.4.1", "tslint": "5.14.0", "tslint-config-prettier": "1.18.0", "tslint-plugin-relay": "0.0.2", - "typescript": "4.3.5", - "typescript-styled-plugin": "0.18.0", - "vscode-apollo-relay": "1.5.1" - }, - "config": { - "react-native-storybook-loader": { - "searchDir": ["./src"], - "pattern": "**/*.stories.tsx", - "outputFile": "./src/storybook/storyLoader.js" - } + "typescript": "^4.1.2", + "typescript-styled-plugin": "0.13.0", + "vscode-apollo-relay": "1.5.0", + "yaml": "1.9.2", + "yaml-lint": "^1.2.4" }, "lint-staged": { "*.@(ts|tsx)": [ @@ -278,8 +264,8 @@ "*.@(json|md)": [ "yarn prettier-write" ], - "**/!(package.json)": [ - "detect-secrets-launcher --baseline .secrets.baseline" + "*.@(yml)": [ + "yarn yamllint" ] }, "prettier": { diff --git a/patches/@segment+analytics-react-native+1.4.4.patch b/patches/@segment+analytics-react-native+1.4.4.patch new file mode 100644 index 00000000000..afe72953da0 --- /dev/null +++ b/patches/@segment+analytics-react-native+1.4.4.patch @@ -0,0 +1,32 @@ +diff --git a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec b/node_modules/@segment/analytics-react-native/RNAnalytics.podspec +deleted file mode 100644 +index 22dd268..0000000 +--- a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec ++++ /dev/null +@@ -1,26 +0,0 @@ +-require 'json' +-package = JSON.parse(File.read('./package.json')) +- +-Pod::Spec.new do |s| +- s.name = 'RNAnalytics' +- s.version = package['version'] +- s.summary = package['description'] +- s.description = <<-DESC +- Analytics for iOS provides a single API that lets you +- integrate with over 100s of tools. +- DESC +- +- s.homepage = 'http://segment.com/' +- s.social_media_url = 'https://twitter.com/segment' +- s.license = { :type => 'MIT' } +- s.author = { 'Segment' => 'friends@segment.com' } +- s.source = { :git => 'https://github.com/segmentio/analytics-react-native.git', :tag => s.version.to_s } +- +- s.platform = :ios, '10.0' +- s.source_files = 'ios/**/*.{m,h}' +- s.static_framework = true +- +- s.dependency 'Analytics' +- s.dependency 'React-Core' +-end +- diff --git a/patches/@segment+analytics-react-native-appboy+1.4.8.patch b/patches/@segment+analytics-react-native-appboy+1.4.8.patch new file mode 100644 index 00000000000..6d1d6e0776b --- /dev/null +++ b/patches/@segment+analytics-react-native-appboy+1.4.8.patch @@ -0,0 +1,35 @@ +diff --git a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec b/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec +deleted file mode 100644 +index a9eeb16..0000000 +--- a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec ++++ /dev/null +@@ -1,29 +0,0 @@ +-require 'json' +-package = JSON.parse(File.read('./package.json')) +- +-Pod::Spec.new do |s| +- s.name = "RNAnalyticsIntegration-Appboy" +- s.version = package["version"] +- s.summary = package["description"] +- s.description = <<-DESC +- Analytics for React-Native provides a single API that lets you +- integrate with over 100s of tools. +- +- This is the Appboy integration for the React-Native library. +- DESC +- +- s.homepage = "http://segment.com/" +- s.license = { :type => 'MIT' } +- s.author = { "Segment" => "friends@segment.com" } +- s.source = { :git => "https://github.com/segmentio/analytics-react-native.git", :tag => s.version.to_s } +- s.social_media_url = 'https://twitter.com/segment' +- +- s.platform = :ios, "11.0" +- s.source_files = 'ios/main.m' +- s.static_framework = true +- +- s.dependency 'Segment-Appboy' +- s.dependency 'Analytics' +- s.dependency 'React-Core' +- s.dependency 'RNAnalytics' +-end diff --git a/patches/react-native-appboy-sdk+1.29.1.patch b/patches/react-native-appboy-sdk+1.29.1.patch new file mode 100644 index 00000000000..53863b7ae01 --- /dev/null +++ b/patches/react-native-appboy-sdk+1.29.1.patch @@ -0,0 +1,29 @@ +diff --git a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec b/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec +deleted file mode 100644 +index 4e69ac8..0000000 +--- a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec ++++ /dev/null +@@ -1,23 +0,0 @@ +-require 'json' +- +-package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +- +-Pod::Spec.new do |s| +- s.name = package['name'] +- s.version = package['version'] +- s.summary = package['description'] +- s.description = package['description'] +- s.license = package['license'] +- s.author = package['author'] +- s.homepage = package['homepage'] +- s.source = { :git => 'git+https://github.com/Appboy/appboy-react-sdk.git', :tag => s.version } +- +- s.requires_arc = true +- s.platform = :ios, '9.0' +- +- s.preserve_paths = 'LICENSE.md', 'README.md', 'package.json', 'index.js' +- s.source_files = 'iOS/**/*.{h,m}' +- +- s.dependency 'Appboy-iOS-SDK', '~> 4.2.0' +- s.dependency 'React' +-end diff --git a/patches/react-native-push-notification+7.4.0.patch b/patches/react-native-push-notification+7.4.0.patch deleted file mode 100644 index 79a09fc8264..00000000000 --- a/patches/react-native-push-notification+7.4.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/react-native-push-notification/component/index.ios.js b/node_modules/react-native-push-notification/component/index.ios.js -deleted file mode 100644 -index 82eee6a..0000000 ---- a/node_modules/react-native-push-notification/component/index.ios.js -+++ /dev/null -@@ -1,7 +0,0 @@ --"use strict"; -- --import PushNotificationIOS from "@react-native-community/push-notification-ios"; -- --module.exports = { -- component: PushNotificationIOS --}; diff --git a/scripts/set-storybook-environment.js b/scripts/set-storybook-environment.js deleted file mode 100755 index 07f6ae93c8c..00000000000 --- a/scripts/set-storybook-environment.js +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env node - -// Create or change `storybook.json` depending on STORYBOOK env variable -// to read the file content later in `index.ios.js` and `index.android.js` -// and either start the app or Storybook. - -const fs = require("fs") - -const startStorybook = process.env.STORYBOOK === "1" - -let fileContent - -try { - fileContent = require("../storybook.json") -} catch (e) { - fileContent = {} -} - -if (startStorybook) console.log("Starting storybook...") - -fileContent.startStorybook = !!startStorybook - -fs.writeFileSync("./storybook.json", JSON.stringify(fileContent, undefined, 2)) diff --git a/scripts/start_packager.sh b/scripts/start_packager.sh index ecc8a340ae3..92f5722739e 100755 --- a/scripts/start_packager.sh +++ b/scripts/start_packager.sh @@ -1,9 +1,5 @@ -# Set storybook environment depending on STORYBOOK env variable -./scripts/set-storybook-environment.js - # if the user has the React Native Debugger app installed, then use that # otherwise, at time of writing, it opens chrome - if [ -d '/Applications/React Native Debugger.app' ] then export REACT_DEBUGGER="open 'rndebugger://set-debugger-loc?host=localhost&port=8081' --args" diff --git a/src/__generated__/FairArticlesQuery.graphql.ts b/src/__generated__/FairArticlesQuery.graphql.ts index 258058db7dc..d1397367feb 100644 --- a/src/__generated__/FairArticlesQuery.graphql.ts +++ b/src/__generated__/FairArticlesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 87d2388264c700fee7dfa6e461a57302 */ +/* @relayHash a2c7eaafc326ca86ccb365fc75f03310 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -36,7 +36,7 @@ query FairArticlesQuery( fragment FairArticles_fair_2HEEH6 on Fair { slug - articlesConnection(first: $first, after: $after, inEditorialFeed: true) { + articlesConnection(first: $first, after: $after) { totalCount edges { node { @@ -88,26 +88,19 @@ v3 = [ "variableName": "id" } ], -v4 = { - "kind": "Variable", - "name": "after", - "variableName": "after" -}, -v5 = { - "kind": "Variable", - "name": "first", - "variableName": "first" -}, -v6 = [ - (v4/*: any*/), - (v5/*: any*/), +v4 = [ + { + "kind": "Variable", + "name": "after", + "variableName": "after" + }, { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true + "kind": "Variable", + "name": "first", + "variableName": "first" } ], -v7 = { +v5 = { "alias": null, "args": null, "kind": "ScalarField", @@ -134,10 +127,7 @@ return { "plural": false, "selections": [ { - "args": [ - (v4/*: any*/), - (v5/*: any*/) - ], + "args": (v4/*: any*/), "kind": "FragmentSpread", "name": "FairArticles_fair" } @@ -175,7 +165,7 @@ return { }, { "alias": null, - "args": (v6/*: any*/), + "args": (v4/*: any*/), "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "articlesConnection", @@ -240,7 +230,7 @@ return { "name": "name", "storageKey": null }, - (v7/*: any*/) + (v5/*: any*/) ], "storageKey": null }, @@ -282,7 +272,7 @@ return { ], "storageKey": null }, - (v7/*: any*/), + (v5/*: any*/), { "alias": null, "args": null, @@ -333,23 +323,21 @@ return { }, { "alias": null, - "args": (v6/*: any*/), - "filters": [ - "inEditorialFeed" - ], + "args": (v4/*: any*/), + "filters": null, "handle": "connection", "key": "FairArticlesQuery_articlesConnection", "kind": "LinkedHandle", "name": "articlesConnection" }, - (v7/*: any*/) + (v5/*: any*/) ], "storageKey": null } ] }, "params": { - "id": "87d2388264c700fee7dfa6e461a57302", + "id": "a2c7eaafc326ca86ccb365fc75f03310", "metadata": {}, "name": "FairArticlesQuery", "operationKind": "query", diff --git a/src/__generated__/FairArticles_fair.graphql.ts b/src/__generated__/FairArticles_fair.graphql.ts index 0c829507c8d..1955d3f4c71 100644 --- a/src/__generated__/FairArticles_fair.graphql.ts +++ b/src/__generated__/FairArticles_fair.graphql.ts @@ -71,13 +71,7 @@ const node: ReaderFragment = { }, { "alias": "articlesConnection", - "args": [ - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - } - ], + "args": null, "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "__FairArticlesQuery_articlesConnection_connection", @@ -229,11 +223,11 @@ const node: ReaderFragment = { "storageKey": null } ], - "storageKey": "__FairArticlesQuery_articlesConnection_connection(inEditorialFeed:true)" + "storageKey": null } ], "type": "Fair", "abstractKey": null }; -(node as any).hash = '105ebb5748a1592e87cc71d635c7f7bd'; +(node as any).hash = '3617b56cd5e1da3507007fb0522a6f3d'; export default node; diff --git a/src/__generated__/FairEditorialTestsQuery.graphql.ts b/src/__generated__/FairEditorialTestsQuery.graphql.ts index d3dde9334c8..f6fd36389cd 100644 --- a/src/__generated__/FairEditorialTestsQuery.graphql.ts +++ b/src/__generated__/FairEditorialTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 614002b1fde84c246282a59cd05691c5 */ +/* @relayHash a4c687c8474c93af12b5b7a720ca053f */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -33,7 +33,7 @@ query FairEditorialTestsQuery( fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -151,11 +151,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -245,7 +240,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, (v4/*: any*/) ], @@ -254,7 +249,7 @@ return { ] }, "params": { - "id": "614002b1fde84c246282a59cd05691c5", + "id": "a4c687c8474c93af12b5b7a720ca053f", "metadata": { "relayTestingSelectionTypeInfo": { "fair": { diff --git a/src/__generated__/FairEditorial_fair.graphql.ts b/src/__generated__/FairEditorial_fair.graphql.ts index 91d74be8ef6..a749e74fdc7 100644 --- a/src/__generated__/FairEditorial_fair.graphql.ts +++ b/src/__generated__/FairEditorial_fair.graphql.ts @@ -64,11 +64,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -164,12 +159,12 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" } ], "type": "Fair", "abstractKey": null }; })(); -(node as any).hash = 'dcc9e4ac75c08f9729d5731f13fc97fe'; +(node as any).hash = 'c0894b9c1c2e69bc13dde5f5bca3b311'; export default node; diff --git a/src/__generated__/FairQuery.graphql.ts b/src/__generated__/FairQuery.graphql.ts index c47cbb7d066..0dcfa393589 100644 --- a/src/__generated__/FairQuery.graphql.ts +++ b/src/__generated__/FairQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 910bf946214c349eef3acdd70ed8d3e2 */ +/* @relayHash b65aad4342ad2178d42f518b2e9e3afb */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -691,11 +691,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -774,7 +769,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1615,7 +1610,7 @@ return { ] }, "params": { - "id": "910bf946214c349eef3acdd70ed8d3e2", + "id": "b65aad4342ad2178d42f518b2e9e3afb", "metadata": {}, "name": "FairQuery", "operationKind": "query", diff --git a/src/__generated__/FairTestsQuery.graphql.ts b/src/__generated__/FairTestsQuery.graphql.ts index f2c817630e0..cd86e1d8a45 100644 --- a/src/__generated__/FairTestsQuery.graphql.ts +++ b/src/__generated__/FairTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 7c2b278a37c9553cf44bbe2b1b21d68d */ +/* @relayHash 7f0e66ce05b6fcc822099c410bcdc410 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -805,11 +805,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -888,7 +883,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1729,7 +1724,7 @@ return { ] }, "params": { - "id": "7c2b278a37c9553cf44bbe2b1b21d68d", + "id": "7f0e66ce05b6fcc822099c410bcdc410", "metadata": { "relayTestingSelectionTypeInfo": { "fair": (v30/*: any*/), diff --git a/src/__generated__/Fair_fair.graphql.ts b/src/__generated__/Fair_fair.graphql.ts index f6e241a78a3..9cf12925133 100644 --- a/src/__generated__/Fair_fair.graphql.ts +++ b/src/__generated__/Fair_fair.graphql.ts @@ -81,11 +81,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -108,7 +103,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -234,5 +229,5 @@ return { "abstractKey": null }; })(); -(node as any).hash = '727444e516cba760bf7d87ed5e868d2d'; +(node as any).hash = '6c991142cc4d3ed85f992de42519c078'; export default node; diff --git a/src/__generated__/SavedAddressesFormQuery.graphql.ts b/src/__generated__/SavedAddressesFormQuery.graphql.ts deleted file mode 100644 index 0ac47e9cd7d..00000000000 --- a/src/__generated__/SavedAddressesFormQuery.graphql.ts +++ /dev/null @@ -1,234 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 4882c50bcdba5ef0707c728f8c12da46 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesFormQueryVariables = {}; -export type SavedAddressesFormQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; - } | null; -}; -export type SavedAddressesFormQuery = { - readonly response: SavedAddressesFormQueryResponse; - readonly variables: SavedAddressesFormQueryVariables; -}; - - - -/* -query SavedAddressesFormQuery { - me { - ...SavedAddressesForm_me - id - } -} - -fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - id - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null -}; -return { - "fragment": { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesFormQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "SavedAddressesForm_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [], - "kind": "Operation", - "name": "SavedAddressesFormQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - (v0/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - (v0/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "4882c50bcdba5ef0707c728f8c12da46", - "metadata": {}, - "name": "SavedAddressesFormQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'b7e7515520a71dc3fbc77471605aae6b'; -export default node; diff --git a/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts b/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts deleted file mode 100644 index 7922e555860..00000000000 --- a/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts +++ /dev/null @@ -1,234 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash c1731f4f53b8c1a40f580d23f8235ef4 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesFormTestsQueryVariables = {}; -export type SavedAddressesFormTestsQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; - } | null; -}; -export type SavedAddressesFormTestsQuery = { - readonly response: SavedAddressesFormTestsQueryResponse; - readonly variables: SavedAddressesFormTestsQueryVariables; -}; - - - -/* -query SavedAddressesFormTestsQuery { - me { - ...SavedAddressesForm_me - id - } -} - -fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - id - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null -}; -return { - "fragment": { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesFormTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "SavedAddressesForm_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [], - "kind": "Operation", - "name": "SavedAddressesFormTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - (v0/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - (v0/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "c1731f4f53b8c1a40f580d23f8235ef4", - "metadata": {}, - "name": "SavedAddressesFormTestsQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'c4a3bd662f05db60bd228c93d4e271fd'; -export default node; diff --git a/src/__generated__/SavedAddressesForm_me.graphql.ts b/src/__generated__/SavedAddressesForm_me.graphql.ts deleted file mode 100644 index 73e46156056..00000000000 --- a/src/__generated__/SavedAddressesForm_me.graphql.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck - -import { ReaderFragment } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesForm_me = { - readonly id: string; - readonly phone: string | null; - readonly addressConnection: { - readonly edges: ReadonlyArray<{ - readonly node: { - readonly internalID: string; - readonly name: string | null; - readonly addressLine1: string; - readonly addressLine2: string | null; - readonly addressLine3: string | null; - readonly country: string; - readonly city: string; - readonly region: string | null; - readonly postalCode: string | null; - readonly isDefault: boolean; - } | null; - } | null> | null; - } | null; - readonly " $refType": "SavedAddressesForm_me"; -}; -export type SavedAddressesForm_me$data = SavedAddressesForm_me; -export type SavedAddressesForm_me$key = { - readonly " $data"?: SavedAddressesForm_me$data; - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; -}; - - - -const node: ReaderFragment = { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesForm_me", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "type": "Me", - "abstractKey": null -}; -(node as any).hash = 'b8dc20f08a969820d3a2cd8dc6b674ba'; -export default node; diff --git a/src/__generated__/SavedAddressesQuery.graphql.ts b/src/__generated__/SavedAddressesQuery.graphql.ts index 736b2e5be3e..d8259d16f2a 100644 --- a/src/__generated__/SavedAddressesQuery.graphql.ts +++ b/src/__generated__/SavedAddressesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 3498416c797ab2cba48a0de89b8851a7 */ +/* @relayHash 307a22f71e0c5528a8308ab10c0a1713 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "3498416c797ab2cba48a0de89b8851a7", + "id": "307a22f71e0c5528a8308ab10c0a1713", "metadata": {}, "name": "SavedAddressesQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts index 55b9b28a7fc..5f8b534b496 100644 --- a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts +++ b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash c60103022967beb3a553190cabbfaf38 */ +/* @relayHash 7740bab0af31b45dd30e299ce12294a9 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesRefetchQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "c60103022967beb3a553190cabbfaf38", + "id": "7740bab0af31b45dd30e299ce12294a9", "metadata": {}, "name": "SavedAddressesRefetchQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesTestsQuery.graphql.ts b/src/__generated__/SavedAddressesTestsQuery.graphql.ts index 437331f9b13..e81acb0924f 100644 --- a/src/__generated__/SavedAddressesTestsQuery.graphql.ts +++ b/src/__generated__/SavedAddressesTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 236ca6785dec6683afd20e3dc47b6819 */ +/* @relayHash 4bd30d9d1cbd59daf65fbe033e8bf414 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesTestsQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "236ca6785dec6683afd20e3dc47b6819", + "id": "4bd30d9d1cbd59daf65fbe033e8bf414", "metadata": {}, "name": "SavedAddressesTestsQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddresses_me.graphql.ts b/src/__generated__/SavedAddresses_me.graphql.ts index 8a2368e2e99..0b57bf06cb7 100644 --- a/src/__generated__/SavedAddresses_me.graphql.ts +++ b/src/__generated__/SavedAddresses_me.graphql.ts @@ -15,12 +15,10 @@ export type SavedAddresses_me = { readonly addressLine1: string; readonly addressLine2: string | null; readonly addressLine3: string | null; - readonly country: string; readonly city: string; readonly region: string | null; readonly postalCode: string | null; readonly phoneNumber: string | null; - readonly isDefault: boolean; } | null; } | null> | null; } | null; @@ -55,7 +53,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -115,13 +113,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -149,13 +140,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -164,12 +148,12 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" } ], "type": "Me", "abstractKey": null }; })(); -(node as any).hash = 'f043741b2994f3b2d418f14b69de0cb2'; +(node as any).hash = '30a29267ac711583ee688cb2cfc22a60'; export default node; diff --git a/src/__generated__/SavedSearchButtonQuery.graphql.ts b/src/__generated__/SavedSearchButtonQuery.graphql.ts deleted file mode 100644 index 57c3ad5d82a..00000000000 --- a/src/__generated__/SavedSearchButtonQuery.graphql.ts +++ /dev/null @@ -1,154 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 28d5a3a40691a84f69881d0cf92d2132 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SearchCriteriaAttributes = { - acquireable?: boolean | null; - additionalGeneIDs?: Array | null; - artistID?: string | null; - atAuction?: boolean | null; - attributionClass?: Array | null; - colors?: Array | null; - dimensionRange?: string | null; - height?: string | null; - inquireableOnly?: boolean | null; - locationCities?: Array | null; - majorPeriods?: Array | null; - materialsTerms?: Array | null; - offerable?: boolean | null; - partnerIDs?: Array | null; - priceRange?: string | null; - width?: string | null; -}; -export type SavedSearchButtonQueryVariables = { - criteria: SearchCriteriaAttributes; -}; -export type SavedSearchButtonQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; - } | null; -}; -export type SavedSearchButtonQuery = { - readonly response: SavedSearchButtonQueryResponse; - readonly variables: SavedSearchButtonQueryVariables; -}; - - - -/* -query SavedSearchButtonQuery( - $criteria: SearchCriteriaAttributes! -) { - me { - ...SavedSearchButton_me_1ff8oJ - id - } -} - -fragment SavedSearchButton_me_1ff8oJ on Me { - savedSearch(criteria: $criteria) { - internalID - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } -], -v1 = [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } -]; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButtonQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": (v1/*: any*/), - "kind": "FragmentSpread", - "name": "SavedSearchButton_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "SavedSearchButtonQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "28d5a3a40691a84f69881d0cf92d2132", - "metadata": {}, - "name": "SavedSearchButtonQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = '449e4412d84929d7c547ad86d3657c1b'; -export default node; diff --git a/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts b/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts deleted file mode 100644 index 7005594f488..00000000000 --- a/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 12121ce84504f77f46b0c4522e5bab66 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SearchCriteriaAttributes = { - acquireable?: boolean | null; - additionalGeneIDs?: Array | null; - artistID?: string | null; - atAuction?: boolean | null; - attributionClass?: Array | null; - colors?: Array | null; - dimensionRange?: string | null; - height?: string | null; - inquireableOnly?: boolean | null; - locationCities?: Array | null; - majorPeriods?: Array | null; - materialsTerms?: Array | null; - offerable?: boolean | null; - partnerIDs?: Array | null; - priceRange?: string | null; - width?: string | null; -}; -export type SavedSearchButtonTestsQueryVariables = { - criteria: SearchCriteriaAttributes; -}; -export type SavedSearchButtonTestsQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; - } | null; -}; -export type SavedSearchButtonTestsQuery = { - readonly response: SavedSearchButtonTestsQueryResponse; - readonly variables: SavedSearchButtonTestsQueryVariables; -}; - - - -/* -query SavedSearchButtonTestsQuery( - $criteria: SearchCriteriaAttributes! -) { - me { - ...SavedSearchButton_me_1ff8oJ - id - } -} - -fragment SavedSearchButton_me_1ff8oJ on Me { - savedSearch(criteria: $criteria) { - internalID - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } -], -v1 = [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } -], -v2 = { - "enumValues": null, - "nullable": false, - "plural": false, - "type": "ID" -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButtonTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": (v1/*: any*/), - "kind": "FragmentSpread", - "name": "SavedSearchButton_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "SavedSearchButtonTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "12121ce84504f77f46b0c4522e5bab66", - "metadata": { - "relayTestingSelectionTypeInfo": { - "me": { - "enumValues": null, - "nullable": true, - "plural": false, - "type": "Me" - }, - "me.id": (v2/*: any*/), - "me.savedSearch": { - "enumValues": null, - "nullable": true, - "plural": false, - "type": "SearchCriteria" - }, - "me.savedSearch.internalID": (v2/*: any*/) - } - }, - "name": "SavedSearchButtonTestsQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'd369f95a141fe0bd2f24bf5249e083ba'; -export default node; diff --git a/src/__generated__/SavedSearchButton_me.graphql.ts b/src/__generated__/SavedSearchButton_me.graphql.ts deleted file mode 100644 index e8974bb17a1..00000000000 --- a/src/__generated__/SavedSearchButton_me.graphql.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck - -import { ReaderFragment } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedSearchButton_me = { - readonly savedSearch: { - readonly internalID: string; - } | null; - readonly " $refType": "SavedSearchButton_me"; -}; -export type SavedSearchButton_me$data = SavedSearchButton_me; -export type SavedSearchButton_me$key = { - readonly " $data"?: SavedSearchButton_me$data; - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; -}; - - - -const node: ReaderFragment = { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButton_me", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } - ], - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Me", - "abstractKey": null -}; -(node as any).hash = '47929e285b919e81f21a8625678edd09'; -export default node; diff --git a/src/__generated__/VanityURLEntityQuery.graphql.ts b/src/__generated__/VanityURLEntityQuery.graphql.ts index 37baaf2bba8..65922465c3c 100644 --- a/src/__generated__/VanityURLEntityQuery.graphql.ts +++ b/src/__generated__/VanityURLEntityQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash d459e8eee18b24b81d8e36de3bd3b46e */ +/* @relayHash 15e3966a65b4152669828e6221f47660 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -153,7 +153,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -339,7 +339,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -1274,11 +1274,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -1351,7 +1346,7 @@ return { }, (v8/*: any*/) ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -2388,7 +2383,7 @@ return { ] }, "params": { - "id": "d459e8eee18b24b81d8e36de3bd3b46e", + "id": "15e3966a65b4152669828e6221f47660", "metadata": {}, "name": "VanityURLEntityQuery", "operationKind": "query", diff --git a/src/__generated__/addNewAddressMutation.graphql.ts b/src/__generated__/addNewAddressMutation.graphql.ts deleted file mode 100644 index 702b617c60c..00000000000 --- a/src/__generated__/addNewAddressMutation.graphql.ts +++ /dev/null @@ -1,290 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 48f9985b022e04924a8464b308ce2ee4 */ - -import { ConcreteRequest } from "relay-runtime"; -export type CreateUserAddressInput = { - attributes: UserAddressAttributes; - clientMutationId?: string | null; -}; -export type UserAddressAttributes = { - addressLine1: string; - addressLine2?: string | null; - addressLine3?: string | null; - city: string; - country: string; - name: string; - phoneNumber?: string | null; - postalCode?: string | null; - region?: string | null; -}; -export type addNewAddressMutationVariables = { - input: CreateUserAddressInput; -}; -export type addNewAddressMutationResponse = { - readonly createUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly city?: string; - readonly country?: string; - readonly isDefault?: boolean; - readonly name?: string | null; - readonly phoneNumber?: string | null; - readonly postalCode?: string | null; - readonly region?: string | null; - readonly errors?: ReadonlyArray<{ - readonly message: string; - }>; - }; - } | null; -}; -export type addNewAddressMutation = { - readonly response: addNewAddressMutationResponse; - readonly variables: addNewAddressMutationVariables; -}; - - - -/* -mutation addNewAddressMutation( - $input: CreateUserAddressInput! -) { - createUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - addressLine1 - addressLine2 - city - country - isDefault - name - phoneNumber - postalCode - region - } - ... on Errors { - errors { - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "addNewAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "CreateUserAddressPayload", - "kind": "LinkedField", - "name": "createUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "addNewAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "CreateUserAddressPayload", - "kind": "LinkedField", - "name": "createUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "48f9985b022e04924a8464b308ce2ee4", - "metadata": {}, - "name": "addNewAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '98ac48306b7d0e1a4ad2ecb4ea70e78b'; -export default node; diff --git a/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts b/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts deleted file mode 100644 index 01049a54e0f..00000000000 --- a/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts +++ /dev/null @@ -1,288 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash c575d1e45a866f470dcf45a28beeb522 */ - -import { ConcreteRequest } from "relay-runtime"; -export type DeleteUserAddressInput = { - clientMutationId?: string | null; - userAddressID: string; -}; -export type deleteSavedAddressDeleteUserAddressMutationVariables = { - input: DeleteUserAddressInput; -}; -export type deleteSavedAddressDeleteUserAddressMutationResponse = { - readonly deleteUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly name?: string | null; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly addressLine3?: string | null; - readonly city?: string; - readonly region?: string | null; - readonly postalCode?: string | null; - readonly phoneNumber?: string | null; - readonly isDefault?: boolean; - readonly errors?: ReadonlyArray<{ - readonly code: string; - readonly message: string; - }>; - }; - } | null; -}; -export type deleteSavedAddressDeleteUserAddressMutation = { - readonly response: deleteSavedAddressDeleteUserAddressMutationResponse; - readonly variables: deleteSavedAddressDeleteUserAddressMutationVariables; -}; - - - -/* -mutation deleteSavedAddressDeleteUserAddressMutation( - $input: DeleteUserAddressInput! -) { - deleteUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - addressLine3 - city - region - postalCode - phoneNumber - isDefault - } - ... on Errors { - errors { - code - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "code", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "deleteSavedAddressDeleteUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "DeleteUserAddressPayload", - "kind": "LinkedField", - "name": "deleteUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "deleteSavedAddressDeleteUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "DeleteUserAddressPayload", - "kind": "LinkedField", - "name": "deleteUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "c575d1e45a866f470dcf45a28beeb522", - "metadata": {}, - "name": "deleteSavedAddressDeleteUserAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '919ab63c8176f0ebdd4002b0055c6826'; -export default node; diff --git a/src/__generated__/setAsDefaultAddressMutation.graphql.ts b/src/__generated__/setAsDefaultAddressMutation.graphql.ts deleted file mode 100644 index b48928d51ff..00000000000 --- a/src/__generated__/setAsDefaultAddressMutation.graphql.ts +++ /dev/null @@ -1,207 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 1b9e47d6d72070bbc2212342174e93d4 */ - -import { ConcreteRequest } from "relay-runtime"; -export type UpdateUserDefaultAddressInput = { - clientMutationId?: string | null; - userAddressID: string; -}; -export type setAsDefaultAddressMutationVariables = { - input: UpdateUserDefaultAddressInput; -}; -export type setAsDefaultAddressMutationResponse = { - readonly updateUserDefaultAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly isDefault?: boolean; - readonly errors?: ReadonlyArray<{ - readonly message: string; - }>; - }; - } | null; -}; -export type setAsDefaultAddressMutation = { - readonly response: setAsDefaultAddressMutationResponse; - readonly variables: setAsDefaultAddressMutationVariables; -}; - - - -/* -mutation setAsDefaultAddressMutation( - $input: UpdateUserDefaultAddressInput! -) { - updateUserDefaultAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - isDefault - } - ... on Errors { - errors { - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "setAsDefaultAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserDefaultAddressPayload", - "kind": "LinkedField", - "name": "updateUserDefaultAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "setAsDefaultAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserDefaultAddressPayload", - "kind": "LinkedField", - "name": "updateUserDefaultAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "1b9e47d6d72070bbc2212342174e93d4", - "metadata": {}, - "name": "setAsDefaultAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = 'fcb01f6b87f7b3d7148540e9ecda229f'; -export default node; diff --git a/src/__generated__/updateUserAddressMutation.graphql.ts b/src/__generated__/updateUserAddressMutation.graphql.ts deleted file mode 100644 index 4377a950136..00000000000 --- a/src/__generated__/updateUserAddressMutation.graphql.ts +++ /dev/null @@ -1,300 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 42186652b7be904f8449c97721e3f30b */ - -import { ConcreteRequest } from "relay-runtime"; -export type UpdateUserAddressInput = { - attributes: UserAddressAttributes; - clientMutationId?: string | null; - userAddressID: string; -}; -export type UserAddressAttributes = { - addressLine1: string; - addressLine2?: string | null; - addressLine3?: string | null; - city: string; - country: string; - name: string; - phoneNumber?: string | null; - postalCode?: string | null; - region?: string | null; -}; -export type updateUserAddressMutationVariables = { - input: UpdateUserAddressInput; -}; -export type updateUserAddressMutationResponse = { - readonly updateUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly name?: string | null; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly isDefault?: boolean; - readonly phoneNumber?: string | null; - readonly city?: string; - readonly region?: string | null; - readonly postalCode?: string | null; - readonly country?: string; - readonly errors?: ReadonlyArray<{ - readonly code: string; - readonly message: string; - }>; - }; - } | null; -}; -export type updateUserAddressMutation = { - readonly response: updateUserAddressMutationResponse; - readonly variables: updateUserAddressMutationVariables; -}; - - - -/* -mutation updateUserAddressMutation( - $input: UpdateUserAddressInput! -) { - updateUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - isDefault - phoneNumber - city - region - postalCode - country - } - ... on Errors { - errors { - code - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "code", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "updateUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserAddressPayload", - "kind": "LinkedField", - "name": "updateUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "updateUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserAddressPayload", - "kind": "LinkedField", - "name": "updateUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "42186652b7be904f8449c97721e3f30b", - "metadata": {}, - "name": "updateUserAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '993b108854d372333cb2260bce841108'; -export default node; diff --git a/src/lib/AndroidApp.tsx b/src/lib/AndroidApp.tsx index 2dab47dbaaf..5ceb3a357b5 100644 --- a/src/lib/AndroidApp.tsx +++ b/src/lib/AndroidApp.tsx @@ -2,7 +2,7 @@ import { GoogleSignin } from "@react-native-google-signin/google-signin" import { getCurrentEmissionState, GlobalStore } from "lib/store/GlobalStore" import { AdminMenuWrapper } from "lib/utils/AdminMenuWrapper" import { addTrackingProvider, track } from "lib/utils/track" -import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" +import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { useDeepLinks } from "lib/utils/useDeepLinks" import { useStripeConfig } from "lib/utils/useStripeConfig" import React, { useEffect } from "react" @@ -20,7 +20,7 @@ import { Onboarding } from "./Scenes/Onboarding/Onboarding" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" import { AnalyticsConstants } from "./utils/track/constants" -addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) +addTrackingProvider("segment rn android", SegmentTrackingProvider) addTrackingProvider("console", ConsoleTrackingProvider) if (UIManager.setLayoutAnimationEnabledExperimental) { diff --git a/src/lib/AppProviders.tsx b/src/lib/AppProviders.tsx index d4e928d0b50..7c36823ea54 100644 --- a/src/lib/AppProviders.tsx +++ b/src/lib/AppProviders.tsx @@ -12,17 +12,19 @@ import { ProvideScreenDimensions } from "./utils/useScreenDimensions" export const AppProviders = ({ children }: { children: ReactNode }) => ( - - - - - <_FancyModalPageWrapper> - {children} - - - - - + + + + + + <_FancyModalPageWrapper> + {children} + + + + + + ) diff --git a/src/lib/AppRegistry.tsx b/src/lib/AppRegistry.tsx index a9d4c4eecd7..ef4961c8696 100644 --- a/src/lib/AppRegistry.tsx +++ b/src/lib/AppRegistry.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from "react" -import { Appearance, AppRegistry, LogBox, Platform, View } from "react-native" +import { AppRegistry, LogBox, Platform, View } from "react-native" import { SafeAreaInsets } from "lib/types/SafeAreaInsets" import { BidFlow } from "./Containers/BidFlow" @@ -63,7 +63,6 @@ import { SaleQueryRenderer } from "./Scenes/Sale" import { SaleFAQ } from "./Scenes/SaleFAQ/SaleFAQ" import { SaleInfoQueryRenderer } from "./Scenes/SaleInfo" import { SavedAddressesQueryRenderer } from "./Scenes/SavedAddresses/SavedAddresses" -import { SavedAddressesFormQueryRenderer } from "./Scenes/SavedAddresses/SavedAddressesForm" import { SalesQueryRenderer } from "./Scenes/Sales" import { Search } from "./Scenes/Search" @@ -71,12 +70,12 @@ import { ShowMoreInfoQueryRenderer, ShowQueryRenderer } from "./Scenes/Show" import { VanityURLEntityRenderer } from "./Scenes/VanityURL/VanityURLEntity" import { GoogleSignin } from "@react-native-google-signin/google-signin" -import StorybookUI from "../storybook/storybook-ui" import { AppProviders } from "./AppProviders" import { ArtsyKeyboardAvoidingViewContext } from "./Components/ArtsyKeyboardAvoidingView" import { ArtsyReactWebViewPage, useWebViewCookies } from "./Components/ArtsyReactWebView" import { RegistrationFlow } from "./Containers/RegistrationFlow" import { useSentryConfig } from "./ErrorReporting" +import { NativeAnalyticsProvider } from "./NativeModules/Events" import { ArticlesQueryRenderer } from "./Scenes/Articles/Articles" import { AuctionResultQueryRenderer } from "./Scenes/AuctionResult/AuctionResult" import { AuctionResultsForYouQueryRenderer } from "./Scenes/AuctionResultsForYou/AuctionResultsForYou" @@ -97,8 +96,6 @@ import { GlobalStore, useFeatureFlag, useSelectedTab } from "./store/GlobalStore import { AdminMenu } from "./utils/AdminMenu" import { addTrackingProvider, Schema, screenTrack, track } from "./utils/track" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" -import { AnalyticsConstants } from "./utils/track/constants" -import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "./utils/track/SegmentTrackingProvider" import { useScreenDimensions } from "./utils/useScreenDimensions" import { useStripeConfig } from "./utils/useStripeConfig" @@ -117,7 +114,7 @@ LogBox.ignoreLogs([ "Picker has been extracted", ]) -addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) +addTrackingProvider("native ios analytics", NativeAnalyticsProvider) addTrackingProvider("console", ConsoleTrackingProvider) interface ArtworkProps { @@ -366,10 +363,6 @@ export const modules = defineModules({ Show: reactModule(ShowQueryRenderer, { fullBleed: true }), ShowMoreInfo: reactModule(ShowMoreInfoQueryRenderer), SavedAddresses: reactModule(SavedAddressesQueryRenderer), - SavedAddressesForm: reactModule(SavedAddressesFormQueryRenderer, { - alwaysPresentModally: true, - hasOwnModalCloseButton: false, - }), VanityURLEntity: reactModule(VanityURLEntityRenderer, { fullBleed: true }), ViewingRoom: reactModule(ViewingRoomQueryRenderer, { fullBleed: true }), ViewingRoomArtwork: reactModule(ViewingRoomArtworkQueryRenderer), @@ -380,7 +373,6 @@ export const modules = defineModules({ }), WorksForYou: reactModule(WorksForYouQueryRenderer), LotsByArtistsYouFollow: reactModule(LotsByArtistsYouFollowQueryRenderer), - Storybook: reactModule(StorybookUI, { fullBleed: true, hidesBackButton: true }), }) // Register react modules with the app registry @@ -398,20 +390,6 @@ const Main: React.FC<{}> = track()(({}) => { GoogleSignin.configure({ webClientId: "673710093763-hbj813nj4h3h183c4ildmu8vvqc0ek4h.apps.googleusercontent.com", }) - if (Platform.OS === "ios") { - const scheme = Appearance.getColorScheme() - SegmentTrackingProvider.identify?.(null, { - [AnalyticsConstants.UserInterfaceStyle.key]: (() => { - switch (scheme) { - case "light": - return AnalyticsConstants.UserInterfaceStyle.value.Light - case "dark": - return AnalyticsConstants.UserInterfaceStyle.value.Dark - } - return AnalyticsConstants.UserInterfaceStyle.value.Unspecified - })(), - }) - } }, []) const showNewOnboarding = useFeatureFlag("AREnableNewOnboardingFlow") const isHydrated = GlobalStore.useAppState((state) => state.sessionState.isHydrated) @@ -443,5 +421,5 @@ const Main: React.FC<{}> = track()(({}) => { }) if (Platform.OS === "ios") { - register("Artsy", Main, { fullBleed: true, isMainView: true }) + register("Main", Main, { fullBleed: true, isMainView: true }) } diff --git a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx index 069b85d80ee..d80c9b1102b 100644 --- a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx @@ -8,7 +8,7 @@ import { prepareFilterArtworksParamsForInput, } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" import { ArtworkFiltersStoreProvider, ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { ORDERED_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters/SortOptions" +import { ORDERED_ARTWORK_SORTS } from 'lib/Components/ArtworkFilter/Filters/SortOptions' import { convertSavedSearchCriteriaToFilterParams } from "lib/Components/ArtworkFilter/SavedSearch/convertersToFilterParams" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" @@ -23,13 +23,11 @@ import { PAGE_SIZE } from "lib/data/constants" import { useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, FilterIcon, Flex, Separator, Spacer, Text, TouchableHighlightColor } from "palette" +import { Box, Separator, Spacer } from "palette" import React, { useContext, useEffect, useMemo, useState } from "react" -import { Platform } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import { SavedSearchBannerQueryRender } from "./SavedSearchBanner" -import { SavedSearchButtonQueryRenderer } from "./SavedSearchButton" interface ArtworksGridProps extends InfiniteScrollGridProps { artist: ArtistArtworks_artist @@ -97,9 +95,7 @@ const ArtistArtworksContainer: React.FC { const tracking = useTracking() - const enableSavedSearch = - Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") - const enableSavedSearchV2 = useFeatureFlag("AREnableSavedSearchV2") + const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const setInitialFilterStateAction = ArtworksFiltersStore.useStoreActions((state) => state.setInitialFilterStateAction) @@ -135,9 +131,12 @@ const ArtistArtworksContainer: React.FC sortEntity.paramValue === "-published_at") + const sortFilterItem = ORDERED_ARTWORK_SORTS.find(sortEntity => sortEntity.paramValue === "-published_at") - setInitialFilterStateAction([...params, sortFilterItem!]) + setInitialFilterStateAction([ + ...params, + sortFilterItem!, + ]) } }, []) @@ -159,44 +158,17 @@ const ArtistArtworksContainer: React.FC { setJSX( - {enableSavedSearchV2 ? ( - <> - - ( - - - - Sort & Filter - - - )} - /> - - - - - ) : ( - <> - - - {!!shouldShowSavedSearchBanner && ( - - - - - )} - + + + {!!shouldShowSavedSearchBanner && ( + + + + )} ) - }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams, enableSavedSearchV2]) + }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams]) const filteredArtworks = () => { if (artworksCount === 0) { diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx index ed118e90cc3..18b6d5ac751 100644 --- a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx @@ -12,8 +12,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { PushAuthorizationStatus } from "lib/Scenes/MyProfile/MyProfilePushNotifications" import { Button, Flex, Text } from "palette" import React, { useState } from "react" -import { Alert, AlertButton, Linking, Platform } from "react-native" -import PushNotification from "react-native-push-notification" +import { Alert, Linking, Platform } from "react-native" import { commitMutation, createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" import { useTracking } from "react-tracking" @@ -57,6 +56,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Sorry, an error occured.", message: "Please try again.", + placement: "top", type: "error", }) } @@ -85,6 +85,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been set.", message: "We will send you a push notification once new works are added.", + placement: "top", }) trackToggledSavedSearchEvent(true, response.createSavedSearch?.savedSearchOrErrors.internalID) }, @@ -119,6 +120,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been removed.", message: "Don't worry, you can always create a new one.", + placement: "top", }) trackToggledSavedSearchEvent(false, response.disableSavedSearch?.savedSearchOrErrors.internalID) }, @@ -129,68 +131,47 @@ export const SavedSearchBanner: React.FC = ({ }) } - const showAlert = (permissionsDenied: boolean) => { - if (permissionsDenied) { - const buttons: AlertButton[] = [ - { - text: "Settings", - onPress: () => - Platform.OS === "android" ? Linking.openSettings() : Linking.openURL("App-prefs:NOTIFICATIONS_ID"), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - Alert.alert( - "Artsy would like to send you notifications", - `To receive notifications for your alerts, you will need to enable them in your ${Platform.select({ - ios: "iOS", - android: "android", - default: "device", - })} Settings. ${Platform.select({ - ios: `Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, - default: "", - })} `, - Platform.OS === "ios" ? buttons : buttons.reverse() - ) - } else { - // permissions not determined: Android should never need this - Alert.alert( - "Artsy would like to send you notifications", - "We need your permission to send notifications on alerts you have created.", - [ - { - text: "Proceed", - onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - ) - } - } - const checkNotificationPermissionsAndCreate = () => { if (Platform.OS === "android") { - PushNotification.checkPermissions((permissions) => { - if (!permissions.alert) { - return showAlert(true) - } - createSavedSearch() - return - }) + // TODO:- When android Push notification setup is ready add check for permission + // NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled(); + createSavedSearch() + return } LegacyNativeModules.ARTemporaryAPIModule.fetchNotificationPermissions((_, result: PushAuthorizationStatus) => { switch (result) { case PushAuthorizationStatus.Authorized: return createSavedSearch() case PushAuthorizationStatus.Denied: - return showAlert(true) + return Alert.alert( + "Artsy would like to send you notifications", + `To receive notifications for your alerts, you will need to enable them in your iOS Settings. Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, + [ + { + text: "Settings", + onPress: () => Linking.openURL("App-prefs:NOTIFICATIONS_ID"), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + ) case PushAuthorizationStatus.NotDetermined: - return showAlert(false) + return Alert.alert( + "Artsy would like to send you notifications", + "We need your permission to send notifications on alerts you have created.", + [ + { + text: "Proceed", + onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + ) default: return } diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx deleted file mode 100644 index cacb2af63a3..00000000000 --- a/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { captureMessage } from "@sentry/react-native" -import { SavedSearchButton_me } from "__generated__/SavedSearchButton_me.graphql" -import { SavedSearchButtonQuery } from "__generated__/SavedSearchButtonQuery.graphql" -import { FilterParams, prepareFilterParamsForSaveSearchInput } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" -import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { BellIcon, Button } from "palette" -import React from "react" -import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" - -interface SavedSearchButtonProps { - me?: SavedSearchButton_me | null - loading?: boolean - attributes: SearchCriteriaAttributes -} - -interface SavedSearchButtonQueryRendererProps { - filters: FilterParams - artistId: string -} - -export const SavedSearchButton: React.FC = ({ me, loading, attributes }) => { - const isSavedSearch = !!me?.savedSearch?.internalID - const emptyAttributes = Object.keys(attributes).length === 0 - - const handlePress = () => { - console.log("saved search button pressed") - } - - return ( - - ) -} - -export const SavedSearchButtonFragmentContainer = createFragmentContainer(SavedSearchButton, { - me: graphql` - fragment SavedSearchButton_me on Me @argumentDefinitions(criteria: { type: "SearchCriteriaAttributes" }) { - savedSearch(criteria: $criteria) { - internalID - } - } - `, -}) - -export const SavedSearchButtonQueryRenderer: React.FC = (props) => { - const { filters, artistId } = props - const input = prepareFilterParamsForSaveSearchInput(filters) - const attributes: SearchCriteriaAttributes = { - artistID: artistId, - ...input, - } - - if (Object.keys(input).length === 0) { - return - } - - return ( - - environment={defaultEnvironment} - query={graphql` - query SavedSearchButtonQuery($criteria: SearchCriteriaAttributes!) { - me { - ...SavedSearchButton_me @arguments(criteria: $criteria) - } - } - `} - render={({ props: relayProps, error }) => { - if (error) { - if (__DEV__) { - console.error(error) - } else { - captureMessage(error.stack!) - } - } - - return ( - - ) - }} - variables={{ - criteria: attributes, - }} - /> - ) -} diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx index 42a210c6438..e9585218064 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx @@ -1,7 +1,6 @@ import { ArtistCollectionsRailTestsQueryRawResponse } from "__generated__/ArtistCollectionsRailTestsQuery.graphql" import { GenericArtistSeriesRail } from "lib/Components/GenericArtistSeriesRail" import { CardRailCard } from "lib/Components/Home/CardRailCard" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -18,11 +17,9 @@ describe("Artist Series Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx index ae7ec6def3d..75f8bc52e1d 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx @@ -2,7 +2,6 @@ import { ArtistNotableWorksRailTestsQueryRawResponse } from "__generated__/Artis import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import { ArtistNotableWorksRailFragmentContainer } from "lib/Components/Artist/ArtistArtworks/ArtistNotableWorksRail" import { ArtworkTileRailCard } from "lib/Components/ArtworkTileRail" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -15,11 +14,9 @@ describe("Notable Works Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx deleted file mode 100644 index c8b48398f3d..00000000000 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { SearchCriteriaAttributes } from "__generated__/SavedSearchBannerQuery.graphql" -import { SavedSearchButtonTestsQuery } from "__generated__/SavedSearchButtonTestsQuery.graphql" -import { mockEnvironmentPayload } from 'lib/tests/mockEnvironmentPayload' -import { renderWithWrappers } from 'lib/tests/renderWithWrappers' -import { Button } from 'palette' -import React from "react" -import { graphql, QueryRenderer } from "react-relay" -import { createMockEnvironment } from "relay-test-utils" -import { SavedSearchButtonFragmentContainer as SavedSearchButton } from "../SavedSearchButton" - -jest.unmock("react-relay") - -const mockedAttributes: SearchCriteriaAttributes = { - acquireable: true, -} - -describe("SavedSearchButton", () => { - let mockEnvironment: ReturnType - - beforeEach(() => { - mockEnvironment = createMockEnvironment() - }) - - const TestRenderer = ({ attributes = mockedAttributes }) => { - return ( - - environment={mockEnvironment} - query={graphql` - query SavedSearchButtonTestsQuery($criteria: SearchCriteriaAttributes!) @relay_test_operation { - me { - ...SavedSearchButton_me @arguments(criteria: $criteria) - } - } - `} - render={({ props, error }) => ( - - )} - variables={{ - criteria: attributes, - }} - /> - ) - } - - it("renders loading state if request didn't return data and an error", () => { - const tree = renderWithWrappers() - - expect(tree.root.findByType(Button).props.loading).toBe(true) - }) - - it("renders enabled button if criteria are not saved", () => { - const tree = renderWithWrappers() - - mockEnvironmentPayload(mockEnvironment, { - Me: () => ({ - savedSearch: null, - }), - }) - - expect(tree.root.findByType(Button).props.disabled).toBe(false) - }) - - it("renders disabled button if criteria are saved", () => { - const tree = renderWithWrappers() - - mockEnvironmentPayload(mockEnvironment, { - Me: () => ({ - savedSearch: { - internalID: 'internalID' - }, - }), - }) - - expect(tree.root.findByType(Button).props.disabled).toBe(true) - }) -}) diff --git a/src/lib/Components/Artist/ArtistHeader.tsx b/src/lib/Components/Artist/ArtistHeader.tsx index 3da6552f30d..02aa7fde3af 100644 --- a/src/lib/Components/Artist/ArtistHeader.tsx +++ b/src/lib/Components/Artist/ArtistHeader.tsx @@ -10,8 +10,6 @@ import { useTracking } from "react-tracking" import styled from "styled-components/native" import { Schema } from "../../utils/track" -export const ARTIST_HEADER_HEIGHT = 156 - interface Props { artist: ArtistHeader_artist relay: RelayProp diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx index 036341a2293..9549a7c5e64 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx @@ -4,7 +4,6 @@ import { AnimatedArtworkFilterButton, ArtworkFilterNavigator, FilterModalMode } import { ArtworkFiltersStoreProvider } from "lib/Components/ArtworkFilter/ArtworkFilterStore" import { useOnTabFocusedEffect } from "lib/Components/StickyTabPage/StickyTabPage" import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabPageScrollView" -import { SCROLL_UP_TO_SHOW_THRESHOLD } from "lib/utils/hideBackButtonOnScroll" import { Schema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import React, { useCallback, useRef, useState } from "react" @@ -12,7 +11,6 @@ import { FlatList, NativeScrollEvent, NativeSyntheticEvent, View } from "react-n import { createFragmentContainer, graphql, RelayProp } from "react-relay" import { useTracking } from "react-tracking" import { ReactElement } from "simple-markdown" -import { ARTIST_HEADER_HEIGHT } from "../ArtistHeader" import { ArtistInsightsAuctionResultsPaginationContainer } from "./ArtistInsightsAuctionResults" import { MarketStatsQueryRenderer } from "./MarketStats" @@ -44,7 +42,6 @@ export const ArtistInsights: React.FC = (props) => { const [isFilterButtonVisible, setIsFilterButtonVisible] = useState(false) const [isFilterModalVisible, setIsFilterModalVisible] = useState(false) const auctionResultsYCoordinate = useRef(0) - const contentYScrollOffset = useRef(0) const openFilterModal = () => { tracking.trackEvent(tracks.openFilter(artist.internalID, artist.slug)) @@ -57,19 +54,11 @@ export const ArtistInsights: React.FC = (props) => { } const scrollToTop = useCallback(() => { - let auctionResultYOffset = auctionResultsYCoordinate.current - - // if we scroll up less than SCROLL_UP_TO_SHOW_THRESHOLD the header won't expand and we need another offset - if (contentYScrollOffset.current - 2 * auctionResultYOffset <= SCROLL_UP_TO_SHOW_THRESHOLD) { - auctionResultYOffset += ARTIST_HEADER_HEIGHT - } - flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultYOffset }) - }, [auctionResultsYCoordinate, contentYScrollOffset]) + flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultsYCoordinate.current }) + }, [auctionResultsYCoordinate]) // Show or hide floating filter button depending on the scroll position const onScrollEndDrag = useCallback((event: NativeSyntheticEvent) => { - contentYScrollOffset.current = event.nativeEvent.contentOffset.y - if (event.nativeEvent.contentOffset.y > FILTER_BUTTON_OFFSET) { setIsFilterButtonVisible(true) return diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx index 6b1f9641d1e..465782195d6 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx @@ -10,15 +10,14 @@ import { PAGE_SIZE } from "lib/data/constants" import { navigate } from "lib/navigation/navigate" import { useFeatureFlag } from "lib/store/GlobalStore" import { extractNodes } from "lib/utils/extractNodes" -import { debounce } from "lodash" -import { Box, bullet, Flex, Separator, Spacer, Text, useColor } from "palette" -import React, { useCallback, useEffect, useMemo, useState } from "react" +import { Box, bullet, color, Flex, Separator, Spacer, Text } from "palette" +import React, { useCallback, useEffect, useState } from "react" import { FlatList, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import styled from "styled-components/native" import { useScreenDimensions } from "../../../utils/useScreenDimensions" -import { DEBOUNCE_DELAY, KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" +import { KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" import { AuctionResultFragmentContainer } from "../../Lists/AuctionResultListItem" interface Props { @@ -28,7 +27,6 @@ interface Props { } const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollToTop }) => { - const color = useColor() const tracking = useTracking() const showKeywordFilter = useFeatureFlag("AREnableAuctionResultsKeywordFilter") @@ -37,16 +35,8 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const setFilterTypeAction = ArtworksFiltersStore.useStoreActions((state) => state.setFilterTypeAction) const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const applyFilters = ArtworksFiltersStore.useStoreState((state) => state.applyFilters) - const filterParams = filterArtworksParams(appliedFilters, "auctionResult") - - const keywordFilterValue = appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword)?.paramValue - const isKeywordFilterActive = !!keywordFilterValue - const [keywordFilterRefetching, setKeywordFilterRefetching] = useState(false) - const endKeywordFilterRefetching = useMemo( - () => debounce(() => setKeywordFilterRefetching(false), DEBOUNCE_DELAY), - [] - ) + const filterParams = filterArtworksParams(appliedFilters, "auctionResult") useEffect(() => { setFilterTypeAction("auctionResult") @@ -57,8 +47,6 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo relay.refetchConnection( PAGE_SIZE, (error) => { - endKeywordFilterRefetching() - if (error) { throw new Error("ArtistInsights/ArtistAuctionResults filter error: " + error.message) } @@ -135,11 +123,11 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const resultsString = Number(artist.auctionResultsConnection?.totalCount) === 1 ? "result" : "results" + const isKeywordFilterActive = !!appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword) + ?.paramValue + return ( - + = ({ artist, relay, scrollTo {resultsString} {bullet} Sorted by {getSortDescription()?.toLowerCase()} - {!!showKeywordFilter && ( - setKeywordFilterRefetching(true)} - /> - )} + {!!showKeywordFilter && } {auctionResults.length ? ( { const { is_followed, initials, image, href, name, nationality, birthday, deathday } = artist const imageURl = image && image.url + const TouchableComponent = withFeedback ? Touchable : TouchableWithoutFeedback + if (!name) { return null } return ( - - {({ color }) => ( - { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - > - - - - - - - - - - )} - + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + useDefaultTouchable + > + + + + + + + + + ) } } diff --git a/src/lib/Components/ArtsyReactWebView.tsx b/src/lib/Components/ArtsyReactWebView.tsx index 59a402d2920..7458d13b752 100644 --- a/src/lib/Components/ArtsyReactWebView.tsx +++ b/src/lib/Components/ArtsyReactWebView.tsx @@ -1,11 +1,11 @@ import { OwnerType } from "@artsy/cohesion" +import { color } from "@artsy/palette-tokens" import { addBreadcrumb } from "@sentry/react-native" import { dismissModal, goBack, navigate } from "lib/navigation/navigate" import { matchRoute } from "lib/navigation/routes" import { getCurrentEmissionState, GlobalStore, useEnvironment, useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { useColor } from "palette/hooks" import { parse as parseQueryString } from "query-string" import React, { useEffect, useRef, useState } from "react" import { Platform, View } from "react-native" @@ -176,12 +176,9 @@ export const ArtsyReactWebView = React.forwardRef< }) const ProgressBar: React.FC<{ loadProgress: number | null }> = ({ loadProgress }) => { - const color = useColor() - if (loadProgress === null) { return null } - const progressPercent = Math.max(loadProgress * 100, 2) return ( > = ({ navigation, route }) => { - const space = useSpace() const tracking = useTracking() const { closeModal, id, mode, slug, title = "Sort & Filter" } = route.params @@ -295,7 +293,7 @@ export const getFilterScreenSortByMode = (mode: FilterModalMode) => ( } export const FilterArtworkButton = styled(Flex)` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; align-items: center; justify-content: center; flex-direction: row; @@ -372,11 +370,11 @@ export const AnimatedArtworkFilterButton: React.FC {} export const ColorsOptionsScreen: React.FC = ({ navigation }) => { - const space = useSpace() const { layout, handleLayout } = useLayout() const { aggregation } = useArtworkFiltersAggregation({ diff --git a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx index 9360c8158e5..8c6110b4258 100644 --- a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx @@ -1,4 +1,4 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { Switch, View } from "react-native" @@ -10,7 +10,6 @@ interface FilterToggleButtonProps { export const FilterToggleButton: React.FC = (props) => { const { onChange, value, disabled } = props - const color = useColor() return ( diff --git a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx index a0c1538d7f4..23eab0b5eba 100644 --- a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx @@ -4,28 +4,18 @@ import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilter import { Input } from "lib/Components/Input/Input" import SearchIcon from "lib/Icons/SearchIcon" import { OwnerEntityTypes, PageNames } from "lib/utils/track/schema" -import { debounce, throttle } from "lodash" +import { debounce } from "lodash" import React, { useEffect, useMemo, useRef } from "react" -import { Platform } from "react-native" import { useTracking } from "react-tracking" -export const DEBOUNCE_DELAY = 400 +const DEBOUNCE_DELAY = 600 interface KeywordFilterProps { artistId: string artistSlug: string - onFocus?: () => void - loading?: boolean - onTypingStart?: () => void } -export const KeywordFilter: React.FC = ({ - artistId, - artistSlug, - loading, - onFocus, - onTypingStart, -}) => { +export const KeywordFilter: React.FC = ({ artistId, artistSlug }) => { const { trackEvent } = useTracking() const appliedFiltersState = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) @@ -48,7 +38,6 @@ export const KeywordFilter: React.FC = ({ } const handleChangeText = useMemo(() => debounce(updateKeywordFilter, DEBOUNCE_DELAY), [appliedFiltersParams]) - const handleTypingStart = useMemo(() => throttle(() => onTypingStart?.(), DEBOUNCE_DELAY), [onTypingStart]) // clear input text when keyword filter is reseted useEffect(() => { @@ -67,25 +56,14 @@ export const KeywordFilter: React.FC = ({ return () => handleChangeText.cancel() }, []) - // Truncate placeholder for Android to prevent new line. - const placeholder = - Platform.OS === "android" && loading - ? "Search by artwork title, series..." - : "Search by artwork title, series, or description" - return ( } - placeholder={placeholder} - onChangeText={(e) => { - handleTypingStart() - handleChangeText(e) - }} + placeholder="Search by artwork title, series, or description" + onChangeText={handleChangeText} autoCorrect={false} enableClearButton={true} ref={inputRef} - onFocus={onFocus} /> ) } diff --git a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx index 1a91e043304..bbab2b84bd4 100644 --- a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx @@ -122,7 +122,6 @@ export const PriceRangeOptionsScreen: React.FC = ( ListHeaderComponent?: JSX.Element withExtraPadding?: boolean - useScrollView?: boolean } const isFilterData = (item: any): item is FilterData => { @@ -31,46 +30,39 @@ export const SingleSelectOptionScreen: React.FC = navigation, ListHeaderComponent, withExtraPadding = false, - useScrollView = false, }) => { const handleBackNavigation = () => { navigation.goBack() } - const keyExtractor = (_item: FilterData | JSX.Element, index: number) => String(index) - const renderItem = (item: FilterData | JSX.Element) => { - if (isFilterData(item)) { - return ( - - ) - } - - // Otherwise just return JSX.Element - return item - } return ( {filterHeaderText} - {useScrollView ? ( - - {ListHeaderComponent} - {filterOptions.map((item, index) => { - return {renderItem(item)} - })} - - ) : ( - renderItem(item)} - /> - )} + String(index)} + data={filterOptions} + ItemSeparatorComponent={null} + renderItem={({ item }) => { + if (isFilterData(item)) { + return ( + + ) + } + + // Otherwise just return JSX.Element + return item + }} + /> ) diff --git a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx index efdee1b38ec..0cdd8f8e3d6 100644 --- a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx @@ -33,14 +33,14 @@ export const SIZE_OPTIONS: FilterData[] = IS_USA ? [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 16in)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (under 16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 40in)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] : [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 40cm)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (under 40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 100cm)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] @@ -195,7 +195,6 @@ export const SizeOptionsScreen: React.FC = ({ navigation filterHeaderText={FilterDisplayName.size} selectedOption={selectedOption} navigation={navigation} - useScrollView={true} filterOptions={[ ...SIZE_OPTIONS, ...(shouldShowCustomSize diff --git a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx index 4a4988f2390..5681d8924ae 100644 --- a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx @@ -7,7 +7,7 @@ import { CircleWithBorder } from "lib/Components/CircleWithBorder/CircleWithBord import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { TouchableRow } from "lib/Components/TouchableRow" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CheckIcon, Flex, Separator, Text, useColor } from "palette" +import { Box, CheckIcon, color, Flex, Separator, Text } from "palette" import React, { useState } from "react" import Haptic from "react-native-haptic-feedback" import styled from "styled-components/native" @@ -21,7 +21,6 @@ export const ALLOW_EMPTY_CREATED_DATES_FILTER: FilterData = { } export const YearOptionsScreen: React.FC = ({ navigation }) => { - const color = useColor() const screenWidth = useScreenDimensions().width const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx index b5e644e97ec..e979768e3b7 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx @@ -1,18 +1,30 @@ import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Box, CheckIcon } from "palette" +import { Box, CheckIcon, color } from "palette" import React from "react" import { ColorsSwatch } from "../ColorsSwatch" describe("Colors swatch", () => { it("adds a check icon when selected", () => { const selectedTree = renderWithWrappers( - + ) const selectedCheckIcon = selectedTree.root.findByType(CheckIcon) expect(selectedCheckIcon.props.fill).toMatch("#fff") const unselectedTree = renderWithWrappers( - + ) const unselectedCheckIcon = unselectedTree.root.findAllByType(CheckIcon) expect(unselectedCheckIcon.length).toEqual(0) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx index aae5dcd8906..8dc87c4185b 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx @@ -85,7 +85,7 @@ describe("Galleries and Institutions Options Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Galleries and Institutions")) + const item = items.find((i) => extractText(i).startsWith("Galleries and institutions")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx index 3047481e4cf..c5fb42bbf5b 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx @@ -81,7 +81,7 @@ describe(LocationCitiesOptionsScreen, () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Artwork Location")) + const item = items.find((i) => extractText(i).startsWith("Artwork location")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx index aa9a370cd19..d982a38b189 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx @@ -68,7 +68,7 @@ describe("SizeOptionsNew", () => { expect(text).toContain("All") expect(text).toContain("Small (under 16in)") - expect(text).toContain("Medium (16in – 40in)") + expect(text).toContain("Medium (under 16in – 40in)") expect(text).toContain("Large (over 40in)") expect(text).toContain("Custom size") }) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx index 04521963479..b13c90a7326 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx @@ -60,7 +60,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time Period")) + const item = items.find((i) => extractText(i).startsWith("Time period")) expect(item).not.toBeUndefined() @@ -95,7 +95,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time Period")) + const item = items.find((i) => extractText(i).startsWith("Time period")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts index 90435e746be..8bca24401ba 100644 --- a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts +++ b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts @@ -76,7 +76,7 @@ describe("convertSizeToFilterParams", () => { it("returns the medium size filter value", () => { expect(convertSizeToFilterParams({ dimensionRange: "16.0-40.0" })).toEqual([ { - displayText: "Medium (16in – 40in)", + displayText: "Medium (under 16in – 40in)", paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }, @@ -524,7 +524,17 @@ describe("convertSavedSearchCriteriaToFilterParams", () => { paramName: FilterParamName.priceRange, }) expect(result).toContainEqual({ - displayText: `Medium (16in – 40in)`, + displayText: `Medium (under 16in – 40in)`, + paramValue: "16.0-40.0", + paramName: FilterParamName.dimensionRange, + }) + expect(result).toContainEqual({ + displayText: `Medium (under 16in – 40in)`, + paramValue: "16.0-40.0", + paramName: FilterParamName.dimensionRange, + }) + expect(result).toContainEqual({ + displayText: `Medium (under 16in – 40in)`, paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }) diff --git a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx index 83a0bad4815..926f7b14041 100644 --- a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx +++ b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx @@ -417,13 +417,11 @@ describe("Applying filters on Artworks", () => { render={({ props, error }) => { if (props?.marketingCollection) { return ( - - - - - - - + + + + + ) } else if (error) { console.log(error) diff --git a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx index 32ceb385b82..87575204f2a 100644 --- a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx +++ b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { Button, Flex, Sans } from "palette" +import { Button, color, Flex, Sans } from "palette" import React from "react" import styled from "styled-components/native" @@ -39,6 +38,6 @@ export const FilteredArtworkGridZeroState: React.FC = (props) => } const ZeroStateMessage = styled(Sans)` - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; text-align: center; ` diff --git a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx index 3c5b411999c..2d2f87fc38f 100644 --- a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx +++ b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx @@ -19,7 +19,7 @@ import { PAGE_SIZE } from "lib/data/constants" import { ScreenOwnerType } from "@artsy/cohesion" import { InfiniteScrollArtworksGrid_connection } from "__generated__/InfiniteScrollArtworksGrid_connection.graphql" import { extractNodes } from "lib/utils/extractNodes" -import { Box, Button, Flex, getColorsForVariant, Theme } from "palette" +import { Box, Button, Flex, getColorsForVariant, space, Theme } from "palette" import { graphql } from "relay-runtime" import ParentAwareScrollView from "../ParentAwareScrollView" @@ -153,7 +153,7 @@ class InfiniteScrollArtworksGrid extends React.Component void) | null | undefined @@ -47,7 +43,6 @@ export const ArtworkTileRailCard: React.FC = ({ useSquareAspectRatio = false, lotLabel, }) => { - const color = useColor() if (!!imageURL && !imageAspectRatio && !useSquareAspectRatio) { throw new Error("imageAspectRatio is required for non-square images") } diff --git a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx index 72d9d174a3e..7ddfc05a4a1 100644 --- a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx +++ b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { ArtworkTileRailCard, ArtworkTileRailCardProps } from "../ArtworkTileRailCard" @@ -22,11 +21,9 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - - - + + + ) const image = result.find("AROpaqueImageView") @@ -39,11 +36,9 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - - - + + + ) const sans = result.find("Sans") @@ -57,11 +52,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) const sans = result.find("Sans") @@ -75,11 +68,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) expect(result.find("AROpaqueImageView").length).toBe(0) @@ -92,11 +83,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -107,11 +96,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -122,11 +109,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -137,11 +122,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -152,11 +135,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -169,11 +150,9 @@ describe("ArtworkTileRailCard", () => { expect(() => mount( - - - - - + + + ) ).toThrowError(error) }) @@ -185,11 +164,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) const image = result.find("AROpaqueImageView") diff --git a/src/lib/Components/Buttons/DarkNavigationButton.tsx b/src/lib/Components/Buttons/DarkNavigationButton.tsx index f442079cf0a..7c8bfaa1aec 100644 --- a/src/lib/Components/Buttons/DarkNavigationButton.tsx +++ b/src/lib/Components/Buttons/DarkNavigationButton.tsx @@ -1,5 +1,5 @@ import { navigate } from "lib/navigation/navigate" -import { Box, ClassTheme, Flex, Serif } from "palette" +import { Box, color, Flex, Serif } from "palette" import React from "react" import { Image, TouchableWithoutFeedback } from "react-native" @@ -13,20 +13,16 @@ export default class DarkNavigationButton extends React.Component { render() { const showNavArrow = this.props.href || this.props.onPress return ( - - {({ color }) => ( - - - - - {this.props.title} - - {!!showNavArrow && } - - - - )} - + + + + + {this.props.title} + + {!!showNavArrow && } + + + ) } diff --git a/src/lib/Components/ConnectivityBanner.tsx b/src/lib/Components/ConnectivityBanner.tsx index 0ced957d02b..7e5ccc03708 100644 --- a/src/lib/Components/ConnectivityBanner.tsx +++ b/src/lib/Components/ConnectivityBanner.tsx @@ -4,7 +4,6 @@ import styled from "styled-components/native" import colors from "lib/data/colors" import fonts from "lib/data/fonts" -// @ts-ignore const Container = styled.View` height: 30; background-color: ${colors["yellow-regular"]}; diff --git a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx index 77625ecc004..e633f3ebfbf 100644 --- a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx +++ b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx @@ -1,7 +1,7 @@ // Mock moment to always give back a formatted time string -jest.mock("moment-timezone", () => { +jest.mock("moment", () => { const momentMock: any = jest.fn(() => ({ format: (format: string) => (format.length > 3 ? "Mon" : "7pm") })) - momentMock.duration = jest.requireActual("moment-timezone").duration + momentMock.duration = jest.requireActual("moment").duration return momentMock }) diff --git a/src/lib/Components/FancyModal/FancyModalHeader.tsx b/src/lib/Components/FancyModal/FancyModalHeader.tsx index 1a5fcbea047..79679adc80f 100644 --- a/src/lib/Components/FancyModal/FancyModalHeader.tsx +++ b/src/lib/Components/FancyModal/FancyModalHeader.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, Text, useTheme } from "palette" +import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, space, Text } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -26,7 +25,6 @@ export const FancyModalHeader: React.FC = ({ useXButton, useShareButton, }) => { - const { space } = useTheme() const leftButton = () => { if (!useXButton) { return @@ -90,13 +88,13 @@ export const Container = styled(Flex)` flex-direction: row; justify-content: space-between; align-items: center; - height: ${themeGet("space.6")}px; + height: ${space(6)}; ` export const LeftButtonContainer = styled(TouchableOpacity)` - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ` export const RightButtonContainer = styled(TouchableOpacity)` - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ` diff --git a/src/lib/Components/Gene/GeneArtworks.tsx b/src/lib/Components/Gene/GeneArtworks.tsx index 2df36952572..638530022ee 100644 --- a/src/lib/Components/Gene/GeneArtworks.tsx +++ b/src/lib/Components/Gene/GeneArtworks.tsx @@ -16,7 +16,7 @@ import { Schema } from "lib/utils/track" import { Box, Message } from "palette" import React, { useContext, useState } from "react" import { useEffect } from "react" -import { useRef } from "react" +import { useRef } from 'react' import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" diff --git a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx index 8835f97c9b8..d2abbe752cd 100644 --- a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx +++ b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx @@ -1,17 +1,17 @@ import { GeneArtworksTestsQuery } from "__generated__/GeneArtworksTestsQuery.graphql" -import { ApplyButton } from "lib/Components/ArtworkFilter" +import { ApplyButton } from 'lib/Components/ArtworkFilter' import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { ArtworksFilterHeader } from "lib/Components/ArtworkGrids/FilterHeader" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { StickyTabPage } from "lib/Components/StickyTabPage/StickyTabPage" -import { TouchableRow } from "lib/Components/TouchableRow" -import { extractText } from "lib/tests/extractText" +import { TouchableRow } from 'lib/Components/TouchableRow' +import { extractText } from 'lib/tests/extractText' import { mockEnvironmentPayload } from "lib/tests/mockEnvironmentPayload" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Message, TouchableHighlightColor } from "palette" +import { Message, TouchableHighlightColor } from 'palette' import React from "react" import { graphql, QueryRenderer } from "react-relay" -import { act } from "react-test-renderer" +import { act } from 'react-test-renderer' import { useTracking } from "react-tracking" import { createMockEnvironment } from "relay-test-utils" import { GeneArtworksPaginationContainer } from "../GeneArtworks" @@ -142,7 +142,7 @@ describe("GeneArtworks", () => { artworks: { counts: { total: 0, - }, + } }, } }, diff --git a/src/lib/Components/GenericArtistSeriesRail.tsx b/src/lib/Components/GenericArtistSeriesRail.tsx index 9293db54723..6ed3e862b74 100644 --- a/src/lib/Components/GenericArtistSeriesRail.tsx +++ b/src/lib/Components/GenericArtistSeriesRail.tsx @@ -12,7 +12,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { Schema } from "lib/utils/track" -import { Sans, Spacer, useColor } from "palette" +import { color, Sans, Spacer } from "palette" import React from "react" import { View } from "react-native" import { useTracking } from "react-tracking" @@ -31,7 +31,6 @@ type GenericArtistSeriesItem = | ArtistCollectionsRail_collections[0] export const GenericArtistSeriesRail: React.FC = (props) => { - const color = useColor() const { collections, contextScreenOwnerType, contextScreenOwnerId, contextScreenOwnerSlug } = props const tracking = useTracking() diff --git a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx index afc008ec201..8c3d252f2da 100644 --- a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx +++ b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx @@ -7,7 +7,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { compact, floor } from "lodash" -import { Button, ClassTheme, CloseIcon, Flex, Join, Sans, Touchable } from "palette" +import { Button, CloseIcon, color, Flex, Join, Sans, Touchable } from "palette" import styled from "styled-components/native" import { CARD_WIDTH, CardRailCard } from "../CardRailCard" @@ -132,33 +132,29 @@ export class ArtistCard extends React.Component { ) : null} {!!this.props.onDismiss && ( - - {({ color }) => ( - - {this.state.isDismissing ? ( - - ) : ( - - )} - + + {this.state.isDismissing ? ( + + ) : ( + )} - + )} ) diff --git a/src/lib/Components/HoursCollapsible.tsx b/src/lib/Components/HoursCollapsible.tsx index b79f84a83f8..cbc74687d99 100644 --- a/src/lib/Components/HoursCollapsible.tsx +++ b/src/lib/Components/HoursCollapsible.tsx @@ -2,7 +2,7 @@ import { HoursCollapsible_location } from "__generated__/HoursCollapsible_locati import { Markdown } from "lib/Components/Markdown" import ChevronIcon from "lib/Icons/ChevronIcon" import { defaultRules } from "lib/utils/renderMarkdown" -import { Box, ClassTheme, Collapse as _Collapse, Flex, Sans, Spacer } from "palette" +import { Box, Collapse as _Collapse, color, Flex, Sans, Spacer } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -81,25 +81,21 @@ export class HoursCollapsible extends React.Component { render() { const { isExpanded } = this.state return ( - - {({ color }) => ( - - - - - Opening hours - - - - - - - - {this.renderHours()} - - - )} - + + + + + Opening hours + + + + + + + + {this.renderHours()} + + ) } } diff --git a/src/lib/Components/Input/Input.tsx b/src/lib/Components/Input/Input.tsx index f1f260ca30c..7d5a2199472 100644 --- a/src/lib/Components/Input/Input.tsx +++ b/src/lib/Components/Input/Input.tsx @@ -1,5 +1,5 @@ import _ from "lodash" -import { Color, EyeOpenedIcon, Flex, Sans, Spinner, TEXT_FONTS, useTheme, XCircleIcon } from "palette" +import { color, Color, EyeOpenedIcon, Flex, Sans, TEXT_FONTS, XCircleIcon } from "palette" import { fontFamily } from "palette/platform/fonts/fontFamily" import React, { useEffect, useImperativeHandle, useRef, useState } from "react" import { @@ -24,7 +24,6 @@ export interface InputProps extends Omit { description?: string error?: string icon?: JSX.Element - loading?: boolean disabled?: boolean required?: boolean title?: string @@ -69,7 +68,6 @@ export const Input = React.forwardRef( disabled, error, icon, - loading, required, enableClearButton, title, @@ -83,7 +81,6 @@ export const Input = React.forwardRef( }, ref ) => { - const { color } = useTheme() const [focused, setFocused] = useState(false) const [showPassword, setShowPassword] = useState(!secureTextEntry) const [value, setValue] = useState(rest.value ?? rest.defaultValue ?? "") @@ -254,26 +251,17 @@ export const Input = React.forwardRef( /> {renderShowPasswordIcon()} - {loading ? ( - - + {!!(value !== undefined && value !== "" && enableClearButton) && ( + + { + localClear() + }} + hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} + > + + - ) : ( - !!(value !== undefined && value !== "" && enableClearButton) && ( - - { - localClear() - }} - hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} - > - - - - ) )} diff --git a/src/lib/Components/Input/InputTitle.tsx b/src/lib/Components/Input/InputTitle.tsx index 1960f53f3e2..ac518786a43 100644 --- a/src/lib/Components/Input/InputTitle.tsx +++ b/src/lib/Components/Input/InputTitle.tsx @@ -1,8 +1,7 @@ -import { Text, useColor } from "palette" +import { color, Text } from "palette" import React from "react" export const InputTitle: React.FC<{ required?: boolean }> = ({ children: title, required }) => { - const color = useColor() if (!title) { return null } diff --git a/src/lib/Components/Lists/AuctionResultListItem.tsx b/src/lib/Components/Lists/AuctionResultListItem.tsx index 0acf78d737c..5f773ed804d 100644 --- a/src/lib/Components/Lists/AuctionResultListItem.tsx +++ b/src/lib/Components/Lists/AuctionResultListItem.tsx @@ -4,7 +4,7 @@ import { auctionResultHasPrice, auctionResultText } from "lib/Scenes/AuctionResu import { QAInfoManualPanel, QAInfoRow } from "lib/utils/QAInfo" import { capitalize } from "lodash" import moment from "moment" -import { bullet, Flex, NoArtworkIcon, Text, Touchable, useColor } from "palette" +import { bullet, color, Flex, NoArtworkIcon, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { AuctionResultsMidEstimate } from "../AuctionResult/AuctionResultMidEstimate" @@ -16,7 +16,6 @@ interface Props { } const AuctionResultListItem: React.FC = ({ auctionResult, onPress, showArtistName }) => { - const color = useColor() const QAInfo: React.FC = () => ( diff --git a/src/lib/Components/Lists/SavedItemRow.tsx b/src/lib/Components/Lists/SavedItemRow.tsx index 1d624a7c91e..a75b0a8b356 100644 --- a/src/lib/Components/Lists/SavedItemRow.tsx +++ b/src/lib/Components/Lists/SavedItemRow.tsx @@ -1,7 +1,7 @@ import React from "react" import { navigate } from "lib/navigation/navigate" -import { Flex, Sans, Spacer, Touchable, useColor } from "palette" +import { color, Flex, Sans, Spacer, Touchable } from "palette" import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" interface SavedItemRowProps { @@ -15,7 +15,6 @@ interface SavedItemRowProps { } export const SavedItemRow: React.FC = ({ href, name, image, square_image, size = 60 }) => { - const color = useColor() const imageURL = image?.url return ( diff --git a/src/lib/Components/Lists/ShowItemRow.tsx b/src/lib/Components/Lists/ShowItemRow.tsx index 62e9fcdfa13..0b033583250 100644 --- a/src/lib/Components/Lists/ShowItemRow.tsx +++ b/src/lib/Components/Lists/ShowItemRow.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { ShowItemRow_show } from "__generated__/ShowItemRow_show.graphql" import { ShowItemRowMutation } from "__generated__/ShowItemRowMutation.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" @@ -9,7 +8,7 @@ import { exhibitionDates } from "lib/Scenes/Map/exhibitionPeriodParser" import { hrefForPartialShow } from "lib/utils/router" import { Schema, Track, track as _track } from "lib/utils/track" import { debounce } from "lodash" -import { Box, Button, ClassTheme, Flex, Sans, Touchable } from "palette" +import { Box, Button, color, Flex, Sans, space, Touchable } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -125,55 +124,51 @@ export class ShowItemRow extends React.Component { const imageURL = mainCoverImageURL || galleryProfileIcon return ( - - {({ color }) => ( - - {!imageURL ? ( - - - - ) : ( - - - - )} - - {!!(show.partner && show.partner.name) && ( - - {show.partner.name} - - )} - {!!show.name && ( - - {show.name} - - )} - {!!(show.exhibition_period && show.status) && ( - - {show.status.includes("closed") - ? show.status.charAt(0).toUpperCase() + show.status.slice(1) - : exhibitionDates( - show.exhibition_period, - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - show.end_at - )} - - )} - - {!shouldHideSaveButton && ( - - )} - + + {!imageURL ? ( + + + + ) : ( + + + )} - + + {!!(show.partner && show.partner.name) && ( + + {show.partner.name} + + )} + {!!show.name && ( + + {show.name} + + )} + {!!(show.exhibition_period && show.status) && ( + + {show.status.includes("closed") + ? show.status.charAt(0).toUpperCase() + show.status.slice(1) + : exhibitionDates( + show.exhibition_period, + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + show.end_at + )} + + )} + + {!shouldHideSaveButton && ( + + )} + ) } @@ -181,17 +176,13 @@ export class ShowItemRow extends React.Component { const { show, isListItem } = this.props return isListItem ? ( - - {({ color }) => ( - this.handleTap(show.slug, show.internalID)} - style={{ paddingHorizontal: 20, paddingVertical: 5 }} - > - {this.renderItemDetails()} - - )} - + this.handleTap(show.slug, show.internalID)} + style={{ paddingHorizontal: 20, paddingVertical: 5 }} + > + {this.renderItemDetails()} + ) : ( this.handleTap(show.slug, show.internalID)}> {this.renderItemDetails()} @@ -237,6 +228,6 @@ export const ShowItemRowContainer = createFragmentContainer(ShowItemRow, { const DefaultImageContainer = styled(Box)` align-items: center; background-color: ${colors["gray-regular"]}; - height: ${themeGet("space.6")}px; - width: ${themeGet("space.6")}px; + height: ${space(6)}; + width: ${space(6)}; ` diff --git a/src/lib/Components/LoadFailureView.tsx b/src/lib/Components/LoadFailureView.tsx index aca22a30f64..aa37ac2d6c1 100644 --- a/src/lib/Components/LoadFailureView.tsx +++ b/src/lib/Components/LoadFailureView.tsx @@ -1,6 +1,6 @@ import { screen } from "lib/utils/track/helpers" import { debounce } from "lodash" -import { Flex, Text, Touchable, useColor } from "palette" +import { color, Flex, Text, Touchable } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, Easing } from "react-native" import { useTracking } from "react-tracking" @@ -12,7 +12,6 @@ interface LoadFailureViewProps { } export const LoadFailureView: React.FC = (props) => { - const color = useColor() const spinAnimation = useRef(new Animated.Value(0)).current const [isAnimating, setIsAnimating] = useState(false) diff --git a/src/lib/Components/LocationMap/index.tsx b/src/lib/Components/LocationMap/index.tsx index ac5a0932b70..1f50ea3ae9d 100644 --- a/src/lib/Components/LocationMap/index.tsx +++ b/src/lib/Components/LocationMap/index.tsx @@ -1,11 +1,10 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import Clipboard from "@react-native-community/clipboard" import MapboxGL from "@react-native-mapbox-gl/maps" -import { themeGet } from "@styled-system/theme-get" import { LocationMap_location } from "__generated__/LocationMap_location.graphql" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, Flex, Text } from "palette" +import { Box, color, Flex, Text } from "palette" import React from "react" import { Linking, TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -16,7 +15,7 @@ MapboxGL.setAccessToken(Config.MAPBOX_API_CLIENT_KEY) const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` interface Props { diff --git a/src/lib/Components/MenuItem.tsx b/src/lib/Components/MenuItem.tsx index b470771ce30..35ef3a23378 100644 --- a/src/lib/Components/MenuItem.tsx +++ b/src/lib/Components/MenuItem.tsx @@ -1,4 +1,4 @@ -import { ChevronIcon, Flex, Sans, SansProps, Touchable, useColor } from "palette" +import { ChevronIcon, color, Flex, Sans, SansProps, Touchable } from "palette" import React from "react" import { StyleProp, ViewStyle } from "react-native" @@ -23,7 +23,6 @@ export const MenuItem: React.FC<{ ellipsizeMode, style, }) => { - const color = useColor() return ( >(({ value, onChange, onChangeText, maxModalHeight, ...rest }, outerRef) => { - const color = useColor() const innerRef = useRef() const initialValues = cleanUserPhoneNumber(value ?? "") diff --git a/src/lib/Components/Photos/AddEditPhotos.tsx b/src/lib/Components/Photos/AddEditPhotos.tsx index 9728bd4845e..12cd1bb2752 100644 --- a/src/lib/Components/Photos/AddEditPhotos.tsx +++ b/src/lib/Components/Photos/AddEditPhotos.tsx @@ -7,7 +7,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, Button, Flex, Spacer, useColor, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, Button, color, Flex, Spacer, XCircleIcon } from "palette" import React, { useState } from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { Image as RNCImage } from "react-native-image-crop-picker" @@ -87,7 +87,6 @@ const AddPhotosButton: React.FC<{ imageSize: number; addPhotos: (addedImages: RN imageSize, addPhotos, }) => { - const color = useColor() const { showActionSheetWithOptions } = useActionSheet() return ( diff --git a/src/lib/Components/PopoverMessage/PopoverMessage.tsx b/src/lib/Components/PopoverMessage/PopoverMessage.tsx index 031f8f64430..072f55bf1ad 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessage.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessage.tsx @@ -1,31 +1,20 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CloseIcon, Color, Flex, Text, Touchable, useColor } from "palette" -import React from "react" -import { Animated } from "react-native" +import { Box, CloseIcon, Color, color, Flex, Text, Touchable } from "palette" +import React, { useEffect, useRef, useState } from "react" +import { Animated, Platform } from "react-native" +import useTimeoutFn from "react-use/lib/useTimeoutFn" import { usePopoverMessage } from "./popoverMessageHooks" export const AnimatedFlex = Animated.createAnimatedComponent(Flex) +const EDGE_POPOVER_MESSAGE_HEIGHT = Platform.OS === "ios" ? 80 : 90 const EDGE_POPOVER_MESSAGE_PADDING = 10 +const FRICTION = 20 const NAVBAR_HEIGHT = 44 export type PopoverMessagePlacement = "top" | "bottom" export type PopoverMessageType = "info" | "success" | "error" | "default" -export type PopoverMessageItem = Omit - -export interface PopoverMessageProps { - placement?: PopoverMessagePlacement - title: string - translateYAnimation: Animated.Value - opacityAnimation: Animated.Value - message?: string - autoHide?: boolean - hideTimeout?: number - showCloseIcon?: boolean - type?: PopoverMessageType - onPress?: () => void - onClose?: () => void -} +export type PopoverMessageOptions = Omit export const getTitleColorByType = (type?: PopoverMessageType): Color => { if (type === "success") { @@ -39,38 +28,95 @@ export const getTitleColorByType = (type?: PopoverMessageType): Color => { return "black100" } +export interface PopoverMessageProps { + id: string + positionIndex: number + placement: PopoverMessagePlacement + title: string + message?: string + autoHide?: boolean + hideTimeout?: number + showCloseIcon?: boolean + type?: PopoverMessageType + onPress?: () => void + onClose?: () => void +} + // TODO: Remove NAVBAR_HEIGHT when a new design without a floating back button is added export const PopoverMessage: React.FC = (props) => { - const color = useColor() const { - placement = "top", + id, + positionIndex, + placement, title, message, + autoHide = true, + hideTimeout = 3500, showCloseIcon = true, type, - translateYAnimation, - opacityAnimation, onPress, onClose, } = props const { safeAreaInsets } = useScreenDimensions() const { hide } = usePopoverMessage() + const [opacityAnim] = useState(new Animated.Value(0)) + const [translateYAnim] = useState(new Animated.Value(0)) + const isClosed = useRef(false) const titleColor = getTitleColorByType(type) + useEffect(() => { + Animated.parallel([ + Animated.spring(translateYAnim, { + toValue: 1, + useNativeDriver: true, + friction: FRICTION, + }), + Animated.timing(opacityAnim, { + toValue: 1, + useNativeDriver: true, + duration: 450, + }), + ]).start() + }, []) + + const hideAnimation = () => { + isClosed.current = true + Animated.parallel([ + Animated.spring(translateYAnim, { + toValue: 0, + useNativeDriver: true, + friction: FRICTION, + }), + Animated.timing(opacityAnim, { + toValue: 0, + useNativeDriver: true, + duration: 250, + }), + ]).start(() => hide(id)) + } + const handlePopoverMessagePress = () => { - hide() + hideAnimation() onPress?.() } const handlePopoverMessageClosePress = () => { - hide() + hideAnimation() onClose?.() } - const range = [-150, 0] + useTimeoutFn(() => { + if (autoHide && !isClosed.current) { + hideAnimation() + } + }, hideTimeout) + + const range = [-EDGE_POPOVER_MESSAGE_HEIGHT, 0] const outputRange = placement === "top" ? range : range.map((item) => item * -1) - const translateY = translateYAnimation.interpolate({ inputRange: [0, 1], outputRange }) - const opacity = opacityAnimation.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) + const translateY = translateYAnim.interpolate({ inputRange: [0, 1], outputRange }) + const opacity = opacityAnim.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) + const offset = + EDGE_POPOVER_MESSAGE_PADDING + positionIndex * (EDGE_POPOVER_MESSAGE_HEIGHT + EDGE_POPOVER_MESSAGE_PADDING) const content = ( @@ -80,7 +126,7 @@ export const PopoverMessage: React.FC = (props) => { {title} {!!message && ( - + {message} )} @@ -101,8 +147,9 @@ export const PopoverMessage: React.FC = (props) => { position="absolute" left="1" right="1" - bottom={placement === "bottom" ? safeAreaInsets.bottom + EDGE_POPOVER_MESSAGE_PADDING : undefined} - top={placement === "top" ? safeAreaInsets.top + EDGE_POPOVER_MESSAGE_PADDING + NAVBAR_HEIGHT : undefined} + height={EDGE_POPOVER_MESSAGE_HEIGHT} + bottom={placement === "bottom" ? safeAreaInsets.bottom + offset : undefined} + top={placement === "top" ? safeAreaInsets.top + offset + NAVBAR_HEIGHT : undefined} style={{ opacity, transform: [{ translateY }], diff --git a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx index a99a9073342..14dd8a6f7d9 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx @@ -1,113 +1,55 @@ -import React, { useCallback, useState } from "react" -import { useEffect } from "react" -import { useRef } from "react" -import { Animated } from "react-native" -import { PopoverMessage, PopoverMessageItem } from "./PopoverMessage" +import React, { useCallback, useMemo, useState } from "react" +import { PopoverMessage, PopoverMessageOptions, PopoverMessagePlacement, PopoverMessageProps } from "./PopoverMessage" interface PopoverMessageContextContextValue { - show: (options: PopoverMessageItem) => void - hide: () => void + show: (options: PopoverMessageOptions) => void + hide: (id: string) => void } -const SHOW_ANIMATION_VELOCITY = 450 -const HIDE_ANIMATION_VELOCITY = 400 -const REPLACE_ANIMATION_VELOCITY = 350 +// tslint:disable-next-line:no-empty +export const PopoverMessageContext = React.createContext({ show: () => {}, hide: () => {} }) -const delay = (time: number) => new Promise((resolve) => setTimeout(resolve, time)) +const filterPopoverMessagesByPosition = ( + popoverMessages: Array>, + placement: PopoverMessagePlacement +): PopoverMessageProps[] => { + const filteredByPlacement = popoverMessages.filter((t) => t.placement === placement) + const formatted = filteredByPlacement.map((popoverMessage, positionIndex) => ({ + ...popoverMessage, + positionIndex, + })) -export const PopoverMessageContext = React.createContext({ - // tslint:disable-next-line:no-empty - show: () => {}, - // tslint:disable-next-line:no-empty - hide: () => {}, -}) + return formatted +} export const PopoverMessageProvider: React.FC = ({ children }) => { - const [popoverMessage, setPopoverMessage] = useState(null) - const showingPopoverMessage = useRef(false) - const lastStartedAt = useRef(null) - const timer = useRef(null) - const [opacityAnim] = useState(new Animated.Value(0)) - const [translateYAnim] = useState(new Animated.Value(0)) - - const runAnimation = useCallback((mode: "show" | "hide") => { - const nextAnimationValue = mode === "show" ? 1 : 0 - const animationDuration = mode === "show" ? SHOW_ANIMATION_VELOCITY : HIDE_ANIMATION_VELOCITY - - return new Promise((resolve) => { - if (__TEST__) { - return resolve(null) - } - - Animated.parallel([ - Animated.spring(translateYAnim, { - toValue: nextAnimationValue, - useNativeDriver: true, - friction: 55, - }), - Animated.timing(opacityAnim, { - toValue: nextAnimationValue, - useNativeDriver: true, - duration: animationDuration, - }), - ]).start(resolve) - }) - }, []) - - const clearStartedTimeout = useCallback(() => { - if (timer.current) { - clearTimeout(timer.current) - timer.current = null - } - }, []) - - const hide: PopoverMessageContextContextValue["hide"] = useCallback(async () => { - await runAnimation("hide") - setPopoverMessage(null) - clearStartedTimeout() - showingPopoverMessage.current = false - }, [setPopoverMessage]) + const [popoverMessages, setPopoverMessages] = useState>>([]) const show: PopoverMessageContextContextValue["show"] = useCallback( - async (options) => { - const { autoHide = true, hideTimeout = 3500 } = options - const now = Date.now() - lastStartedAt.current = now - - clearStartedTimeout() - - if (showingPopoverMessage.current) { - runAnimation("hide") - await delay(REPLACE_ANIMATION_VELOCITY) - } - - // Check race condition - if (lastStartedAt.current === now) { - setPopoverMessage(options) - showingPopoverMessage.current = true - - if (autoHide) { - timer.current = setTimeout(hide, hideTimeout) - } + (options) => { + setPopoverMessages((prevPopoverMessage) => [...prevPopoverMessage, { id: `${Date.now()}`, ...options }]) + }, + [setPopoverMessages] + ) - lastStartedAt.current = null - } + const hide: PopoverMessageContextContextValue["hide"] = useCallback( + (id) => { + setPopoverMessages((prevPopoverMessage) => prevPopoverMessage.filter((t) => t.id !== id)) }, - [clearStartedTimeout, hide, setPopoverMessage] + [setPopoverMessages] ) - useEffect(() => { - if (popoverMessage) { - runAnimation("show") - } - }, [popoverMessage]) + const topPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "top"), [popoverMessages]) + const bottomPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "bottom"), [ + popoverMessages, + ]) return ( {children} - {!!popoverMessage && ( - - )} + {[...topPopoverMessages, ...bottomPopoverMessages].map((popoverMessageProps) => ( + + ))} ) } diff --git a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx index 7306299b1ae..20ffec0ec67 100644 --- a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx +++ b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx @@ -1,13 +1,12 @@ -import { flushPromiseQueue } from 'lib/tests/flushPromiseQueue' import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { AnimatedFlex, PopoverMessage, PopoverMessageItem } from "../PopoverMessage" +import { AnimatedFlex, PopoverMessage, PopoverMessageOptions } from "../PopoverMessage" import { usePopoverMessage } from "../popoverMessageHooks" -const TestRenderer: React.FC<{ options: PopoverMessageItem }> = (props) => { +const TestRenderer: React.FC<{ options: PopoverMessageOptions }> = (props) => { const popoverMessage = usePopoverMessage() return ( @@ -18,12 +17,22 @@ const TestRenderer: React.FC<{ options: PopoverMessageItem }> = (props) => { } describe("PopoverMessage", () => { + beforeEach(() => { + jest.clearAllMocks() + jest.useFakeTimers() + }) + + afterEach(() => { + jest.useRealTimers() + }) + it("renders when `show` is called", async () => { const tree = renderWithWrappers( ) @@ -34,14 +43,19 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) + + jest.advanceTimersByTime(3500) + + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) - it("renders 1 popover message when `show` is called twice", async () => { + it("renders 2 popover messages when `show` is called twice", async () => { const tree = renderWithWrappers( ) @@ -52,7 +66,7 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(2) }) it("renders with title and message", async () => { @@ -61,6 +75,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -81,6 +96,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", type: "error", }} /> @@ -99,6 +115,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -133,12 +150,12 @@ describe("PopoverMessage", () => { }) it("does not hide after timeout if autoHide is set to false", async () => { - jest.useFakeTimers() const tree = renderWithWrappers( @@ -155,12 +172,12 @@ describe("PopoverMessage", () => { }) it("should hide after `hideTimeout` time", async () => { - jest.useFakeTimers() const tree = renderWithWrappers( @@ -172,11 +189,7 @@ describe("PopoverMessage", () => { jest.advanceTimersByTime(3500) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) - jest.advanceTimersByTime(2000) - jest.useRealTimers() - - await flushPromiseQueue() - + jest.advanceTimersByTime(5000) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -186,6 +199,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -194,8 +208,7 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => tree.root.findByType(PopoverMessage).findByType(Touchable).props.onPress()) - jest.useRealTimers() - await flushPromiseQueue() + jest.advanceTimersByTime(1000) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -207,6 +220,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", onClose, }} /> @@ -225,6 +239,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", showCloseIcon: false, }} /> @@ -243,6 +258,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", onPress, }} /> diff --git a/src/lib/Components/RelatedArtists/RelatedArtist.tsx b/src/lib/Components/RelatedArtists/RelatedArtist.tsx index ee2d723e1e6..19a50191e3c 100644 --- a/src/lib/Components/RelatedArtists/RelatedArtist.tsx +++ b/src/lib/Components/RelatedArtists/RelatedArtist.tsx @@ -1,6 +1,6 @@ import { RelatedArtist_artist } from "__generated__/RelatedArtist_artist.graphql" import { navigate } from "lib/navigation/navigate" -import { ClassTheme, Sans, Spacer } from "palette" +import { color, Sans, Spacer } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -31,13 +31,9 @@ class RelatedArtist extends Component { {artist.name} - - {({ color }) => ( - - {this.artworksString(artist.counts)} - - )} - + + {this.artworksString(artist.counts)} + ) diff --git a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx index ab4b4485df5..0c166465daa 100644 --- a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx +++ b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx @@ -1,7 +1,6 @@ import { ContextModule, OwnerType, ScreenOwnerType, tappedEntityGroup, TappedEntityGroupArgs } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { SaleArtworkTileRailCard_saleArtwork } from "__generated__/SaleArtworkTileRailCard_saleArtwork.graphql" -import { Box, Flex, Sans, useColor } from "palette" +import { Box, color, Flex, Sans } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -11,10 +10,7 @@ import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" export const CONTAINER_HEIGHT = 120 -const SaleArtworkCard = styled.TouchableHighlight.attrs({ - underlayColor: themeGet("colors.white100"), - activeOpacity: 0.8, -})`` +const SaleArtworkCard = styled.TouchableHighlight.attrs({ underlayColor: color("white100"), activeOpacity: 0.8 })`` export interface SaleArtworkTileRailCardProps { onPress: () => void @@ -31,7 +27,6 @@ export const SaleArtworkTileRailCard: React.FC = ( useSquareAspectRatio = false, contextScreenOwnerType, }) => { - const color = useColor() const tracking = useTracking() const artwork = saleArtwork.artwork! diff --git a/src/lib/Components/ScrollableTabBar.tsx b/src/lib/Components/ScrollableTabBar.tsx index 13d3b03c3f5..9cbb1273f4d 100644 --- a/src/lib/Components/ScrollableTabBar.tsx +++ b/src/lib/Components/ScrollableTabBar.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { Sans } from "palette" +import { color, Sans } from "palette" import React from "react" import { Animated, Dimensions, LayoutRectangle, ScrollView, View } from "react-native" import styled from "styled-components/native" @@ -24,7 +23,7 @@ const Button = styled.TouchableWithoutFeedback` const Tabs = styled.ScrollView` height: 50px; border-bottom-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` const TabButton = styled(View)<{ active: boolean }>` @@ -37,7 +36,7 @@ const TabButton = styled(View)<{ active: boolean }>` ${(p) => p.active && ` - border-color: ${themeGet("colors.black100")}; + border-color: ${color("black100")}; border-bottom-width: 2px; `}; ` @@ -47,7 +46,7 @@ interface ScrollableTabProps { } const TabLabel = styled(Sans)<{ isActive: boolean }>` - color: ${(p) => (p.isActive ? themeGet("colors.black100") : themeGet("colors.black30"))}; + color: ${(p) => (p.isActive ? color("black100") : color("black30"))}; ` export const ScrollableTab: React.FC = ({ children }) => ( diff --git a/src/lib/Components/SectionTitle.tsx b/src/lib/Components/SectionTitle.tsx index a2134c8839b..9f6310ecf81 100644 --- a/src/lib/Components/SectionTitle.tsx +++ b/src/lib/Components/SectionTitle.tsx @@ -1,4 +1,4 @@ -import { ArrowRightIcon, Flex, Text, useSpace } from "palette" +import { ArrowRightIcon, Flex, space, Text } from "palette" import React from "react" import { TouchableOpacity, View } from "react-native" @@ -20,7 +20,6 @@ export const SectionTitle: React.FC<{ onPress?: () => any RightButtonContent?: React.ComponentType | null }> = ({ title, subtitle, onPress, RightButtonContent }) => { - const space = useSpace() return ( diff --git a/src/lib/Components/Select.tsx b/src/lib/Components/Select.tsx index f3467fe2318..c7f377b855e 100644 --- a/src/lib/Components/Select.tsx +++ b/src/lib/Components/Select.tsx @@ -1,6 +1,6 @@ import { TriangleDown } from "lib/Icons/TriangleDown" import { Autocomplete } from "lib/utils/Autocomplete" -import { CheckIcon, CloseIcon, Flex, Sans, Separator, Spacer, Touchable, useColor } from "palette" +import { CheckIcon, CloseIcon, color, Flex, Sans, Separator, Spacer, Touchable } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList, TextInput, TouchableOpacity } from "react-native" import { FancyModal } from "./FancyModal/FancyModal" @@ -111,7 +111,6 @@ const SelectButton: React.FC<{ hasError?: boolean onPress(): void }> = ({ value, placeholder, onPress, title, showTitleLabel, subTitle, hasError }) => { - const color = useColor() return ( {showTitleLabel ? {title} : null} @@ -161,8 +160,6 @@ const SelectModal: React.FC<{ renderItemLabel?(value: SelectOption): JSX.Element onModalFinishedClosing?(): void }> = (props) => { - const color = useColor() - // we need to be able to have a local version of the value state so we can show the updated // state between the moment the user taps a selection and the moment we automatically // close the modal. We don't want to tell the consuming component about the user's selection until the diff --git a/src/lib/Components/Spinner.tsx b/src/lib/Components/Spinner.tsx index 8e6b1e3ba62..995d4605fcf 100644 --- a/src/lib/Components/Spinner.tsx +++ b/src/lib/Components/Spinner.tsx @@ -1,4 +1,5 @@ -import { Color, Spinner as PaletteSpinner } from "palette" +import { Spinner as PaletteSpinner } from "palette" +import { Color } from "palette/Theme" import React from "react" import { StyleSheet, View, ViewProps } from "react-native" diff --git a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx index a5153160f89..262e6ad8ae7 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx @@ -1,4 +1,4 @@ -import { useSpace } from "palette" +import { space } from "palette" import React, { useContext, useRef, useState } from "react" import { FlatList, FlatListProps } from "react-native" import Animated from "react-native-reanimated" @@ -36,7 +36,6 @@ export interface StickyTabFlatListProps } export const StickyTabPageFlatList: React.FC = (props) => { - const space = useSpace() const { staticHeaderHeight, stickyHeaderHeight, headerOffsetY } = useStickyTabPageContext() if (!staticHeaderHeight) { throw new Error("invalid state, mounted flat list before staticHeaderHeight was determined") diff --git a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx index 323549e4652..c1fa39c82f7 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx @@ -1,6 +1,6 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact } from "lodash" -import { Sans, useSpace, useTheme } from "palette" +import { color, Sans, space } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, LayoutRectangle, ScrollView, TouchableOpacity, View, ViewProps } from "react-native" import { useStickyTabPageContext } from "./SitckyTabPageContext" @@ -10,7 +10,6 @@ export const TAB_BAR_HEIGHT = 48 export const StickyTabPageTabBar: React.FC<{ onTabPress?(tab: { label: string; index: number }): void }> = ({ onTabPress, }) => { - const { color, space } = useTheme() const screen = useScreenDimensions() const { tabLabels, activeTabIndex, setActiveTabIndex } = useStickyTabPageContext() activeTabIndex.useUpdates() @@ -127,8 +126,6 @@ const ActiveTabBorder: React.FC<{ tabLayouts: LayoutRectangle[]; activeTabIndex: tabLayouts, activeTabIndex, }) => { - const space = useSpace() - // We resize this border using the `scaleX` transform property rather than the `width` property, to avoid running // animations on the JS thread, so we need to set an initial, pre-transform span for the border. const preTransformSpan = 100 diff --git a/src/lib/Components/SwitchMenu.tsx b/src/lib/Components/SwitchMenu.tsx index dc1168dbddf..677584452a3 100644 --- a/src/lib/Components/SwitchMenu.tsx +++ b/src/lib/Components/SwitchMenu.tsx @@ -1,4 +1,4 @@ -import { Flex, Sans, useColor } from "palette" +import { color, Flex, Sans } from "palette" import React from "react" import { Switch } from "react-native" @@ -10,26 +10,23 @@ interface SwitchMenuProps { disabled?: boolean } -export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => { - const color = useColor() - return ( - - - - {title} - - - {description} - - - - - +export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => ( + + + + {title} + + + {description} + - ) -} + + + + +) diff --git a/src/lib/Components/TabBar.tsx b/src/lib/Components/TabBar.tsx index e424419d304..089f289c146 100644 --- a/src/lib/Components/TabBar.tsx +++ b/src/lib/Components/TabBar.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import React from "react" import { Animated, View } from "react-native" import styled from "styled-components/native" -import { Box, ClassTheme, Sans } from "palette" +import { Box, color, Sans, space } from "palette" /** * Nearly all props are given by the ScrollableTabView, @@ -46,7 +45,7 @@ const TabButton = styled.View<{ spaceEvenly?: boolean; active?: boolean }>` !p.spaceEvenly && p.active && ` - border-color: ${themeGet("colors.black100")}; + border-color: ${color("black100")}; border-bottom-width: 1px; margin-bottom: -1px; `}; @@ -70,72 +69,63 @@ export default class TabBar extends React.Component { onPress={() => onPressHandler(page)} > - - {({ color }) => ( - - {name} - - )} - + + {name} + ) } render() { - return ( - - {({ space }) => { - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const containerWidth = this.props.containerWidth - space(4) - const numberOfTabs = this.props.tabs.length + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const containerWidth = this.props.containerWidth - space(4) + const numberOfTabs = this.props.tabs.length + + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const translateX = this.props.scrollValue.interpolate({ + inputRange: [0, 1], + outputRange: [0, containerWidth / numberOfTabs], + }) - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const translateX = this.props.scrollValue.interpolate({ - inputRange: [0, 1], - outputRange: [0, containerWidth / numberOfTabs], - }) - return ( - - - {this.props.tabs.map((name, page) => { - const isTabActive = this.props.activeTab === page - return this.renderTab(name, page, isTabActive, this.props.goToPage) - })} - {this.props.spaceEvenly ? ( - - ) : null} - - - ) - }} - + return ( + + + {this.props.tabs.map((name, page) => { + const isTabActive = this.props.activeTab === page + return this.renderTab(name, page, isTabActive, this.props.goToPage) + })} + {this.props.spaceEvenly ? ( + + ) : null} + + ) } } const Wrapper = styled(Box)` border-bottom-width: 1px; - border-bottom-color: ${themeGet("colors.black30")}; + border-bottom-color: ${color("black30")}; ` diff --git a/src/lib/Components/TextArea.tsx b/src/lib/Components/TextArea.tsx index a99182ccdac..1cd835c1dcf 100644 --- a/src/lib/Components/TextArea.tsx +++ b/src/lib/Components/TextArea.tsx @@ -1,12 +1,11 @@ -import { themeGet } from "@styled-system/theme-get" -import { Text, useColor } from "palette" +import { color, space, Text } from "palette" import React, { useState } from "react" import { TextInput, TextInputProps } from "react-native" import styled from "styled-components/native" const StyledTextArea = styled(TextInput)` border: solid 1px; - padding: ${themeGet("space.1")}px; + padding: ${space(1)}px; height: 88px; ` @@ -14,7 +13,6 @@ interface TextAreaProps extends TextInputProps { title: string } export const TextArea: React.FC = ({ title, ...props }) => { - const color = useColor() const [borderColor, setBorderColor] = useState(color("black10")) return ( diff --git a/src/lib/Components/Toast/Toast.ts b/src/lib/Components/Toast/Toast.ts deleted file mode 100644 index d6f8b8bb21f..00000000000 --- a/src/lib/Components/Toast/Toast.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { GlobalStore } from "lib/store/GlobalStore" -import { ToastOptions, ToastPlacement } from "./types" - -export const Toast = { - show: (message: string, placement: ToastPlacement, options?: ToastOptions) => - GlobalStore.actions.toast.add({ message, placement, options }), - hide: (id: number) => GlobalStore.actions.toast.remove(id), - hideOldest: () => GlobalStore.actions.toast.removeOldest(), -} diff --git a/src/lib/Components/Toast/ToastComponent.tsx b/src/lib/Components/Toast/Toast.tsx similarity index 77% rename from src/lib/Components/Toast/ToastComponent.tsx rename to src/lib/Components/Toast/Toast.tsx index d6e46ebf0b3..12efc4bea2d 100644 --- a/src/lib/Components/Toast/ToastComponent.tsx +++ b/src/lib/Components/Toast/Toast.tsx @@ -1,11 +1,9 @@ -import { useActionSheet } from "@expo/react-native-action-sheet" -import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Text, Touchable, useColor } from "palette" +import { color, Flex, IconProps, Text, Touchable } from "palette" import React, { useEffect, useState } from "react" import { Animated } from "react-native" import useTimeoutFn from "react-use/lib/useTimeoutFn" -import { ToastDetails } from "./types" +import { useToast } from "./toastHook" const AnimatedFlex = Animated.createAnimatedComponent(Flex) @@ -14,16 +12,24 @@ const EDGE_TOAST_HEIGHT = 60 const EDGE_TOAST_PADDING = 10 const NAVBAR_HEIGHT = 44 -type ToastProps = ToastDetails +export type ToastPlacement = "middle" | "top" | "bottom" +export interface ToastProps { + id: string + positionIndex: number -export const ToastComponent: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { - const color = useColor() + placement: ToastPlacement + message: string + + onPress?: (id: string) => void + Icon?: React.FC +} + +export const Toast: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { const { width, height } = useScreenDimensions() + const { hide } = useToast() const { top: topSafeAreaInset } = useScreenDimensions().safeAreaInsets const [opacityAnim] = useState(new Animated.Value(0)) - const { showActionSheetWithOptions } = useActionSheet() - useEffect(() => { Animated.timing(opacityAnim, { toValue: 1, @@ -37,7 +43,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem toValue: 0, useNativeDriver: true, duration: 450, - }).start(() => GlobalStore.actions.toast.remove(id)) + }).start(() => hide(id)) }, 2500) if (placement === "middle") { @@ -63,11 +69,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem overflow="hidden" > {onPress !== undefined ? ( - onPress({ id, showActionSheetWithOptions })} - underlayColor={color("black60")} - > + onPress(id)} underlayColor={color("black60")}> {innerMiddle} ) : ( @@ -111,11 +113,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem overflow="hidden" > {onPress !== undefined ? ( - onPress({ id, showActionSheetWithOptions })} - underlayColor={color("black60")} - > + onPress(id)} underlayColor={color("black60")}> {innerTopBottom} ) : ( diff --git a/src/lib/Components/Toast/__tests__/Toast-tests.tsx b/src/lib/Components/Toast/__tests__/Toast-tests.tsx index 3b2c9e42a1d..ce87a959a58 100644 --- a/src/lib/Components/Toast/__tests__/Toast-tests.tsx +++ b/src/lib/Components/Toast/__tests__/Toast-tests.tsx @@ -3,7 +3,7 @@ import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { ToastComponent } from "../ToastComponent" +import { Toast } from "../Toast" import { useToast } from "../toastHook" const TestRenderer: React.FC = () => { @@ -29,15 +29,15 @@ describe("Toast", () => { it("renders a toast when show toast is called", async () => { const tree = renderWithWrappers() - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) + expect(tree.root.findAllByType(Toast)).toHaveLength(0) const buttonInstance = tree.root.findByType(Touchable) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(1) + expect(tree.root.findAllByType(Toast)).toHaveLength(1) jest.advanceTimersByTime(3000) - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) + expect(tree.root.findAllByType(Toast)).toHaveLength(0) }) }) diff --git a/src/lib/Components/Toast/toastHook.tsx b/src/lib/Components/Toast/toastHook.tsx index 2b7cec3093a..e7b105696a5 100644 --- a/src/lib/Components/Toast/toastHook.tsx +++ b/src/lib/Components/Toast/toastHook.tsx @@ -1,10 +1,18 @@ -import { GlobalStore } from "lib/store/GlobalStore" -import React, { useContext, useMemo } from "react" -import { Toast } from "./Toast" -import { ToastComponent } from "./ToastComponent" -import { ToastDetails, ToastPlacement } from "./types" +// Some stealing from https://github.com/arnnis/react-native-fast-toast +// but simplified +import React, { useCallback, useContext, useMemo, useState } from "react" +import useCounter from "react-use/lib/useCounter" +import { Toast, ToastPlacement, ToastProps } from "./Toast" -type ToastContextValue = typeof Toast +interface ToastContextValue { + show: ( + message: string, + placement: ToastPlacement, + options?: Omit + ) => void + hide: (id: string) => void + hideOldest: () => void +} // tslint:disable-next-line:no-empty const ToastContext = React.createContext({ show: () => {}, hide: () => {}, hideOldest: () => {} }) @@ -24,28 +32,51 @@ export const useToast = () => { } const filterToastsAndPosition = ( - toasts: Array>, + toasts: Array>, placement: ToastPlacement -): ToastDetails[] => +): ToastProps[] => toasts .filter((t) => t.placement === placement) - .reduce<{ idx: number; arr: ToastDetails[] }>( + .reduce<{ idx: number; arr: ToastProps[] }>( ({ idx, arr }, t) => ({ idx: idx + 1, arr: [...arr, { ...t, positionIndex: idx }] }), { idx: 0, arr: [] } ).arr export const ToastProvider: React.FC = ({ children }) => { - const toasts = GlobalStore.useAppState((store) => store.toast.sessionState.toasts) + const [toasts, setToasts] = useState>>([]) + const [nextId, { inc: incrementNextId }] = useCounter() + + const show: ToastContextValue["show"] = useCallback( + (message, placement, options) => { + setToasts((prevToasts) => [...prevToasts, { id: `${nextId}`, placement, message, ...options }]) + incrementNextId() + }, + [setToasts, nextId, incrementNextId] + ) + + const hide: ToastContextValue["hide"] = useCallback( + (id) => { + setToasts((prevToasts) => prevToasts.filter((t) => t.id !== id)) + }, + [setToasts] + ) + + const hideOldest: ToastContextValue["hideOldest"] = useCallback(() => { + setToasts((prevToasts) => { + const [, ...tail] = prevToasts + return tail + }) + }, [setToasts]) const topToasts = useMemo(() => filterToastsAndPosition(toasts, "top"), [toasts]) const bottomToasts = useMemo(() => filterToastsAndPosition(toasts, "bottom"), [toasts]) const middleToasts = useMemo(() => filterToastsAndPosition(toasts, "middle"), [toasts]) return ( - + {children} {[...topToasts, ...bottomToasts, ...middleToasts].map((toastProps) => ( - + ))} ) diff --git a/src/lib/Components/Toast/types.ts b/src/lib/Components/Toast/types.ts deleted file mode 100644 index dc5e1393367..00000000000 --- a/src/lib/Components/Toast/types.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ActionSheetProps } from "@expo/react-native-action-sheet" -import { IconProps } from "palette" - -export type ToastPlacement = "middle" | "top" | "bottom" - -export interface ToastOnPressHelpers { - id: number - showActionSheetWithOptions: ActionSheetProps["showActionSheetWithOptions"] -} - -export interface ToastDetails { - id: number - positionIndex: number - - placement: ToastPlacement - message: string - - onPress?: (helpers: ToastOnPressHelpers) => void - Icon?: React.FC -} - -export type ToastOptions = Omit diff --git a/src/lib/Components/TouchableRow.tsx b/src/lib/Components/TouchableRow.tsx index 5ff95be488e..581c7e60584 100644 --- a/src/lib/Components/TouchableRow.tsx +++ b/src/lib/Components/TouchableRow.tsx @@ -1,13 +1,10 @@ -import { Touchable, TouchableProps, useColor } from "palette" +import { color, Touchable, TouchableProps } from "palette" import React from "react" export type TouchableRowProps = TouchableProps -export const TouchableRow: React.FC = ({ children, ...rest }) => { - const color = useColor() - return ( - - {children} - - ) -} +export const TouchableRow: React.FC = ({ children, ...rest }) => ( + + {children} + +) diff --git a/src/lib/Components/WorksForYou/Notification.tsx b/src/lib/Components/WorksForYou/Notification.tsx index 5c70889c8d7..2716515076e 100644 --- a/src/lib/Components/WorksForYou/Notification.tsx +++ b/src/lib/Components/WorksForYou/Notification.tsx @@ -8,7 +8,7 @@ import GenericGrid from "../ArtworkGrids/GenericGrid" import { Notification_notification } from "__generated__/Notification_notification.graphql" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { ClassTheme, Sans } from "palette" +import { color, Sans } from "palette" interface Props { // Special notifications will pass down an artistHref. Otherwise, grab it from the artworks. @@ -37,28 +37,24 @@ export class Notification extends React.Component { } return ( - - {({ color }) => ( - - - - {!!notification.image && ( - - )} - - {notification.artists} - - {notification.summary} - - - - - - + + + + {!!notification.image && ( + + )} + + {notification.artists} + + {notification.summary} + - )} - + + + + + ) } } diff --git a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx index c711b2be246..70bc403fbf9 100644 --- a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx +++ b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx @@ -15,7 +15,7 @@ it("renders without throwing an error for read notification", () => { renderWithLayout(, { width: 768 }) }) -fit("renders without throwing an error if no avatar image exists", () => { +it("renders without throwing an error if no avatar image exists", () => { const props = notification() // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 props.image.resized.url = null diff --git a/src/lib/Components/__tests__/ArtistListItem-tests.tsx b/src/lib/Components/__tests__/ArtistListItem-tests.tsx index fa7679bf2a1..5502c07ed7a 100644 --- a/src/lib/Components/__tests__/ArtistListItem-tests.tsx +++ b/src/lib/Components/__tests__/ArtistListItem-tests.tsx @@ -1,8 +1,9 @@ import { ArtistListItemTestsQuery } from "__generated__/ArtistListItemTestsQuery.graphql" -import { Touchable } from "palette" import React from "react" +import { TouchableWithoutFeedback } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment } from "relay-test-utils" +import { Touchable } from "../../../palette/elements/Touchable" import { mockEnvironmentPayload } from "../../tests/mockEnvironmentPayload" import { renderWithWrappers } from "../../tests/renderWithWrappers" import { ArtistListItemContainer, formatTombstoneText } from "../ArtistListItem" @@ -37,15 +38,15 @@ describe("ArtistListItem", () => { }) it("renders without feedback without throwing an error", () => { - const tree = renderWithWrappers().root + const tree = renderWithWrappers() mockEnvironmentPayload(mockEnvironment) - expect(tree.findByType(Touchable).props.noFeedback).toBe(true) + expect(tree.root.findAllByType(TouchableWithoutFeedback)).toHaveLength(2) }) it("renders with feedback without throwing an error", () => { - const tree = renderWithWrappers().root + const tree = renderWithWrappers() mockEnvironmentPayload(mockEnvironment) - expect(tree.findByType(Touchable).props.noFeedback).toBe(false) + expect(tree.root.findAllByType(Touchable)).toHaveLength(1) }) }) diff --git a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx index 09290a2506f..e62598700e0 100644 --- a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx +++ b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx @@ -226,7 +226,7 @@ describe(__webViewTestUtils__?.expandGoogleAdLink!, () => { }) it("expands google ad links with url params", () => { - const targetURL = "https://www.artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) + const targetURL = "https://artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) const googleURL = "https://googleads.g.doubleclick.net/pcs/click?" + stringify({ adurl: targetURL }) const expanded = __webViewTestUtils__?.expandGoogleAdLink(googleURL) diff --git a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx index 3123493283e..c338f793ae1 100644 --- a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx +++ b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Markdown } from "lib/Components/Markdown" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" @@ -14,11 +13,9 @@ describe("HoursCollapsible", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("Opening hours") @@ -26,11 +23,9 @@ describe("HoursCollapsible", () => { it("expands when pressed", () => { const comp = mount( - - - - - + + + ) comp.find(TouchableWithoutFeedback).props().onPress() @@ -44,11 +39,9 @@ describe("HoursCollapsible", () => { } const comp = mount( - - - - - + + + ) comp.find(TouchableWithoutFeedback).props().onPress() diff --git a/src/lib/Components/__tests__/ReadMore-tests.tsx b/src/lib/Components/__tests__/ReadMore-tests.tsx index ae7de0661cf..17b695b75aa 100644 --- a/src/lib/Components/__tests__/ReadMore-tests.tsx +++ b/src/lib/Components/__tests__/ReadMore-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, shallow } from "enzyme" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Sans, Serif, Text, Theme } from "palette" import React from "react" import { ReadMore } from "../ReadMore" @@ -32,11 +31,9 @@ describe("ReadMore", () => { it("Shows the 'Read more' link when the length of the text is > the number of characters allowed", () => { const component = mount( - - - - - + + + ) expect(component.find(Text).length).toEqual(2) @@ -54,15 +51,13 @@ describe("ReadMore", () => { it("truncates correctly if there are links within the text", () => { const component = mount( - - - - - + + + ) expect(component.find(Text).length).toEqual(2) @@ -82,11 +77,9 @@ describe("ReadMore", () => { it("opens links modally when specified", () => { const component = mount( - - - - - + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() @@ -96,11 +89,9 @@ describe("ReadMore", () => { it("doesn't open links modally when not specified", () => { const component = mount( - - - - - + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() diff --git a/src/lib/Icons/ChevronIcon.tsx b/src/lib/Icons/ChevronIcon.tsx index d113d744570..e54f034f1c1 100644 --- a/src/lib/Icons/ChevronIcon.tsx +++ b/src/lib/Icons/ChevronIcon.tsx @@ -1,4 +1,4 @@ -import { Color, useColor } from "palette" +import { color } from "palette" import React from "react" import Svg, { G, Path } from "react-native-svg" @@ -7,11 +7,10 @@ interface ChevronIconProps extends React.Props { initialDirection?: string width?: number height?: number - color?: Color + color?: string } const ChevronIcon: React.FC = (props) => { - const color = useColor() let rotation if (props.expanded) { rotation = "rotate(-90, 25, 25)" @@ -26,7 +25,7 @@ const ChevronIcon: React.FC = (props) => { @@ -37,6 +36,7 @@ const ChevronIcon: React.FC = (props) => { ChevronIcon.defaultProps = { height: 14, width: 14, + color: color("black30"), } export default ChevronIcon diff --git a/src/lib/Icons/Crosshair.tsx b/src/lib/Icons/Crosshair.tsx index 193a4e6f07c..0c4ba8143a5 100644 --- a/src/lib/Icons/Crosshair.tsx +++ b/src/lib/Icons/Crosshair.tsx @@ -1,22 +1,23 @@ -import { Color, useColor } from "palette" +import { color } from "palette" import React from "react" import Svg, { Circle, G, Path } from "react-native-svg" -const Crosshair: React.FC<{ color?: Color }> = (props) => { - const color = useColor() - return ( - - - - - - - ) +const Crosshair: React.FC<{ color?: string }> = (props) => ( + + + + + + +) + +Crosshair.defaultProps = { + color: color("black100"), } export default Crosshair diff --git a/src/lib/NativeModules/Events.tsx b/src/lib/NativeModules/Events.tsx index ffdb8df5d8b..ba6b0371d34 100644 --- a/src/lib/NativeModules/Events.tsx +++ b/src/lib/NativeModules/Events.tsx @@ -1,5 +1,16 @@ +import { addBreadcrumb } from "@sentry/react-native" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { getCurrentEmissionState } from "lib/store/GlobalStore" +import { TrackingProvider } from "lib/utils/track/providers" + +function postEvent(info: any) { + addBreadcrumb({ + message: `${JSON.stringify(info, null, 2)}`, + category: "analytics", + }) + + LegacyNativeModules.AREventsModule.postEvent(info) +} // Whether we have requested during the current session or not. let hasRequested = false @@ -21,3 +32,7 @@ export function userHadMeaningfulInteraction() { } } } + +export const NativeAnalyticsProvider: TrackingProvider = { + postEvent, +} diff --git a/src/lib/NativeModules/LegacyNativeModules.tsx b/src/lib/NativeModules/LegacyNativeModules.tsx index 78b815dae68..f085728e6da 100644 --- a/src/lib/NativeModules/LegacyNativeModules.tsx +++ b/src/lib/NativeModules/LegacyNativeModules.tsx @@ -80,6 +80,7 @@ interface LegacyNativeModules { triggerCameraModal(reactTag: number | null): Promise } AREventsModule: { + postEvent(info: any): void requestAppStoreRating(): void } } @@ -128,6 +129,8 @@ export const LegacyNativeModules: LegacyNativeModules = }, ARScreenPresenterModule, AREventsModule: { + // tslint:disable-next-line:no-empty + postEvent: () => {}, // this is not needed, we use segment RN. We will migrate ios to that too. requestAppStoreRating: noop("requestAppStoreRating"), }, } diff --git a/src/lib/Scenes/About/About.tsx b/src/lib/Scenes/About/About.tsx index 7a8c5096db2..1529b9d130e 100644 --- a/src/lib/Scenes/About/About.tsx +++ b/src/lib/Scenes/About/About.tsx @@ -3,14 +3,13 @@ import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { useToast } from "lib/Components/Toast/toastHook" import { navigate } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" -import { useColor } from "palette/hooks" +import { color } from "palette" import React, { useEffect, useState } from "react" import { ScrollView } from "react-native" import { getVersion } from "react-native-device-info" import useDebounce from "react-use/lib/useDebounce" export const About: React.FC = () => { - const color = useColor() const appVersion = getVersion() const toast = useToast() const [tapCount, updateTapCount] = useState(0) diff --git a/src/lib/Scenes/Artist/Artist.tsx b/src/lib/Scenes/Artist/Artist.tsx index 6245b0a406e..a500fc6c9d4 100644 --- a/src/lib/Scenes/Artist/Artist.tsx +++ b/src/lib/Scenes/Artist/Artist.tsx @@ -10,7 +10,7 @@ import { ArtistAboutContainer } from "lib/Components/Artist/ArtistAbout/ArtistAb import ArtistArtworks from "lib/Components/Artist/ArtistArtworks/ArtistArtworks" import { ArtistHeaderFragmentContainer } from "lib/Components/Artist/ArtistHeader" import { ArtistInsightsFragmentContainer } from "lib/Components/Artist/ArtistInsights/ArtistInsights" -import { DEFAULT_ARTWORK_SORT } from "lib/Components/ArtworkFilter/Filters/SortOptions" +import { DEFAULT_ARTWORK_SORT } from 'lib/Components/ArtworkFilter/Filters/SortOptions' import { getOnlyFilledSearchCriteriaValues } from "lib/Components/ArtworkFilter/SavedSearch/searchCriteriaHelpers" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { HeaderTabsGridPlaceholder } from "lib/Components/HeaderTabGridPlaceholder" diff --git a/src/lib/Scenes/Artist/SearchCriteria.tsx b/src/lib/Scenes/Artist/SearchCriteria.tsx index b051bd50705..573d2cb69e0 100644 --- a/src/lib/Scenes/Artist/SearchCriteria.tsx +++ b/src/lib/Scenes/Artist/SearchCriteria.tsx @@ -5,7 +5,6 @@ import { useFeatureFlag } from "lib/store/GlobalStore" import { ProvidePlaceholderContext } from "lib/utils/placeholders" import { isNull } from "lodash" import React from "react" -import { Platform } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { RelayModernEnvironment } from "relay-runtime/lib/store/RelayModernEnvironment" @@ -24,8 +23,7 @@ export interface SearchCriteriaQueryRendererProps { export const SearchCriteriaQueryRenderer: React.FC = (props) => { const { render, searchCriteriaId, environment = defaultEnvironment } = props const { renderComponent, renderPlaceholder } = render - const enableSavedSearch = - Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") + const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") if (enableSavedSearch && searchCriteriaId) { return ( diff --git a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx index 341fa79aeb4..ec2aff5c73d 100644 --- a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx +++ b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx @@ -1,5 +1,4 @@ import { SavedSearchBanner } from "lib/Components/Artist/ArtistArtworks/SavedSearchBanner" -import { SavedSearchButtonQueryRenderer } from 'lib/Components/Artist/ArtistArtworks/SavedSearchButton' import { CurrentOption } from "lib/Components/ArtworkFilter" import { PopoverMessage } from "lib/Components/PopoverMessage/PopoverMessage" import { __globalStoreTestUtils__ } from "lib/store/GlobalStore" @@ -124,19 +123,6 @@ describe("Saved search banner on artist screen", () => { expect(textInstances[0].props.children).toEqual("Sorry, an error occured") expect(textInstances[1].props.children).toEqual("Failed to get saved search criteria") }) - - it("should render new saved search component if AREnableSavedSearchV2 flag set to true", async () => { - __globalStoreTestUtils__?.injectFeatureFlags({ AREnableSavedSearchV2: true }) - - const tree = getTree() - - mockMostRecentOperation("ArtistAboveTheFoldQuery", MockArtistAboveTheFoldQuery) - - await flushPromiseQueue() - - expect(tree.root.findAllByType(SavedSearchButtonQueryRenderer)).toHaveLength(1) - expect(tree.root.findAllByType(SavedSearchBanner)).toHaveLength(0) - }) }) const MockSearchCriteriaQuery = { diff --git a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx index 7339934ad37..69c12f35dca 100644 --- a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx +++ b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, ScreenOwnerType, TappedArtistSeri import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { ArtistSeriesConnectionEdge } from "lib/Scenes/ArtistSeries/ArtistSeriesMoreSeries" -import { ArrowRightIcon, Flex, Sans, Touchable, useColor } from "palette" +import { ArrowRightIcon, color, Flex, Sans, Touchable } from "palette" import React from "react" import { useTracking } from "react-tracking" @@ -24,7 +24,6 @@ export const ArtistSeriesListItem: React.FC = ({ horizontalSlidePosition, listItem, }) => { - const color = useColor() const { trackEvent } = useTracking() const artworksCountMessage = listItem?.node?.artworksCountMessage diff --git a/src/lib/Scenes/Artwork/Artwork.tsx b/src/lib/Scenes/Artwork/Artwork.tsx index 9d46592ee38..0176dbc0491 100644 --- a/src/lib/Scenes/Artwork/Artwork.tsx +++ b/src/lib/Scenes/Artwork/Artwork.tsx @@ -20,7 +20,7 @@ import { import { QAInfoPanel } from "lib/utils/QAInfo" import { Schema, screenTrack } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Separator, Spacer, useSpace } from "palette" +import { Box, Separator, space, Spacer } from "palette" import React from "react" import { ActivityIndicator, FlatList, View } from "react-native" import { RefreshControl } from "react-native" @@ -525,7 +525,6 @@ export const ArtworkQueryRenderer: React.FC<{ } const AboveTheFoldPlaceholder: React.FC<{}> = ({}) => { - const space = useSpace() const screenDimensions = useScreenDimensions() // The logic for artworkHeight comes from the zeplin spec https://zpl.io/25JLX0Q const artworkHeight = screenDimensions.width >= 375 ? 340 : 290 diff --git a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx index fd6848ab605..ff86b52f2f7 100644 --- a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx +++ b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx @@ -10,7 +10,7 @@ import { BellFillIcon, BellIcon, Box, - ClassTheme, + color, EyeOpenedIcon, Flex, HeartFillIcon, @@ -107,26 +107,18 @@ export class ArtworkActions extends React.Component { this.handleArtworkSave()}> {is_saved ? : } - - {({ color }) => ( - - Watch lot - - )} - + + Watch lot + ) : ( this.handleArtworkSave()}> {is_saved ? : } - - {({ color }) => ( - - {is_saved ? "Saved" : "Save"} - - )} - + + {is_saved ? "Saved" : "Save"} + )} diff --git a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx index cfac0ba20a5..92ae037f2e3 100644 --- a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx +++ b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx @@ -4,7 +4,7 @@ import { AuctionTimerState } from "lib/Components/Bidding/Components/Timer" import { navigate } from "lib/navigation/navigate" import { bidderNeedsIdentityVerification } from "lib/utils/auction" import { Schema } from "lib/utils/track" -import { Button, ClassTheme, Sans } from "palette" +import { Button, color, Sans } from "palette" import React from "react" import { Text } from "react-native" import { createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -129,13 +129,9 @@ export class BidButton extends React.Component { return ( <> {isWatchOnly && ( - - {({ color }) => ( - - Registration closed - - )} - + + Registration closed + )} - + this.handleTap()}> + + {!!url && ( + + - - )} - + )} + + + + {partnerName} + + + {name} + + {!!exhibition_period && ( + + {exhibitionDates(exhibition_period, end_at! /* STRICTNESS_MIGRATION */)} + + )} + + + + + ) } } diff --git a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx index 7c944665f2d..fd52f464f26 100644 --- a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { RelayProp } from "react-relay" @@ -25,17 +24,15 @@ const data = [ describe("CityEvent", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("Gallery shows") diff --git a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx index 3bacf5be8c6..08384ad36b8 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx @@ -1,8 +1,7 @@ -import { themeGet } from "@styled-system/theme-get" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans, space } from "palette" import React, { Component } from "react" import { Dimensions, Image, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -49,7 +48,7 @@ export class FairEventSectionCard extends Component { } const BackgroundImage = styled(OpaqueImageView)` - background: ${themeGet("colors.black60")}; + background: ${color("black60")}; position: absolute; height: 100%; width: 100%; @@ -60,7 +59,7 @@ const Container = styled(Box)` height: 310; position: relative; overflow: hidden; - background: ${themeGet("colors.black60")}; + background: ${color("black60")}; ` // Set background color of overlay based on logo color @@ -75,6 +74,7 @@ const Logo = styled(Image)` width: 100; height: 100; background-color: transparent; - margin-bottom: ${themeGet("space.1")}px; + margin-bottom: ${space(1)}; + /* stylelint-disable */ tint-color: white; ` diff --git a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx index 041e112d407..1a77a6f14cc 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { FairEventSection } from "../index" @@ -22,11 +21,9 @@ const data = [ describe("FairEventSection", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("TEFAF New York Fall 2019") diff --git a/src/lib/Scenes/City/Components/FairEventSection/index.tsx b/src/lib/Scenes/City/Components/FairEventSection/index.tsx index b01da8b45c2..6a9d699870f 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/index.tsx @@ -1,7 +1,6 @@ -import { themeGet } from "@styled-system/theme-get" import { CaretButton } from "lib/Components/Buttons/CaretButton" import { navigate } from "lib/navigation/navigate" -import { Box, ClassTheme, Serif } from "palette" +import { Box, Serif, space } from "palette" import { Component } from "react" import React from "react" import { FlatList } from "react-native" @@ -10,7 +9,7 @@ import { FairEventSectionCard } from "./Components/FairEventSectionCard" const FairSectionBackground = styled(Box)` background: black; - margin-bottom: ${themeGet("space.1")}px; + margin-bottom: ${space(1)}; ` interface Props { @@ -38,33 +37,29 @@ export class FairEventSection extends Component { render() { const { data } = this.props return ( - - {({ space }) => ( - - - - Fairs - - - Boolean(fair.image))} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - contentContainerStyle={{ padding: space(2) }} - horizontal + + + + Fairs + + + Boolean(fair.image))} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + contentContainerStyle={{ padding: space(2) }} + horizontal + /> + {data.length > 2 && ( + + this.viewAllPressed()} + text={`View all ${data.length} fairs`} + textColor="white" /> - {data.length > 2 && ( - - this.viewAllPressed()} - text={`View all ${data.length} fairs`} - textColor="white" - /> - - )} - + )} - + ) } } diff --git a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx index 0f2f6e3c96c..314ba4a61c1 100644 --- a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx @@ -1,10 +1,9 @@ -import { themeGet } from "@styled-system/theme-get" import ChevronIcon from "lib/Icons/ChevronIcon" import PinSavedOff from "lib/Icons/PinSavedOff" import PinSavedOn from "lib/Icons/PinSavedOn" import { navigate } from "lib/navigation/navigate" import { Track, track as _track } from "lib/utils/track" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -37,7 +36,7 @@ export class SavedEventSection extends Component { {data.length > 1 ? data.length + " saved events" : data.length + " saved event"} - + ) @@ -74,5 +73,5 @@ export class SavedEventSection extends Component { const SavedBox = styled(Box)` border-radius: 2px; border-width: 1px; - border-color: ${themeGet("colors.black30")}; + border-color: ${color("black30")}; ` diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx index 512bfe264a0..bb43833cc16 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Fair } from "lib/Scenes/Map/types" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TabFairItemRow } from "../index" @@ -27,11 +26,9 @@ const fairData = ({ describe("TabFairItemRow", () => { it("renders Fair properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("TEFAF New York Spring 2019") diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx index d7370ceae42..a80c38d3e16 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx @@ -1,7 +1,7 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, ClassTheme, Flex, Sans } from "palette" +import { Box, Flex, Sans, space } from "palette" import React from "react" import { Dimensions, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -17,41 +17,33 @@ export class TabFairItemRow extends React.Component { render() { const { item } = this.props + const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) const fairImage = item.image ? item.image.url : null return ( - - {({ space }) => { - const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) - return ( - this.handleTap(item)}> - - - - - - {!!item.name && ( - - {item.name} - - )} - {!!item.counts && !!item.counts.partners && ( - - {item.counts.partners > 1 - ? `${item.counts.partners} Exhibitors` - : `${item.counts.partners} Exhibitor`} - - )} - {!!item.exhibition_period && ( - - {item.exhibition_period} - - )} - - - - ) - }} - + this.handleTap(item)}> + + + + + + {!!item.name && ( + + {item.name} + + )} + {!!item.counts && !!item.counts.partners && ( + + {item.counts.partners > 1 ? `${item.counts.partners} Exhibitors` : `${item.counts.partners} Exhibitor`} + + )} + {!!item.exhibition_period && ( + + {item.exhibition_period} + + )} + + + ) } } diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx index a6c946a841a..ef7488eb557 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx @@ -21,7 +21,6 @@ import { CollectionArtistSeriesRail, CollectionArtistSeriesRailContainer, } from "lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/CollectionArtistSeriesRail" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Sans, Theme } from "palette" import { useTracking } from "react-tracking" @@ -124,11 +123,9 @@ describe("Artist Series Rail", () => { it("renders the Trending Artists Series rail component", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesRail)).toHaveLength(1) @@ -136,11 +133,9 @@ describe("Artist Series Rail", () => { it("renders three artist series in the Trending Artists Series", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ArtworkImageContainer)).toHaveLength(3) @@ -148,11 +143,9 @@ describe("Artist Series Rail", () => { it("renders three images of the correct size in an artist series", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ImageView).at(0).props().imageURL).toBe( @@ -182,11 +175,9 @@ describe("Artist Series Rail", () => { it("renders the collection hub rail title", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(Sans).text()).toBe("Trending Artist Series") @@ -194,11 +185,9 @@ describe("Artist Series Rail", () => { it("renders each artist series' title", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesTitle).at(0).text()).toBe("Cindy Sherman: Untitled Film Stills") @@ -210,11 +199,9 @@ describe("Artist Series Rail", () => { it("renders each artist series' metadata", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesMeta).at(0).text()).toBe("From $20,000") @@ -226,11 +213,9 @@ describe("Artist Series Rail", () => { it("navigates to a new collection when a series is tapped", () => { const wrapper = mount( - - - - - + + + ) wrapper.find(CardRailCard).at(0).props().onPress() diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx index 3e8e00bd053..223041cbc21 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { FeaturedCollectionsRail_collection } from "__generated__/FeaturedCollectionsRail_collection.graphql" import { FeaturedCollectionsRail_collectionGroup } from "__generated__/FeaturedCollectionsRail_collectionGroup.graphql" import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" @@ -7,7 +6,7 @@ import { navigate } from "lib/navigation/navigate" import { defaultRules } from "lib/utils/renderMarkdown" import { renderMarkdown } from "lib/utils/renderMarkdown" import { Schema } from "lib/utils/track" -import { Flex, Sans, Spacer, Touchable, useColor } from "palette" +import { color, Flex, Sans, Spacer, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -21,7 +20,6 @@ interface FeaturedCollectionsRailProps { type FeaturedCollection = FeaturedCollectionsRail_collectionGroup["members"][0] export const FeaturedCollectionsRail: React.FC = (props) => { - const color = useColor() const tracking = useTracking() const { collection, collectionGroup } = props const collections = collectionGroup?.members ?? [] @@ -109,7 +107,7 @@ export const FeaturedCollectionsRail: React.FC = ( } export const ImageWrapper = styled(Flex)` - border: solid 1px ${themeGet("colors.black10")}; + border: solid 1px ${color("black10")}; height: 385px; width: 260px; border-radius: 5px; diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx index 0bbe596a1c8..5dd3bcd230c 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx @@ -1,19 +1,25 @@ import { OtherCollectionsRail_collectionGroup } from "__generated__/OtherCollectionsRail_collectionGroup.graphql" import { CardRailFlatList } from "lib/Components/Home/CardRailFlatList" import { navigate } from "lib/navigation/navigate" -import { Sans, SansProps, Spacer } from "palette" +import { Sans, Spacer } from "palette" import React, { useRef } from "react" import { TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" +import styled from "styled-components/native" export interface OtherCollectionsRailProps { collectionGroup: OtherCollectionsRail_collectionGroup } -export const CollectionGroupMemberPill: React.FC> = (props) => ( - // @ts-ignore - -) +export const CollectionGroupMemberPill = styled(Sans).attrs({ + px: 3, + py: 2, + size: "3t", + bg: "black10", +})` + overflow: hidden; + border-radius: 6px; +` export const OtherCollectionsRail: React.FC = ({ collectionGroup: { name, members } }) => { const ref = useRef(null) diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx index f3006056ab7..9b33f7339b9 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx @@ -15,7 +15,7 @@ describe("Other Collections Rail", () => { const { root } = renderWithWrappers() const { props: { children }, - } = root.findAllByType(Sans)[0] + } = root.findByType(Sans) expect(children).toContain("Browse by Movement") }) diff --git a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx index 1286e2b8437..b39c9af2d0d 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx @@ -1,6 +1,5 @@ import { FeaturedArtistsTestsQueryRawResponse } from "__generated__/FeaturedArtistsTestsQuery.graphql" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { postEventToProviders } from "lib/utils/track/providers" @@ -105,11 +104,9 @@ describe("FeaturedArtists", () => { const render = (collection: FeaturedArtistsTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - - - + + + )), query: graphql` query FeaturedArtistsTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx index 929ae82bc8a..070ac52ef82 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx @@ -1,5 +1,4 @@ import { FullFeaturedArtistListTestsQueryRawResponse } from "__generated__/FullFeaturedArtistListTestsQuery.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" @@ -13,11 +12,9 @@ describe("FullFeaturedArtistList", () => { const render = (collection: FullFeaturedArtistListTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - - - + + + )), query: graphql` query FullFeaturedArtistListTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx index e13f35af673..5f82cad3907 100644 --- a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx +++ b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx @@ -3,7 +3,6 @@ import { CollectionHeaderTestsQueryRawResponse } from "__generated__/CollectionH import { mount } from "enzyme" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { ReadMore } from "lib/Components/ReadMore" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Sans, Theme } from "palette" import React from "react" @@ -16,11 +15,9 @@ jest.unmock("react-relay") it("renders without throwing an error", async () => { await renderRelayTree({ Component: (props: any) => ( - - - - - + + + ), query: graphql` query CollectionHeaderTestsQuery @raw_response_type { @@ -43,22 +40,18 @@ describe("collection header", () => { it("passes the collection header image url to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("http://imageuploadedbymarketingteam.jpg") }) it("passes the collection header title to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(Sans).at(0).html()).toContain("Street Art Now") @@ -67,11 +60,9 @@ describe("collection header", () => { it("passes the url of the most marketable artwork in the collection to the collection header when there is no headerImage value present", () => { props.collection.headerImage = null const wrapper = mount( - - - - - + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("https://defaultmostmarketableartworkincollectionimage.jpg") }) @@ -79,22 +70,18 @@ describe("collection header", () => { it("does not render the Read More component when there is no description", () => { props.collection.descriptionMarkdown = null const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ReadMore).exists()).toBe(false) }) it("passes the collection header description to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ReadMore).exists()).toBe(true) diff --git a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx index 1d8afa876b8..130193e833f 100644 --- a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx +++ b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Touchable, useColor } from "palette" +import { color, Touchable } from "palette" import React from "react" import { Dimensions, FlatList, Image, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -17,7 +16,7 @@ const SelectedIndicator = styled.View` ` const Overlay = styled.View` - ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${themeGet("colors.black80")}`}; + ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${color("black80")}`}; ` export interface ImageData { @@ -66,7 +65,6 @@ const TakePhotoImage = (props: TakePhotoImageProps) => { } const ImageForURI = (props: ImagePreviewProps) => { - const color = useColor() const { width } = useScreenDimensions() const imageSize = (width - 60) / 2 diff --git a/src/lib/Scenes/Consignments/Components/SearchResults.tsx b/src/lib/Scenes/Consignments/Components/SearchResults.tsx index 20b50141cfb..43660b5e535 100644 --- a/src/lib/Scenes/Consignments/Components/SearchResults.tsx +++ b/src/lib/Scenes/Consignments/Components/SearchResults.tsx @@ -1,4 +1,4 @@ -import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, color, Flex, Sans, Spacer } from "palette" import React from "react" import { ScrollView, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -24,13 +24,9 @@ const noResults = (props: SearchQueryProps) => { return null } return ( - - {({ color }) => ( - - {props.noResultsMessage} {props.query} - - )} - + + {props.noResultsMessage} {props.query} + ) } diff --git a/src/lib/Scenes/Consignments/Components/TextArea.tsx b/src/lib/Scenes/Consignments/Components/TextArea.tsx index 240aab84966..08d44f65494 100644 --- a/src/lib/Scenes/Consignments/Components/TextArea.tsx +++ b/src/lib/Scenes/Consignments/Components/TextArea.tsx @@ -1,13 +1,13 @@ -import { themeGet } from "@styled-system/theme-get" import colors from "lib/data/colors" import fonts from "lib/data/fonts" +import { color } from "palette" import React from "react" import { Platform, TextInputProps, View, ViewProps } from "react-native" import styled from "styled-components/native" const Input = styled.TextInput` height: 100%; - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; font-family: "${fonts["unica77ll-regular"]}"; font-size: 16; ` diff --git a/src/lib/Scenes/Consignments/Components/TextInput.tsx b/src/lib/Scenes/Consignments/Components/TextInput.tsx index 6e0ee78dfbb..65c2066a0d5 100644 --- a/src/lib/Scenes/Consignments/Components/TextInput.tsx +++ b/src/lib/Scenes/Consignments/Components/TextInput.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { Fonts } from "lib/data/fonts" -import { Box, ClassTheme, useColor } from "palette" +import { Box, color } from "palette" import React, { FunctionComponent } from "react" import { ActivityIndicator, @@ -32,14 +31,13 @@ interface State { const Input = styled.TextInput` height: 40; - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; font-family: "${Fonts.Unica77LLRegular}"; font-size: 16; flex: 1; ` const Separator = (focused: boolean) => { - const color = useColor() return ( { ) } -const ReadOnlyInput = (props: TextInputProps) => { - const color = useColor() - return ( - - {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} - - ) -} +const ReadOnlyInput = (props: TextInputProps) => ( + + {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} + +) export default class TextInputField extends React.Component { inputRef: TextInput | null = null @@ -90,55 +85,49 @@ export default class TextInputField extends React.Component - {({ color }) => ( - - - { - // LocationIcon needs offset because the pin icon from pallete - // is centered on the pin's tip + + + { + // LocationIcon needs offset because the pin icon from pallete + // is centered on the pin's tip + } + {!!LocationIcon && ( + + + + )} + {!!this.props.preImage && } + {this.props.readonly ? ( + ReadOnlyInput(this.props) + ) : ( + (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} + autoCorrect={false} + clearButtonMode="while-editing" + keyboardAppearance="dark" + placeholderTextColor={color("black60")} + selectionColor={color("black60")} + {...this.props.text} + autoFocus={false} + onFocus={(e) => + this.setState( + { focused: true }, + () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) + ) + } + onBlur={(e) => + this.setState( + { focused: false }, + () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) + ) } - {!!LocationIcon && ( - - - - )} - {!!this.props.preImage && ( - - )} - {this.props.readonly ? ( - ReadOnlyInput(this.props) - ) : ( - (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} - autoCorrect={false} - clearButtonMode="while-editing" - keyboardAppearance="dark" - placeholderTextColor={color("black60")} - selectionColor={color("black60")} - {...this.props.text} - autoFocus={false} - onFocus={(e) => - this.setState( - { focused: true }, - () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) - ) - } - onBlur={(e) => - this.setState( - { focused: false }, - () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) - ) - } - /> - )} + /> + )} - {this.props.searching ? : null} - - {Separator(this.state.focused)} - - )} - + {this.props.searching ? : null} + + {Separator(this.state.focused)} + ) } } diff --git a/src/lib/Scenes/Consignments/Components/Toggle.tsx b/src/lib/Scenes/Consignments/Components/Toggle.tsx index b5b2631f69a..376e1751e4f 100644 --- a/src/lib/Scenes/Consignments/Components/Toggle.tsx +++ b/src/lib/Scenes/Consignments/Components/Toggle.tsx @@ -1,5 +1,5 @@ import fonts from "lib/data/fonts" -import { ClassTheme } from "palette" +import { color } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -63,21 +63,17 @@ const render = (props: ToggleProps) => { const Circle = WhiteCircle return ( - - {({ color }) => ( - - - - {selected ? props.left : ""} - {selected ? "" : props.right} - - - - - - - )} - + + + + {selected ? props.left : ""} + {selected ? "" : props.right} + + + + + + ) } diff --git a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx index 7e1e6779654..2b57fdb61dc 100644 --- a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx +++ b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx @@ -3,7 +3,7 @@ import Spinner from "lib/Components/Spinner" import { dismissModal, navigate } from "lib/navigation/navigate" import NavigatorIOS from "lib/utils/__legacy_do_not_use__navigator-ios-shim" import { Schema, screenTrack } from "lib/utils/track" -import { Box, Button, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, Button, color, Flex, Sans, Spacer } from "palette" import React from "react" import { Alert, BackHandler, NativeEventSubscription, View, ViewProps } from "react-native" import styled from "styled-components/native" @@ -98,66 +98,57 @@ export default class Confirmation extends React.Component { ) successContent = () => ( - - {({ color }) => ( - - - - Thank you for submitting your consignment - - - - Our team of specialists are reviewing your work. You'll receive an email update once the status of your - submission changes. - - - - If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. - - - - - - - - - - )} - + + + + Thank you for submitting your consignment + + + + Our team of specialists are reviewing your work. You'll receive an email update once the status of your + submission changes. + + + + If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. + + + + + + + + + ) - failedContent = () => ( - - {({ color }) => ( - - - - Submission failed - - - - We’re sorry, something went wrong. Please try submitting your consignment again. - - - - - - - - - - - - )} - + + + + Submission failed + + + + We’re sorry, something went wrong. Please try submitting your consignment again. + + + + + + + + + + + ) confirmationContent() { diff --git a/src/lib/Scenes/Consignments/Screens/Location.tsx b/src/lib/Scenes/Consignments/Screens/Location.tsx index e5a02f66578..92f409bfb0a 100644 --- a/src/lib/Scenes/Consignments/Screens/Location.tsx +++ b/src/lib/Scenes/Consignments/Screens/Location.tsx @@ -9,6 +9,7 @@ import { ConsignmentSetup, LocationResult } from "../index" import { stringify } from "qs" import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" +import { Theme } from "palette" import { Dimensions } from "react-native" import Config from "react-native-config" import { BottomAlignedButton } from "../Components/BottomAlignedButton" @@ -104,29 +105,31 @@ export default class Location extends React.Component { const isPad = Dimensions.get("window").width > 700 return ( - - Location - - - results={this.state.results} - query={this.state.query} - onChangeText={this.textChanged} - searching={this.state.searching} - resultSelected={this.locationSelected} - LocationIcon={LocationIcon} - placeholder="City, Country" - noResultsMessage="Could not find" - /> - - + + + Location + + + results={this.state.results} + query={this.state.query} + onChangeText={this.textChanged} + searching={this.state.searching} + resultSelected={this.locationSelected} + LocationIcon={LocationIcon} + placeholder="City, Country" + noResultsMessage="Could not find" + /> + + + ) } } diff --git a/src/lib/Scenes/Fair/Components/FairEditorial.tsx b/src/lib/Scenes/Fair/Components/FairEditorial.tsx index a9efc30d330..dbb4e94e9e1 100644 --- a/src/lib/Scenes/Fair/Components/FairEditorial.tsx +++ b/src/lib/Scenes/Fair/Components/FairEditorial.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, TappedArticleGroup } from "@artsy import { FairEditorial_fair } from "__generated__/FairEditorial_fair.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" -import { Box, BoxProps, Text, Touchable, useColor } from "palette" +import { Box, BoxProps, color, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -12,7 +12,6 @@ interface FairEditorialProps extends BoxProps { } export const FairEditorial: React.FC = ({ fair, ...rest }) => { - const color = useColor() const tracking = useTracking() const trackTappedArticle = (articleID: string, articleSlug: string) => { @@ -92,7 +91,7 @@ export const FairEditorialFragmentContainer = createFragmentContainer(FairEditor fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { diff --git a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx index 81121006186..76ef819eafc 100644 --- a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx +++ b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx @@ -1,4 +1,4 @@ -import { Box, Flex, Text, useColor } from "palette" +import { Box, color, Flex, Text } from "palette" import React, { Dispatch, SetStateAction } from "react" import { TouchableOpacity, View } from "react-native" @@ -43,7 +43,6 @@ interface TabsProps { * Renders a list of tabs. Evenly-spaces them across the screen. */ export const Tabs: React.FC = ({ setActiveTab, activeTab, tabs }) => { - const color = useColor() const tabWidth = 100 / tabs.length return ( = ({ fair, relay }) => { - const space = useSpace() const articles = fair.articlesConnection?.edges const totalCount = fair.articlesConnection?.totalCount ?? 0 const [isLoading, setIsLoading] = useState(false) @@ -161,7 +160,7 @@ export const FairArticlesPaginationContainer = createPaginationContainer( fair: graphql` fragment FairArticles_fair on Fair @argumentDefinitions(first: { type: "Int" }, after: { type: "String" }) { slug - articlesConnection(first: $first, after: $after, inEditorialFeed: true) @connection(key: "FairArticlesQuery_articlesConnection") { + articlesConnection(first: $first, after: $after) @connection(key: "FairArticlesQuery_articlesConnection") { totalCount edges { node { diff --git a/src/lib/Scenes/Favorites/FavoriteArtists.tsx b/src/lib/Scenes/Favorites/FavoriteArtists.tsx index f0a88499726..50db3fa9a19 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtists.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtists.tsx @@ -15,7 +15,7 @@ import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabP import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" -import { ClassTheme, Spacer } from "palette" +import { space, Spacer } from "palette" interface Props { me: FavoriteArtists_me @@ -83,24 +83,18 @@ class Artists extends React.Component { } return ( - - {({ space }) => ( - - } - style={{ paddingHorizontal: 0 }} - ItemSeparatorComponent={() => } - ListFooterComponent={ - this.state.fetchingMoreData ? : null - } - /> - )} - + } + style={{ paddingHorizontal: 0 }} + ItemSeparatorComponent={() => } + ListFooterComponent={ + this.state.fetchingMoreData ? : null + } + /> ) } } diff --git a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx index 130b10a9056..1ce854d84b0 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx @@ -14,7 +14,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, ClassTheme } from "palette" +import { Button, space } from "palette" interface Props { me: FavoriteArtworks_me @@ -96,19 +96,13 @@ export class SavedWorks extends Component { } return ( - - {({ space }) => ( - - } - > - - - )} - + } + > + + ) } } diff --git a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx index 7f3c69b37b3..d6a638af797 100644 --- a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx +++ b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx @@ -1,4 +1,4 @@ -import { ArtsyLogoIcon, Button, Flex, Text, useColor } from "palette" +import { ArtsyLogoIcon, Button, color, Flex, Text } from "palette" import React from "react" import { Linking, Platform } from "react-native" @@ -10,7 +10,6 @@ const PLAYSTORE_URL = "https://play.google.com/store/apps/details?id=net.artsy.a const APP_STORE_URL = "https://apps.apple.com/us/app/artsy-buy-sell-original-art/id703796080" export const ForceUpdate: React.FC = ({ forceUpdateMessage }) => { - const color = useColor() const handleUpdate = () => { const storeURL = Platform.OS === "android" ? PLAYSTORE_URL : APP_STORE_URL Linking.canOpenURL(storeURL).then( diff --git a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx index 820f4e5a85f..65543287024 100644 --- a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx +++ b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx @@ -1,4 +1,4 @@ -import { Flex, Sans, SansProps, Spinner, useColor } from "palette" +import { color, Flex, Sans, SansProps, Spinner } from "palette" import React, { FC, useState } from "react" import { Image, TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -45,7 +45,6 @@ const submitMutation = async (relayEnvironment: Environment) => { } export const EmailConfirmationBanner: React.FC = ({ me, relay }) => { - const color = useColor() const [shouldDisplayBanner, toggleVisible] = useState(me?.canRequestEmailConfirmation) const [isLoading, setLoading] = useState(false) const [confirmed, setConfirmed] = useState(false) diff --git a/src/lib/Scenes/Home/Components/HomeHero.tsx b/src/lib/Scenes/Home/Components/HomeHero.tsx index 8efd9ec71f2..2d8653003c7 100644 --- a/src/lib/Scenes/Home/Components/HomeHero.tsx +++ b/src/lib/Scenes/Home/Components/HomeHero.tsx @@ -3,7 +3,7 @@ import { HomeHero_homePage } from "__generated__/HomeHero_homePage.graphql" import { navigate } from "lib/navigation/navigate" import { isPad } from "lib/utils/hardware" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Sans, useColor } from "palette" +import { color, Flex, Sans } from "palette" import React, { useState } from "react" import { Image, TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -16,7 +16,6 @@ const useHeroDimensions = () => { } const HomeHero: React.FC<{ homePage: HomeHero_homePage }> = ({ homePage }) => { - const color = useColor() const tracking = useTracking() const [hasLoaded, setHasLoaded] = useState(false) const unit = homePage?.heroUnits?.[0] diff --git a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx index 6dbf4456144..d53e284569d 100644 --- a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx +++ b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx @@ -53,7 +53,7 @@ export const SaleArtworksHomeRail: React.FC = ({ me, relay, onShow, onHid navigate("/lots-by-artists-you-follow")} /> diff --git a/src/lib/Scenes/Home/Components/SalesRail.tsx b/src/lib/Scenes/Home/Components/SalesRail.tsx index d5285d20606..7af998c8cbb 100644 --- a/src/lib/Scenes/Home/Components/SalesRail.tsx +++ b/src/lib/Scenes/Home/Components/SalesRail.tsx @@ -1,3 +1,4 @@ +import { OwnerType } from "@artsy/cohesion" import { SalesRail_salesModule } from "__generated__/SalesRail_salesModule.graphql" import { CARD_RAIL_ARTWORKS_HEIGHT as ARTWORKS_HEIGHT, @@ -12,6 +13,8 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" import { formatDisplayTimelyAt } from "lib/Scenes/Sale/helpers" import { extractNodes } from "lib/utils/extractNodes" +import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" +import { screen } from "lib/utils/track/helpers" import { compact } from "lodash" import { bullet, Flex, Sans } from "palette" import React, { useImperativeHandle, useRef } from "react" @@ -46,75 +49,83 @@ const SalesRail: React.FC = (props) => { } return ( - - - { - tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) - navigate("/auctions") - }} - /> - - - listRef={listRef} - data={props.salesModule.results} - renderItem={({ item: result, index }) => { - // Sales are expected to always have >= 2 artworks, but we should - // still be cautious to avoid crashes if this assumption is broken. - const availableArtworkImageURLs = compact( - extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) - ) + + + + { + tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) + navigate("/auctions") + }} + /> + + + listRef={listRef} + data={props.salesModule.results} + renderItem={({ item: result, index }) => { + // Sales are expected to always have >= 2 artworks, but we should + // still be cautious to avoid crashes if this assumption is broken. + const availableArtworkImageURLs = compact( + extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) + ) - // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 - const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { - return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] - }, []) + // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 + const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { + return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] + }, []) - return ( - { - tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) - const url = result?.liveURLIfOpen ?? result?.href - if (url) { - navigate(url) - } - }} - > - - - - - - - - - - - - - {result?.name} - - - {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} - - - - - ) - }} - /> - + return ( + { + tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) + const url = result?.liveURLIfOpen ?? result?.href + if (url) { + navigate(url) + } + }} + > + + + + + + + + + + + + + {result?.name} + + + {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} + + + + + ) + }} + /> + + ) } diff --git a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx index d4e6bbd803c..c380b2b149e 100644 --- a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx +++ b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx @@ -48,7 +48,7 @@ describe("SaleArtworksHomeRail", () => { await flushPromiseQueue() expect(onShowMock).toHaveBeenCalled() - expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction Lots for You Ending Soon") + expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction lots for you ending soon") expect(tree.root.findAllByType(SaleArtworkTileRailCardContainer)).toHaveLength(PAGE_SIZE) }) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx index 74f99630375..79841fde1e0 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { Composer_conversation } from "__generated__/Composer_conversation.graphql" import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingView" import colors from "lib/data/colors" import { Schema, Track, track as _track } from "lib/utils/track" -import { Button, ClassTheme, Flex, themeProps } from "palette" +import { Button, color, Flex, themeProps } from "palette" import React from "react" import { Keyboard, TextInput, TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -19,7 +18,7 @@ const Container = styled.View` justify-content: space-between; align-items: flex-start; border-top-width: 1; - border-top-color: ${themeGet("colors.black10")}; + border-top-color: ${color("black10")}; padding: 10px; background-color: ${(p: ContainerProps) => (p.active ? "white" : colors["gray-light"])}; ` @@ -74,50 +73,45 @@ export default class Composer extends React.Component { render() { const disableSendButton = !(this.state.text && this.state.text.length) || this.props.disabled + // The TextInput loses its isFocused() callback as a styled component + const inputStyles = { + flex: 1, + fontSize: 13, + paddingLeft: 10, + paddingTop: 13, + paddingBottom: 10, + paddingRight: 10, + borderColor: this.state.active ? color("purple100") : "transparent", + borderWidth: 1, + fontFamily: themeProps.fontFamily.sans.regular.normal, + } + return ( - - {({ color }) => { - // The TextInput loses its isFocused() callback as a styled component - const inputStyles = { - flex: 1, - fontSize: 13, - paddingLeft: 10, - paddingTop: 13, - paddingBottom: 10, - paddingRight: 10, - borderColor: this.state.active ? color("purple100") : "transparent", - borderWidth: 1, - fontFamily: themeProps.fontFamily.sans.regular.normal, - } - return ( - - {this.props.children} - - - - this.setState({ active: false })} - onFocus={() => this.setState({ active: this.input.isFocused() })} - onChangeText={(text) => this.setState({ text })} - ref={(input) => (this.input = input)} - style={inputStyles} - multiline={true} - value={this.state.text || undefined} - /> - - - - - - - ) - }} - + + {this.props.children} + + + + this.setState({ active: false })} + onFocus={() => this.setState({ active: this.input.isFocused() })} + onChangeText={(text) => this.setState({ text })} + ref={(input) => (this.input = input)} + style={inputStyles} + multiline={true} + value={this.state.text || undefined} + /> + + + + + + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx index 942d50e445c..e2f61933038 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx @@ -9,7 +9,7 @@ import { Colors } from "lib/data/colors" import styled from "styled-components/native" import { ConversationSnippet_conversation } from "__generated__/ConversationSnippet_conversation.graphql" -import { ClassTheme, Flex, Sans, Touchable } from "palette" +import { color, Flex, Sans, Touchable } from "palette" const Unread = styled(Flex)` height: 14; @@ -89,57 +89,58 @@ export class ConversationSnippet extends React.Component { // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 const date = moment(conversation.lastMessageAt).fromNow(true) + " ago" return ( - - {({ color }) => ( - this.conversationSelected()} underlayColor={color("black5")}> - - - - {!!conversation.unread && ( - - - - )} - + this.conversationSelected()} underlayColor={color("black5")}> + + + + {!!conversation.unread && ( + + + + )} + + + + + + + {partnerName} + - - - - - {partnerName} - - - - - - {date} - - - - {!!conversationText && ( - - {conversationText} - - )} + + + + {date} + + {!!conversationText && ( + + {conversationText} + + )} - - )} - + + + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx index dbc6843bf52..b661fe19d04 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx @@ -16,7 +16,7 @@ import { extractNodes } from "lib/utils/extractNodes" import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import { ActionNames, ActionTypes } from "lib/utils/track/schema" -import { Flex, Sans, Separator, useColor } from "palette" +import { color, Flex, Sans, Separator } from "palette" import { useTracking } from "react-tracking" interface Props { @@ -31,7 +31,6 @@ type Item = NonNullable = (props) => { - const color = useColor() const [isLoading, setIsLoading] = React.useState(false) const [isFetching, setIsFetching] = React.useState(false) const { trackEvent } = useTracking() diff --git a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx index 31b5b619335..72d4f30a588 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { BorderBox, Flex, Text, Touchable, useColor } from "palette" +import { BorderBox, color, Flex, Text, Touchable } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -10,12 +9,11 @@ const UnavailableIndicator = styled(View)` height: 8px; width: 8px; border-radius: 4px; - background-color: ${themeGet("colors.red100")}; + background-color: ${color("red100")}; margin-right: 6px; ` export const RadioButton: React.FC<{ selected: boolean }> = (props) => { - const color = useColor() const { selected } = props return ( { message: Message_message showTimeSince?: boolean @@ -90,39 +95,25 @@ export class Message extends React.Component { render() { const { message, showTimeSince } = this.props const { isFromUser, body } = message + const backgroundColor = color(isFromUser ? "black100" : "black10") const textColor = isFromUser ? "white100" : "black100" const alignSelf = isFromUser ? "flex-end" : undefined const alignAttachments = isFromUser ? "flex-end" : "flex-start" return ( - - {({ color }) => { - const backgroundColor = color(isFromUser ? "black100" : "black10") - const linkStyle = { - color: color("purple100"), - textDecorationLine: "underline", - } - return ( - <> - - - - - {body} - - - - {!!message.attachments?.length && } - {this.renderAttachmentPreviews(message.attachments, backgroundColor)} - - {!!showTimeSince && } - - ) - }} - + <> + + + + + {body} + + + + {!!message.attachments?.length && } + {this.renderAttachmentPreviews(message.attachments, backgroundColor)} + + {showTimeSince && } + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx index 48bbdbc3d45..68ff97360a3 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx @@ -1,15 +1,12 @@ -import { IconProps, useColor } from "palette" +import { color, IconProps } from "palette" import React from "react" import Svg, { Path } from "react-native-svg" -export const OfferIcon: React.FC = (props) => { - const color = useColor() - return ( - - - - ) -} +export const OfferIcon: React.FC = (props) => ( + + + +) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx index cf325b8cba4..5ec06e9b5f5 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx @@ -5,20 +5,19 @@ import styled from "styled-components/native" import { ArtworkPreview_artwork } from "__generated__/ArtworkPreview_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { Colors } from "lib/data/colors" -import { Flex, Text, Touchable } from "palette" +import { color, Flex, Text, Touchable } from "palette" -import { themeGet } from "@styled-system/theme-get" import { Schema, Track, track as _track } from "lib/utils/track" const Container = styled.View` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx index 71a5942db7d..7cd4704783d 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx @@ -4,7 +4,7 @@ import { createFragmentContainer, graphql } from "react-relay" import styled from "styled-components/native" import { AttachmentPreview_attachment } from "__generated__/AttachmentPreview_attachment.graphql" -import { ClassTheme, Touchable } from "palette" +import { color, Touchable } from "palette" const Container = styled.View` flex-direction: column; @@ -26,16 +26,12 @@ export class AttachmentPreview extends React.Component { render() { const { attachment, children, onSelected } = this.props return ( - - {({ color }) => ( - onSelected?.(findNodeHandle(this)!, attachment.internalID)} - > - {children} - - )} - + onSelected?.(findNodeHandle(this)!, attachment.internalID)} + > + {children} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx index a0edca466da..471ec8b566f 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx @@ -14,7 +14,6 @@ export const NoBorderContainer = styled.View` flex: 1; flex-direction: row; ` - interface Props extends AttachmentProps { attachment: FileDownload_attachment tiny?: boolean diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx index 07dc39cb531..b30763b92ad 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx @@ -1,24 +1,25 @@ -import { Schema, Track, track as _track } from "lib/utils/track" -import { Flex, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" +import { Schema, Track, track as _track } from "lib/utils/track" + +import { color, Flex, Text, Touchable } from "palette" + import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import colors from "lib/data/colors" import styled from "styled-components/native" -import { themeGet } from "@styled-system/theme-get" import { ShowPreview_show } from "__generated__/ShowPreview_show.graphql" const Container = styled.View` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx index 9109885b1a9..848084fbfe1 100644 --- a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx +++ b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx @@ -108,7 +108,7 @@ export const ConversationDetailsFragmentContainer = createFragmentContainer(Conv `, }) -export const ConversationDetailsQueryRenderer: React.FC<{ +export const ConversationDetailsQueryRenderer: React.SFC<{ conversationID: string }> = ({ conversationID }) => { return ( diff --git a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx index f0c953a1977..e71a22496f2 100644 --- a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx +++ b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx @@ -1,7 +1,7 @@ import Spinner from "lib/Components/Spinner" import ChevronIcon from "lib/Icons/ChevronIcon" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" -import { Box, ClassTheme, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -32,47 +32,42 @@ export class CitySwitcherButton extends Component { render() { const { city, isLoading, sponsoredContentUrl } = this.props return isLoading || city ? ( - - {({ color }) => ( - { - if (this.props.onPress) { - this.props.onPress() - } - LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { - ...(sponsoredContentUrl && { sponsoredContentUrl }), - }) - }} - > - - {city ? ( - <> - - {city.name} - - - {/* @ts-ignore */} - - - - ) : ( - - - - )} - - - )} - + { + if (this.props.onPress) { + this.props.onPress() + } + LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { + ...(sponsoredContentUrl && { sponsoredContentUrl }), + }) + }} + > + + {city ? ( + <> + + {city.name} + + + + + + ) : ( + + + + )} + + ) : null } } diff --git a/src/lib/Scenes/Map/Components/ShowCard.tsx b/src/lib/Scenes/Map/Components/ShowCard.tsx index afcd7f7cf87..cec5de63032 100644 --- a/src/lib/Scenes/Map/Components/ShowCard.tsx +++ b/src/lib/Scenes/Map/Components/ShowCard.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { ShowItemRow } from "lib/Components/Lists/ShowItemRow" import { navigate } from "lib/navigation/navigate" import { TabFairItemRow } from "lib/Scenes/City/Components/TabFairItemRow" import { isEqual } from "lodash" -import { Box, ClassTheme, Sans } from "palette" +import { Box, color, Sans, space } from "palette" import React, { Component } from "react" import { Dimensions, FlatList, TouchableOpacity } from "react-native" import { RelayProp } from "react-relay" @@ -18,7 +17,7 @@ const shadowDetails: any = { } const Background = styled(Box)` - background: ${themeGet("colors.white100")}; + background: ${color("white100")}; height: 82; border-radius: 2px; ` @@ -36,9 +35,9 @@ interface ShowCardState { } const PageIndicator = styled(Box)` - height: ${themeGet("space.2")}px; - border-radius: ${themeGet("space.1")}px; - background: ${themeGet("colors.white100")}; + height: ${space(2)}px; + border-radius: ${space(1)}px; + background: ${color("white100")}; margin-left: 15px; margin-right: auto; margin-top: -15px; @@ -148,32 +147,28 @@ export class ShowCard extends Component { return hasOne ? ( show && this.renderItem({ item: show }, true) ) : ( - - {({ space }) => ( - <> - - {`${currentPage} of ${shows.length}`} - - (this.list = c as any)} - data={shows} - style={{ marginHorizontal: "auto" }} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - onScroll={this.onScroll} - showsHorizontalScrollIndicator={false} - snapToInterval={this.cardWidth + space(1)} - contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} - scrollEventThrottle={299} - directionalLockEnabled={true} - overScrollMode="always" - snapToAlignment="start" - decelerationRate="fast" - horizontal - /> - - )} - + <> + + {`${currentPage} of ${shows.length}`} + + (this.list = c as any)} + data={shows} + style={{ marginHorizontal: "auto" }} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + onScroll={this.onScroll} + showsHorizontalScrollIndicator={false} + snapToInterval={this.cardWidth + space(1)} + contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} + scrollEventThrottle={299} + directionalLockEnabled={true} + overScrollMode="always" + snapToAlignment="start" + decelerationRate="fast" + horizontal + /> + ) } } diff --git a/src/lib/Scenes/Map/Components/UserPositionButton.tsx b/src/lib/Scenes/Map/Components/UserPositionButton.tsx index 7c30823328e..dd2759009f7 100644 --- a/src/lib/Scenes/Map/Components/UserPositionButton.tsx +++ b/src/lib/Scenes/Map/Components/UserPositionButton.tsx @@ -1,5 +1,5 @@ import Crosshair from "lib/Icons/Crosshair" -import { Box, Flex } from "palette" +import { Box, color, Flex } from "palette" import React, { Component } from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -37,7 +37,7 @@ export class UserPositionButton extends Component { - + diff --git a/src/lib/Scenes/Map/GlobalMap.tsx b/src/lib/Scenes/Map/GlobalMap.tsx index 9c4d7f4c955..bb0852a34c7 100644 --- a/src/lib/Scenes/Map/GlobalMap.tsx +++ b/src/lib/Scenes/Map/GlobalMap.tsx @@ -10,7 +10,7 @@ import { convertCityToGeoJSON, fairToGeoCityFairs, showsToGeoCityShow } from "li import { extractNodes } from "lib/utils/extractNodes" import { Schema, screenTrack, track } from "lib/utils/track" import { get, isEqual, uniq } from "lodash" -import { Box, ClassTheme, Flex, Sans, Theme } from "palette" +import { Box, color, Flex, Sans, Theme } from "palette" import React from "react" import { Animated, Dimensions, Easing, Image, View } from "react-native" import Config from "react-native-config" @@ -376,22 +376,18 @@ export class GlobalMap extends React.Component { clusterLat && clusterLng && pointCount && ( - - {({ color }) => ( - - - - {pointCount} - - - - )} - + + + + {pointCount} + + + ) ) } diff --git a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx index 5cee135f906..99503f235bf 100644 --- a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx +++ b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import LoadingModal from "lib/Components/Modals/LoadingModal" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { goBack } from "lib/navigation/navigate" -import { Text } from "palette" +import { Sans } from "palette" import React, { useImperativeHandle, useRef, useState } from "react" import { Alert, @@ -26,14 +26,13 @@ export interface MyAccountFieldEditScreenProps { title: string canSave: boolean contentContainerStyle?: ViewStyle - isSaveButtonVisible?: boolean - onSave?(dismiss: () => void, alert: AlertStatic["alert"]): Promise | undefined + onSave(dismiss: () => void, alert: AlertStatic["alert"]): Promise } export const MyAccountFieldEditScreen = React.forwardRef< { scrollToEnd(): void }, React.PropsWithChildren ->(({ children, canSave, onSave, isSaveButtonVisible, title, contentContainerStyle }, ref) => { +>(({ children, canSave, onSave, title, contentContainerStyle }, ref) => { const [isSaving, setIsSaving] = useState(false) const afterLoadingAlert = useRef() const scrollViewRef = useRef(null) @@ -50,9 +49,7 @@ export const MyAccountFieldEditScreen = React.forwardRef< Keyboard.dismiss() try { setIsSaving(true) - if (!(isSaveButtonVisible === false) && onSave) { - await onSave(goBack, doTheAlert) - } + await onSave(goBack, doTheAlert) } catch (e) { console.error(e) } finally { @@ -80,20 +77,18 @@ export const MyAccountFieldEditScreen = React.forwardRef< - + Cancel - + } title={title} right={ - !(isSaveButtonVisible === false) && ( - - - Save - - - ) + + + Save + + } > = ({ children, title }) => ( - - {children} - -) +export const MyAccountFieldEditScreenPlaceholder: React.FC<{ title: string }> = ({ children, title }) => { + return ( + null}> + {children} + + ) +} diff --git a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx index 6bd73dfec3a..764e2f22aa7 100644 --- a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx +++ b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx @@ -5,7 +5,7 @@ import { navigate } from "lib/navigation/navigate" import { ScreenMargin } from "lib/Scenes/MyCollection/Components/ScreenMargin" import { Image } from "lib/Scenes/MyCollection/State/MyCollectionArtworkModel" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { ArtworkIcon, Flex, Spacer, Text, useColor } from "palette" +import { ArtworkIcon, color, Flex, Spacer, Text } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import { createRefetchContainer, graphql, RelayRefetchProp } from "react-relay" @@ -18,7 +18,6 @@ interface MyCollectionArtworkHeaderProps { } export const MyCollectionArtworkHeader: React.FC = (props) => { - const color = useColor() const { artwork: { artistNames, date, images, internalID, title, slug }, relay, diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx index a1f07e12165..4e70d336852 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx @@ -1,11 +1,10 @@ import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { useArtworkForm } from "lib/Scenes/MyCollection/Screens/ArtworkFormModal/Form/useArtworkForm" -import { Flex, Sans, Spacer, useSpace } from "palette" +import { Flex, Sans, space, Spacer } from "palette" import React, { useRef } from "react" export const Dimensions: React.FC = () => { - const space = useSpace() const { formik } = useArtworkForm() const metricInputRef = useRef>(null) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx index 5a104afb245..b61d2180672 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx @@ -8,7 +8,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, Flex, useColor, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, color, Flex, XCircleIcon } from "palette" import React from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" @@ -57,7 +57,6 @@ export const MyCollectionAddPhotos: React.FC = ({ imageSize }) => { - const color = useColor() const artworkActions = GlobalStore.actions.myCollection.artwork const { showActionSheetWithOptions } = useActionSheet() diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx index 5cae184343e..48843eaccf5 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx @@ -4,7 +4,7 @@ import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { TextArea } from "lib/Components/TextArea" -import { Flex, Join, Sans, Spacer, useSpace } from "palette" +import { Flex, Join, Sans, space, Spacer } from "palette" import React, { useRef, useState } from "react" import { ScrollView } from "react-native-gesture-handler" import { useArtworkForm } from "../Form/useArtworkForm" @@ -13,7 +13,6 @@ import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" export const MyCollectionAdditionalDetailsForm: React.FC<{ navigation: NavigationProp }> = ({ navigation, }) => { - const space = useSpace() const { formik } = useArtworkForm() const formikValues = formik?.values const [isEdition, setIsEdition] = useState(formikValues?.isEdition) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx index 6b4de573cc2..4e615576445 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx @@ -1,5 +1,4 @@ import { tappedCollectedArtwork } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { MyCollectionArtworkListItem_artwork } from "__generated__/MyCollectionArtworkListItem_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" @@ -7,7 +6,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { artworkMediumCategories } from "lib/utils/artworkMediumCategories" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { capitalize } from "lodash" -import { Box, Flex, Sans, useColor } from "palette" +import { Box, color, Flex, Sans } from "palette" import React from "react" import { Image as RNImage } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -19,7 +18,6 @@ interface MyCollectionArtworkListItemProps { } const MyCollectionArtworkListItem: React.FC = ({ artwork }) => { - const color = useColor() const { trackEvent } = useTracking() const imageURL = artwork.images?.find((i: any) => i?.isDefault)?.url || (artwork.images && artwork.images[0]?.url) const { width } = useScreenDimensions() @@ -122,7 +120,7 @@ export const MyCollectionArtworkListItemFragmentContainer = createFragmentContai }) const TouchElement = styled.TouchableHighlight.attrs({ - underlayColor: themeGet("colors.white100"), + underlayColor: color("white100"), activeOpacity: 0.8, })`` diff --git a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx index dc33900cd6f..e8e207ea386 100644 --- a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx +++ b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx @@ -114,9 +114,9 @@ describe(MyProfilePushNotificationsQueryRenderer, () => { // mockFetchNotificationPermissions.mockImplementationOnce(cb => cb(null, PushAuthorizationStatus.Denied)) // const tree = create( - // + // // - // + // // ) // expect(env.mock.getMostRecentOperation().request.node.operation.name).toBe("MyProfilePushNotificationsQuery") diff --git a/src/lib/Scenes/Onboarding/ForgotPassword.tsx b/src/lib/Scenes/Onboarding/ForgotPassword.tsx index b2637061c70..f14c52f3048 100644 --- a/src/lib/Scenes/Onboarding/ForgotPassword.tsx +++ b/src/lib/Scenes/Onboarding/ForgotPassword.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, Flex, Spacer, Text, useColor } from "palette" +import { Button, color, Flex, Spacer, Text } from "palette" import React, { useRef, useState } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -37,7 +37,6 @@ export const ForgotPasswordForm: React.FC = ({ dirty, isSubmitting, } = useFormikContext() - const color = useColor() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx index 01ef906dbda..ff3dbb762d8 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx @@ -5,7 +5,7 @@ import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore, useEnvironment } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, Flex, Spacer, Text, Touchable, useColor } from "palette" +import { Box, Button, color, Flex, Spacer, Text, Touchable } from "palette" import React, { useEffect, useRef, useState } from "react" import { Alert, Animated, Linking, ScrollView } from "react-native" import * as Yup from "yup" @@ -161,7 +161,6 @@ export const OnboardingCreateAccountScreenWrapper: React.FC { - const color = useColor() return ( {} export const OnboardingCreateAccountEmail: React.FC = ({ route }) => { - const color = useColor() const { values, handleChange, errors, setErrors, handleSubmit } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx index 1aa99b2fad8..2575644b9fe 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,7 +13,6 @@ export interface OnboardingCreateAccountNameProps extends StackScreenProps {} export const OnboardingCreateAccountName: React.FC = ({ navigation }) => { - const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx index ad24cab7eca..c2b239fbb0f 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,7 +13,6 @@ interface OnboardingCreateAccountPasswordProps extends StackScreenProps {} export const OnboardingCreateAccountPassword: React.FC = ({ navigation }) => { - const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx index 799a557bdb1..d6d0c0aaa03 100644 --- a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, Flex, Spacer, Text, useColor } from "palette" +import { Box, Button, color, Flex, Spacer, Text } from "palette" import React, { useEffect, useRef } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -24,7 +24,6 @@ export const loginSchema = Yup.object().shape({ }) export const OnboardingLoginForm: React.FC = ({ navigation, route }) => { - const color = useColor() const { values, handleSubmit, diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx index fdde67093d3..430b0642ea0 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx @@ -10,7 +10,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact, times } from "lodash" -import { Box, Button, Flex, Join, Spacer, Text, useColor, useSpace } from "palette" +import { Box, Button, color, Flex, Join, space, Spacer, Text } from "palette" import React, { useEffect, useRef, useState } from "react" import { FlatList, ScrollView, TouchableWithoutFeedback } from "react-native" import { SafeAreaView } from "react-native-safe-area-context" @@ -57,40 +57,36 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationLi relay: RelayRefetchProp } -const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => { - const color = useColor() - return ( - <> - - What artists do you collect? - - - Follow at least three artists you’re looking to collect or track so we can personalize your experience. - - - - - {/* Fake search Input */} - - - - - - - - - Search artists - - +const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => ( + <> + + What artists do you collect? + + + Follow at least three artists you’re looking to collect or track so we can personalize your experience. + + + + + {/* Fake search Input */} + + + + + - - - - ) -} + + + Search artists + + + + + + +) export const OnboardingPersonalizationList: React.FC = ({ ...props }) => { - const space = useSpace() const popularArtists = compact(props.highlights.popularArtists) const animatedOpacitiesRef = useRef<{ [key: string]: Disappearable | null }>({}) const { safeAreaInsets } = useScreenDimensions() diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx index 425b03b7abc..86aa5be32f9 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx @@ -6,7 +6,7 @@ import { OnboardingPersonalizationModal_artists } from "__generated__/Onboarding import { followArtistMutation } from "lib/Components/ArtistListItem" import { navigate } from "lib/navigation/navigate" import { Schema, track } from "lib/utils/track" -import { Button, ClassTheme, EntityHeader, Flex, Touchable } from "palette" +import { Button, color, EntityHeader, Flex, Touchable } from "palette" import React from "react" import { StyleProp, TouchableWithoutFeedback, ViewStyle } from "react-native" import { RelayPaginationProp } from "react-relay" @@ -125,43 +125,40 @@ export class OnboardingPersonalizationArtistListItem extends React.Component - {({ color }) => ( - { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - > - - - - - - - - - - )} - + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + useDefaultTouchable + > + + + + + + + + + ) } } diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx index 7fe1227038f..c0d986a7c6b 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx @@ -6,7 +6,7 @@ import { SearchInput } from "lib/Components/SearchInput" import { BackButton } from "lib/navigation/BackButton" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { isEqual } from "lodash" -import { Flex, Spinner, Text, useSpace } from "palette" +import { Flex, space, Spinner, Text } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList } from "react-native" import { createPaginationContainer, graphql, QueryRenderer, RelayPaginationProp } from "react-relay" @@ -26,7 +26,6 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationMo } const OnboardingPersonalizationModal: React.FC = (props) => { - const space = useSpace() const [query, setQuery] = useState("") const flatListRef = useRef>(null) const [fetchingMoreData, setFetchingMoreData] = useState(false) diff --git a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx index 1b1eac058eb..b514f6fd772 100644 --- a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx @@ -2,7 +2,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useAnimatedValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { ArtsyNativeModule } from "lib/NativeModules/ArtsyNativeModule" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Spacer, Text, Touchable, useTheme } from "palette" +import { color, Flex, space, Spacer, Text, Touchable } from "palette" import React, { useEffect } from "react" import { Dimensions, Image, Platform } from "react-native" import LinearGradient from "react-native-linear-gradient" @@ -18,7 +18,6 @@ const BUTTON_HEIGHT = 41 const imgProps = Image.resolveAssetSource(backgoundImage) export const OnboardingWelcome: React.FC = ({ navigation }) => { - const { color, space } = useTheme() const { width: screenWidth } = useScreenDimensions() const { safeAreaInsets } = useScreenDimensions() // useScreenDimensions() returns the window height instead of the screen diff --git a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx index 9f4c540b8a0..4dce2b650c0 100644 --- a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx +++ b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx @@ -1,5 +1,5 @@ import { OrderDetailsPayment_order } from "__generated__/OrderDetailsPayment_order.graphql" -import { Box, CreditCardIcon, Flex, Text, useSpace } from "palette" +import { Box, CreditCardIcon, Flex, space, Text } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" @@ -8,7 +8,6 @@ interface OrderDetailsPaymentProps { } const CreditCardDetails: React.FC = ({ order }) => { - const space = useSpace() const creditCard = order.creditCard || null return ( diff --git a/src/lib/Scenes/Partner/Components/PartnerMap.tsx b/src/lib/Scenes/Partner/Components/PartnerMap.tsx index 9d0317e6440..57a4c7cd3c5 100644 --- a/src/lib/Scenes/Partner/Components/PartnerMap.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerMap.tsx @@ -1,11 +1,10 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import MapboxGL from "@react-native-mapbox-gl/maps" -import { themeGet } from "@styled-system/theme-get" import { PartnerMap_location } from "__generated__/PartnerMap_location.graphql" import { cityAndPostalCode, tappedOnMap } from "lib/Components/LocationMap" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, Flex, Sans, Serif, Spacer } from "palette" +import { Box, color, Flex, Sans, Serif, Spacer } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -94,5 +93,5 @@ export const PartnerMapContainer = createFragmentContainer(PartnerMap, { const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` diff --git a/src/lib/Scenes/Partner/Components/PartnerShows.tsx b/src/lib/Scenes/Partner/Components/PartnerShows.tsx index 555e93a8ed7..84011d94dbb 100644 --- a/src/lib/Scenes/Partner/Components/PartnerShows.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerShows.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { useNativeValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { @@ -9,7 +8,7 @@ import { import { TabEmptyState } from "lib/Components/TabEmptyState" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, color, Flex, Sans, space, Spacer } from "palette" import React, { useContext, useState } from "react" import { ActivityIndicator, ImageBackground, TouchableWithoutFeedback, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" @@ -32,32 +31,26 @@ class ShowGridItem extends React.Component { render() { const { show, itemIndex } = this.props const showImageURL = show.coverImage && show.coverImage.url + const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } return ( - - {({ space }) => { - const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } - return ( - - - - {showImageURL ? ( - - ) : ( - - )} - - {show.name} - - {show.exhibitionPeriod} - - - - - - ) - }} - + + + + {showImageURL ? ( + + ) : ( + + )} + + {show.name} + + {show.exhibitionPeriod} + + + + + ) } } @@ -114,41 +107,37 @@ export const PartnerShows: React.FC<{ const tabIsActive = Boolean(useNativeValue(tabContext.tabIsActive, 0)) return ( - - {({ space }) => ( - - section.key.startsWith("chunk")) + 1} - windowSize={tabIsActive ? 5 : 1} - onEndReached={() => { - if (isLoadingMore || !relay.hasMore()) { - return - } - setIsLoadingMore(true) - relay.loadMore(PAGE_SIZE, (error) => { - if (error) { - // FIXME: Handle error - console.error("PartnerShows.tsx", error.message) - } - setIsLoadingMore(false) - }) - }} - refreshing={isLoadingMore} - contentContainerStyle={{ paddingTop: 20 }} - ListEmptyComponent={} - ListFooterComponent={ - - {isLoadingMore ? : null} - + + section.key.startsWith("chunk")) + 1} + windowSize={tabIsActive ? 5 : 1} + onEndReached={() => { + if (isLoadingMore || !relay.hasMore()) { + return + } + setIsLoadingMore(true) + relay.loadMore(PAGE_SIZE, (error) => { + if (error) { + // FIXME: Handle error + console.error("PartnerShows.tsx", error.message) } - /> - - )} - + setIsLoadingMore(false) + }) + }} + refreshing={isLoadingMore} + contentContainerStyle={{ paddingTop: 20 }} + ListEmptyComponent={} + ListFooterComponent={ + + {isLoadingMore ? : null} + + } + /> + ) } @@ -227,7 +216,7 @@ const GridItem = styled(Box)` const EmptyImage = styled(Box)` height: 120; - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; ` GridItem.displayName = "GridItem" diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx index 777a00961ef..3059c5b95d9 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx @@ -1,5 +1,4 @@ import { PartnerLocationSection_partner } from "__generated__/PartnerLocationSection_partner.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -24,11 +23,9 @@ describe("PartnerLoationSection", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx index 54b6b2b90fb..d5f9158ac80 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx @@ -1,6 +1,5 @@ import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { PartnerShowsTestsQueryRawResponse } from "__generated__/PartnerShowsTestsQuery.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { cloneDeep } from "lodash" import { Theme } from "palette" @@ -16,11 +15,9 @@ describe("PartnerShows", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx index fcec7667d50..78ddf037f09 100644 --- a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx +++ b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx @@ -1,5 +1,4 @@ import { OwnerType } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { SaleLotsList_saleArtworksConnection } from "__generated__/SaleLotsList_saleArtworksConnection.graphql" import { SaleLotsList_unfilteredSaleArtworksConnection } from "__generated__/SaleLotsList_unfilteredSaleArtworksConnection.graphql" import { @@ -13,7 +12,7 @@ import { ORDERED_SALE_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { Schema } from "lib/utils/track" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { useCallback, useEffect, useState } from "react" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" @@ -177,7 +176,7 @@ export const SaleLotsList: React.FC = ({ export const FilterTitle = styled(Sans)`` export const FilterDescription = styled(Sans)` - color: ${themeGet("colors.black60")}; + color: ${color("black60")}; ` export const SaleLotsListContainer = createPaginationContainer( diff --git a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx index 42dcaac35e1..5afaa8dfb73 100644 --- a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx +++ b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx @@ -6,7 +6,7 @@ import { View } from "react-native" export const SaleFAQ: React.FC<{}> = () => { const saleFAQUrl = `${useEnvironment().webURL}/auction-faq` - const paddingTop = useScreenDimensions().safeAreaInsets.top * 3 + const paddingTop = useScreenDimensions().safeAreaInsets.top return ( diff --git a/src/lib/Scenes/Sales/__tests__/index-tests.tsx b/src/lib/Scenes/Sales/__tests__/index-tests.tsx index f855420b523..65e41029cc7 100644 --- a/src/lib/Scenes/Sales/__tests__/index-tests.tsx +++ b/src/lib/Scenes/Sales/__tests__/index-tests.tsx @@ -5,7 +5,6 @@ import "react-native" import { renderWithLayout } from "lib/tests/renderWithLayout" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import { SalesFragmentContainer } from "../index" @@ -20,11 +19,9 @@ it("renders the ZeroState when there are no sales", () => { it("doesn't throw when rendered", () => { expect(() => renderWithLayout( - - - - - , + + + , { width: 1000 } ) ).not.toThrow() diff --git a/src/lib/Scenes/Sales/index.tsx b/src/lib/Scenes/Sales/index.tsx index 53c577ecf94..76735bce481 100644 --- a/src/lib/Scenes/Sales/index.tsx +++ b/src/lib/Scenes/Sales/index.tsx @@ -1,4 +1,3 @@ -import { OwnerType } from "@artsy/cohesion" import { Sales_me } from "__generated__/Sales_me.graphql" import { Sales_sales } from "__generated__/Sales_sales.graphql" import { SalesQueryRendererQuery } from "__generated__/SalesQueryRendererQuery.graphql" @@ -7,8 +6,6 @@ import { Stack } from "lib/Components/Stack" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" -import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" -import { screen } from "lib/utils/track/helpers" import React from "react" import { RefreshControl, ScrollView } from "react-native" import { createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" @@ -57,19 +54,17 @@ class Sales extends React.Component { const timedAuctions = sales.filter((a) => !a.live_start_at) return ( - - - } - > - - - - - - - - + + } + > + + + + + + + ) } } diff --git a/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx b/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx deleted file mode 100644 index 65180723bbb..00000000000 --- a/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Button, ButtonVariant } from "palette" -import React from "react" - -interface Props { - title: string - handleOnPress: () => void - disabled?: boolean - variant?: ButtonVariant - block?: boolean -} - -export const AddAddressButton: React.FC = (props) => { - const { handleOnPress, disabled, title, variant = "primaryBlack", block = true } = props - return ( - - ) -} diff --git a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx index d5a692fcf73..d1c69cb6407 100644 --- a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx +++ b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx @@ -1,47 +1,31 @@ -import { captureMessage } from "@sentry/react-native" -import { themeGet } from "@styled-system/theme-get" import { SavedAddresses_me } from "__generated__/SavedAddresses_me.graphql" import { SavedAddressesQuery } from "__generated__/SavedAddressesQuery.graphql" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" -import { navigate, navigationEvents } from "lib/navigation/navigate" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { PlaceholderText } from "lib/utils/placeholders" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { times } from "lodash" -import { Box, Flex, Separator, Spacer, Text, Touchable } from "palette" -import React, { useCallback, useEffect, useState } from "react" +import { Button, color, Flex, Separator, Spacer, Text, Touchable } from "palette" +import React, { useCallback, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { createRefetchContainer, QueryRenderer, RelayRefetchProp } from "react-relay" import { graphql } from "relay-runtime" import styled from "styled-components/native" -import { AddAddressButton } from "./Components/AddAddressButton" -import { deleteSavedAddress } from "./mutations/deleteSavedAddress" - -interface CardProps { - isDefault: boolean -} const Card = styled(Flex)` - border: 1px solid - ${(props: CardProps) => (props.isDefault ? themeGet("colors.black100") : themeGet("colors.black30"))}; + border: 1px solid ${color("black30")}; border-radius: 4; ` -// tslint:disable-next-line:variable-name -const NUM_ADDRESSES_TO_FETCH = 10 - -// tslint:disable-next-line:no-empty -export const util = { onRefresh: () => {} } - const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }> = ({ me, relay }) => { const [isRefreshing, setIsRefreshing] = useState(false) const addresses = extractNodes(me.addressConnection) - util.onRefresh = useCallback(() => { + const onRefresh = useCallback(() => { setIsRefreshing(true) relay.refetch( {}, - { first: NUM_ADDRESSES_TO_FETCH }, + null, () => { setIsRefreshing(false) }, @@ -49,34 +33,15 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp ) }, []) - useEffect(() => { - navigationEvents.addListener("goBack", util.onRefresh) - return () => { - navigationEvents.removeListener("goBack", util.onRefresh) - } - }, []) - - const onPressEditAddress = (addressId: string) => - navigate("/my-profile/saved-addresses/edit-address", { - modal: true, - passProps: { - addressId, - }, - }) + const onPressEditAddress = () => null - const onPressDeleteAddress = (addressId: string) => { - deleteSavedAddress( - addressId, - () => relay.refetch({}), - (message: string) => captureMessage(message) - ) - } + const onPressDeleteAddress = () => null return ( } - data={addresses.sort((a, b) => Number(b?.isDefault) - Number(a?.isDefault))} + refreshControl={} + data={addresses} keyExtractor={(address) => address.internalID} contentContainerStyle={{ paddingTop: addresses.length === 0 ? 10 : 40, @@ -84,62 +49,47 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }} renderItem={({ item }) => ( <> - - - - {item.name} - - - {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} - - - {item.city}, {item.postalCode} - - - - {item?.phoneNumber} - - - - - {!!item?.isDefault && Default Address} - - - onPressEditAddress(item.internalID)} - > - - Edit - - - onPressDeleteAddress(item.internalID)}> - - Delete - - - + + + {item.name} + + + {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} + + + {item.city}, {item.postalCode} + + + + {item?.phoneNumber} + + + + + + + + + {/* TODO next task add default address label here */} + {/* Default Address */} - - - + + + + Edit + + + + + Delete + + + + + )} - ListFooterComponent={ - addresses.length ? ( - - navigate("/my-profile/saved-addresses/new-address", { modal: true })} - title="Add New Address" - /> - - ) : ( - <> - ) - } ListEmptyComponent={ @@ -148,10 +98,9 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp Please add an address for a faster checkout experience in the future. - navigate("/my-profile/saved-addresses/new-address", { modal: true })} - title="Add New Address" - /> + } /> @@ -179,7 +128,7 @@ export const SavedAddressesContainer = createRefetchContainer( me: graphql` fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -188,12 +137,10 @@ export const SavedAddressesContainer = createRefetchContainer( addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } diff --git a/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx b/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx deleted file mode 100644 index 01ab5f1cd90..00000000000 --- a/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import { captureMessage } from "@sentry/react-native" -import { SavedAddressesForm_me } from "__generated__/SavedAddressesForm_me.graphql" -import { SavedAddressesFormQuery } from "__generated__/SavedAddressesFormQuery.graphql" -import { Action, action, computed, Computed, createComponentStore } from "easy-peasy" -import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" -import { CountrySelect } from "lib/Components/CountrySelect" -import { Input } from "lib/Components/Input/Input" -import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" -import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" -import { Stack } from "lib/Components/Stack" -import { goBack } from "lib/navigation/navigate" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { extractNodes } from "lib/utils/extractNodes" -import { PlaceholderBox, PlaceholderText } from "lib/utils/placeholders" -import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" -import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { times } from "lodash" -import { Flex, Text } from "palette" -import React, { useEffect, useRef, useState } from "react" -import { Alert } from "react-native" -import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" -import { MyAccountFieldEditScreen } from "../MyAccount/Components/MyAccountFieldEditScreen" -import { AddAddressButton } from "./Components/AddAddressButton" -import { createUserAddress } from "./mutations/addNewAddress" -import { setAsDefaultAddress } from "./mutations/setAsDefaultAddress" -import { updateUserAddress } from "./mutations/updateUserAddress" - -interface FormField { - value: Type | null - touched: boolean - required: boolean - isPresent: Computed - setValue: Action -} - -const emptyFieldState: () => FormField = () => ({ - value: null, - touched: false, - required: true, - isPresent: computed((self) => { - if (!self.required) { - return true - } else { - return self.value !== null && (typeof self.value !== "string" || !!self.value) - } - }), - setValue: action((state, payload) => { - state.value = payload - }), -}) - -interface FormFields { - addressLine1: FormField - addressLine2: FormField - city: FormField - country: FormField - name: FormField - postalCode: FormField - region: FormField -} - -interface Store { - fields: FormFields - allPresent: Computed -} - -const useStore = createComponentStore({ - fields: { - name: emptyFieldState(), - country: emptyFieldState(), - postalCode: emptyFieldState(), - addressLine1: emptyFieldState(), - addressLine2: { ...emptyFieldState(), required: false }, - city: emptyFieldState(), - region: emptyFieldState(), - }, - allPresent: computed((store) => { - return Boolean(Object.keys(store.fields).every((k) => store.fields[k as keyof FormFields].isPresent)) - }), -}) - -export const SavedAddressesForm: React.FC<{ me: SavedAddressesForm_me; addressId?: string }> = ({ me, addressId }) => { - const isEditForm = !!addressId - - const [state, actions] = useStore() - const [phoneNumber, setPhoneNumber] = useState(me?.phone) - const [isDefaultAddress, setIsDefaultAddress] = useState(false) - const { height } = useScreenDimensions() - const offSetTop = 0.75 - - useEffect(() => { - setPhoneNumber(me?.phone) - }, [me?.phone]) - - useEffect(() => { - if (isEditForm) { - const addresses = extractNodes(me.addressConnection) - const selectedAddress = addresses!.find((address) => address.internalID === addressId) - Object.keys(actions.fields).forEach((field) => { - const fieldValue = selectedAddress?.[field as keyof FormFields] ?? "" - actions.fields[field as keyof FormFields].setValue(fieldValue) - }) - setIsDefaultAddress(!!selectedAddress?.isDefault) - } - }, []) - - const screenRef = useRef(null) - - const submitAddAddress = async () => { - try { - const creatingResponse = await createUserAddress({ - name: state.fields.name.value!, - country: state.fields.country.value!, - postalCode: state.fields.postalCode.value, - addressLine1: state.fields.addressLine1.value!, - addressLine2: state.fields.addressLine2.value, - city: state.fields.city.value!, - region: state.fields.region.value, - phoneNumber, - }) - - if (isDefaultAddress) { - await setAsDefaultAddress(creatingResponse.createUserAddress?.userAddressOrErrors.internalID!) - } - goBack() - } catch (e) { - captureMessage(e.stack) - Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") - } - } - - const editUserAddress = async (userAddressID: string) => { - try { - const response = await updateUserAddress(userAddressID, { - name: state.fields.name.value!, - country: state.fields.country.value!, - postalCode: state.fields.postalCode.value, - addressLine1: state.fields.addressLine1.value!, - addressLine2: state.fields.addressLine2.value, - city: state.fields.city.value!, - region: state.fields.region.value, - phoneNumber, - }) - - if (isDefaultAddress) { - await setAsDefaultAddress(response.updateUserAddress?.userAddressOrErrors.internalID!) - } - goBack() - } catch (e) { - Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") - captureMessage(e.stack) - } - } - - return ( - - - - - - - - - - - { - setIsDefaultAddress(!isDefaultAddress) - }} - checked={isDefaultAddress} - mb={4} - > - Set as default - - - editUserAddress(addressId!) : submitAddAddress} - title={isEditForm ? "Add" : "Add Address"} - disabled={!state.allPresent} - /> - - - ) -} - -export const SavedAddressesFormContainer = createFragmentContainer(SavedAddressesForm, { - me: graphql` - fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - } - } - } - } - `, -}) - -export const SavedAddressesFormPlaceholder: React.FC<{ addressId?: string }> = (props) => { - return ( - - - {times(5).map((index: number) => ( - - - - - ))} - - - ) -} - -export const SavedAddressesFormQueryRenderer: React.FC<{}> = (props) => ( - - environment={defaultEnvironment} - query={graphql` - query SavedAddressesFormQuery { - me { - ...SavedAddressesForm_me - } - } - `} - render={renderWithPlaceholder({ - initialProps: props, - Container: SavedAddressesFormContainer, - renderPlaceholder: () => , - })} - variables={{}} - /> -) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx index 5ab48189055..722e83e3945 100644 --- a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx +++ b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx @@ -1,12 +1,11 @@ import { SavedAddressesTestsQuery } from "__generated__/SavedAddressesTestsQuery.graphql" -import { navigate, navigationEvents } from "lib/navigation/navigate" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Button, Flex } from "palette" +import { Flex } from "palette" import React from "react" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" -import { SavedAddressesContainer, SavedAddressesQueryRenderer, util } from "../SavedAddresses" +import { SavedAddressesContainer, SavedAddressesQueryRenderer } from "../SavedAddresses" jest.unmock("react-relay") @@ -110,80 +109,4 @@ describe(SavedAddressesQueryRenderer, () => { expect(text).toContain("Edit") expect(text).toContain("Delete") }) - - it("testing add new address navigation", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - name: "saver", - addressConnection: { - edges: [], - }, - }), - }) - return result - }) - tree.findByType(Button).props.onPress() - expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/new-address", { modal: true }) - }) - - it("should navigate to edit address screen", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - name: "saver", - addressConnection: { - edges: [ - { - node: { - id: "VXNlckFkZHJlc3M6NTg0MA==", - internalID: "5840", - name: "George Tester", - addressLine1: "Stallschreiberstr 21", - addressLine2: "apt 61, 1st Floor", - addressLine3: null, - city: "Berlin", - region: "Mitte", - postalCode: "10179", - phoneNumber: "015904832846", - }, - }, - { - node: { - id: "VXNlckFkZHJlc3M6NTg2MQ==", - internalID: "5861", - name: "George Testing", - addressLine1: "401 Brodway", - addressLine2: "26th Floor", - addressLine3: null, - city: "New York", - region: "New York", - postalCode: "NY 10013", - phoneNumber: "1293581028945", - }, - }, - ], - }, - }), - }) - return result - }) - - const EditButton = tree.findByProps({ testID: "EditAddress-5861" }) - - EditButton.props.onPress() - expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/edit-address", { - modal: true, - passProps: { addressId: "5861" }, - }) - }) - - it("handles return to prev view with goBack event", () => { - const mockCallback = jest.fn(util.onRefresh) - navigationEvents.addListener("goBack", mockCallback) - navigationEvents.emit("goBack") - expect(mockCallback.mock.calls.length).toBe(1) - }) }) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx deleted file mode 100644 index 0749eddecf9..00000000000 --- a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { SavedAddressesFormTestsQuery } from "__generated__/SavedAddressesFormTestsQuery.graphql" -import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" -import { Input } from "lib/Components/Input/Input" -import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" -import { extractText } from "lib/tests/extractText" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Button } from "palette" -import React from "react" -import { graphql, QueryRenderer } from "react-relay" -import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" -import { SavedAddressesFormContainer, SavedAddressesFormQueryRenderer } from "../SavedAddressesForm" - -jest.unmock("react-relay") - -describe(SavedAddressesFormQueryRenderer, () => { - let mockEnvironment: ReturnType - const TestRenderer = ({ addressId }: { addressId?: string }) => ( - - environment={mockEnvironment} - query={graphql` - query SavedAddressesFormTestsQuery { - me { - ...SavedAddressesForm_me - } - } - `} - render={({ props, error }) => { - if (props?.me) { - return - } else if (error) { - console.log(error) - } - }} - variables={{}} - /> - ) - beforeEach(() => { - mockEnvironment = createMockEnvironment() - }) - - it("render form screen", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - id: "some-id", - phone: "9379992", - addressConnection: { - edges: [], - }, - }), - }) - return result - }) - - expect(tree.findAllByType(Input).length).toEqual(7) - expect(tree.findAllByType(PhoneInput).length).toEqual(1) - expect(tree.findAllByType(Checkbox).length).toEqual(1) - expect(tree.findAllByType(Button).length).toEqual(1) - }) - - it("should display correct address data if it is Edit Address modal", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - id: "some-id", - phone: "9379992", - addressConnection: { - edges: [ - { - node: { - id: "VXNlckFkZHJlc3M6NTg2MQ==", - internalID: "5861", - name: "George Testing", - addressLine1: "401 Broadway", - addressLine2: "26th Floor", - addressLine3: null, - city: "New York", - region: "New York", - postalCode: "NY 10013", - phoneNumber: "1293581028945", - }, - }, - ], - }, - }), - }) - return result - }) - const text = extractText(tree) - - expect(text).toContain("Edit Address") - }) -}) diff --git a/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts deleted file mode 100644 index a0a56be4355..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - addNewAddressMutation, - addNewAddressMutationResponse, - UserAddressAttributes, -} from "__generated__/addNewAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const createUserAddress = (address: UserAddressAttributes) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - attributes: address, - }, - }, - mutation: graphql` - mutation addNewAddressMutation($input: CreateUserAddressInput!) { - createUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - addressLine1 - addressLine2 - city - country - isDefault - name - phoneNumber - postalCode - region - } - ... on Errors { - errors { - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.createUserAddress?.userAddressOrErrors.errors) { - reject(response.createUserAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts deleted file mode 100644 index cfe1f63921c..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { deleteSavedAddressDeleteUserAddressMutation } from "__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "relay-runtime" - -export const deleteSavedAddress = ( - userAddressID: string, - onSuccess: () => void, - onError: (message: string) => void -) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID, - }, - }, - mutation: graphql` - mutation deleteSavedAddressDeleteUserAddressMutation($input: DeleteUserAddressInput!) { - deleteUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - addressLine3 - city - region - postalCode - phoneNumber - isDefault - } - ... on Errors { - errors { - code - message - } - } - } - } - } - `, - onError: (e) => { - onError(e.message) - }, - onCompleted: (data) => { - const errors = data?.deleteUserAddress?.userAddressOrErrors.errors - if (errors) { - onError(errors.map((error) => error.message).join(", ")) - } else { - onSuccess() - } - }, - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts deleted file mode 100644 index 0f32d434e12..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - setAsDefaultAddressMutation, - setAsDefaultAddressMutationResponse, - UpdateUserDefaultAddressInput, -} from "__generated__/setAsDefaultAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const setAsDefaultAddress = (id: UpdateUserDefaultAddressInput["userAddressID"]) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID: id, - }, - }, - mutation: graphql` - mutation setAsDefaultAddressMutation($input: UpdateUserDefaultAddressInput!) { - updateUserDefaultAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - isDefault - } - ... on Errors { - errors { - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.updateUserDefaultAddress?.userAddressOrErrors.errors) { - reject(response.updateUserDefaultAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts deleted file mode 100644 index 2914ca38e1e..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { UserAddressAttributes } from "__generated__/addNewAddressMutation.graphql" -import { - updateUserAddressMutation, - updateUserAddressMutationResponse, -} from "__generated__/updateUserAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const updateUserAddress = (userAddressID: string, address: UserAddressAttributes) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID, - attributes: address, - }, - }, - mutation: graphql` - mutation updateUserAddressMutation($input: UpdateUserAddressInput!) { - updateUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - isDefault - phoneNumber - city - region - postalCode - country - } - ... on Errors { - errors { - code - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.updateUserAddress?.userAddressOrErrors.errors) { - reject(response.updateUserAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/Search/AutosuggestResults.tsx b/src/lib/Scenes/Search/AutosuggestResults.tsx index 4ca73eefa52..f30b22b064f 100644 --- a/src/lib/Scenes/Search/AutosuggestResults.tsx +++ b/src/lib/Scenes/Search/AutosuggestResults.tsx @@ -8,7 +8,7 @@ import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" import { isPad } from "lib/utils/hardware" -import { Flex, Text, useSpace } from "palette" +import { Flex, space, Text } from "palette" import { useCallback, useEffect, useMemo, useRef } from "react" import React from "react" import { FlatList } from "react-native" @@ -31,7 +31,6 @@ const AutosuggestResultsFlatList: React.FC<{ showResultType?: boolean onResultPress?: OnResultPress }> = ({ query, results: latestResults, relay, showResultType, onResultPress }) => { - const space = useSpace() const loadMore = useCallback(() => relay.loadMore(SUBSEQUENT_BATCH_SIZE), []) // We only want to load more results after the user has started scrolling, and unfortunately diff --git a/src/lib/Scenes/Search/CityGuideCTA.tsx b/src/lib/Scenes/Search/CityGuideCTA.tsx index 4009946fa7e..1fac5fda694 100644 --- a/src/lib/Scenes/Search/CityGuideCTA.tsx +++ b/src/lib/Scenes/Search/CityGuideCTA.tsx @@ -1,6 +1,6 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" -import { ClassTheme, Flex, Sans, Spacer } from "palette" +import { color, Flex, Sans, Spacer } from "palette" import React from "react" import { Image, TouchableOpacity } from "react-native" import { BMWSponsorship } from "../City/CityBMWSponsorship" @@ -9,28 +9,24 @@ export class CityGuideCTA extends React.Component { render() { const cityGuideMapImage = require("../../../../images/city-guide-bg.png") return ( - - {({ color }) => ( - - - navigate("/local-discovery")}> - - - - - City Guide - - - Browse fairs and shows in different cities - - - - - - + + + navigate("/local-discovery")}> + + + + + City Guide + + + Browse fairs and shows in different cities + + + + - )} - + + ) } } diff --git a/src/lib/Scenes/Search/Search.tsx b/src/lib/Scenes/Search/Search.tsx index 4f70df31d66..8e325aa3090 100644 --- a/src/lib/Scenes/Search/Search.tsx +++ b/src/lib/Scenes/Search/Search.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import { SearchInput } from "lib/Components/SearchInput" import { isPad } from "lib/utils/hardware" import { Schema } from "lib/utils/track" -import { Flex, Spacer, useColor } from "palette" +import { color, Flex, Spacer } from "palette" import React, { useState } from "react" import { Platform, ScrollView } from "react-native" import { useTracking } from "react-tracking" @@ -20,7 +20,6 @@ const placeholders = [ ] export const Search: React.FC = () => { - const color = useColor() const [query, setQuery] = useState("") const { trackEvent } = useTracking() const searchProviderValues = useSearchProviderValues(query) diff --git a/src/lib/Scenes/Search/SearchResult.tsx b/src/lib/Scenes/Search/SearchResult.tsx index c6b4bb4758f..f5c7ca30fb2 100644 --- a/src/lib/Scenes/Search/SearchResult.tsx +++ b/src/lib/Scenes/Search/SearchResult.tsx @@ -1,11 +1,10 @@ -import { themeGet } from "@styled-system/theme-get" import GraphemeSplitter from "grapheme-splitter" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { EntityType, navigate, navigateToEntity, navigateToPartner, SlugType } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" import { normalizeText } from "lib/utils/normalizeText" import { Schema } from "lib/utils/track" -import { ArtworkIcon, AuctionIcon, Box, CloseIcon, Flex, Sans, Spacer } from "palette" +import { ArtworkIcon, AuctionIcon, Box, CloseIcon, color, Flex, Sans, Spacer } from "palette" import React, { useContext } from "react" import { Pressable, Text, TouchableOpacity, View } from "react-native" import { useTracking } from "react-tracking" @@ -151,7 +150,7 @@ const QuickNavigationButton = styled(Flex)` justify-content: center; align-items: center; padding: 2px 10px; - border: 1px solid ${themeGet("colors.black30")}; + border: 1px solid ${color("black30")}; ` const splitter = new GraphemeSplitter() diff --git a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx index c7a3de56ba8..2a108ab0c9f 100644 --- a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx @@ -3,7 +3,6 @@ import { AutosuggestResultsQueryRawResponse } from "__generated__/AutosuggestRes import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { CatchErrors } from "lib/utils/CatchErrors" @@ -104,13 +103,11 @@ const inputBlurMock = jest.fn() const TestWrapper: typeof AutosuggestResults = (props) => ( - - - - - - - + + + + + ) diff --git a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx index c836c336ba0..124ca171140 100644 --- a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx @@ -76,15 +76,13 @@ const anniAlbers: RecentSearch = { const TestPage = () => { return ( - - - - - - - - - + + + + + + + ) } diff --git a/src/lib/Scenes/Search/__tests__/Search-tests.tsx b/src/lib/Scenes/Search/__tests__/Search-tests.tsx index 7901f2d82d8..d345b1798c2 100644 --- a/src/lib/Scenes/Search/__tests__/Search-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/Search-tests.tsx @@ -40,15 +40,13 @@ jest.mock("../RecentSearches", () => ({ const TestWrapper: typeof Search = (props) => { return ( - - - - - - - - - + + + + + + + ) } diff --git a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx index ac2cd7d009f..76e4b1c80ce 100644 --- a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx +++ b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx @@ -20,7 +20,7 @@ describe(VanityURLPossibleRedirect, () => { it("shows a loading spinner before anything has happened", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/test", + url: "https://artsy.net/test", }) const tree = renderWithWrappers() expect(tree.root.findAllByType(Spinner)).toHaveLength(1) @@ -29,13 +29,13 @@ describe(VanityURLPossibleRedirect, () => { it("sends a fetch request", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/test", + url: "https://artsy.net/test", }) renderWithWrappers() expect(fetchMock).toHaveBeenCalledTimes(1) expect(fetchMock.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "https://www.artsy.net/test", + "https://artsy.net/test", Object { "headers": Object { "X-Access-Token": "authenticationToken", @@ -59,11 +59,11 @@ describe(VanityURLPossibleRedirect, () => { it("calls `navigate` when the redirect points to a native view", async () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/artist/banksy", + url: "https://artsy.net/artist/banksy", }) renderWithWrappers() await flushPromiseQueue() - expect(navigate).toHaveBeenCalledWith("https://www.artsy.net/artist/banksy") + expect(navigate).toHaveBeenCalledWith("https://artsy.net/artist/banksy") }) describe("the error page", () => { @@ -86,7 +86,7 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-fail") + expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-fail") }) it("shows the error page if the response is not `ok`", async () => { @@ -96,19 +96,19 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-not-ok") + expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-not-ok") }) }) it("shows an internal web view when there is no redirect", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/no-redirect" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/no-redirect" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) }) it("shows an internal web view when there is a redirect to a page that is supposed to be shown in a web view", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/categories" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/categories" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) diff --git a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx index 5701d7a8126..776fc5dbdec 100644 --- a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx +++ b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { ViewingRoomViewWorksButton_viewingRoom } from "__generated__/ViewingRoomViewWorksButton_viewingRoom.graphql" import { AnimatedBottomButton } from "lib/Components/AnimatedBottomButton" import { navigate } from "lib/navigation/navigate" import { Schema } from "lib/utils/track" -import { Flex, Sans } from "palette" +import { color, Flex, Sans } from "palette" import React from "react" import { View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -50,7 +49,7 @@ export const ViewingRoomViewWorksButton: React.FC = (props) => { await Share.share({ title: viewingRoom.title, message: `${viewingRoom.title} by ${viewingRoom?.partner?.name} on Artsy`, - url: `https://www.artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, + url: `https://artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, }) } catch (error) { console.error("ViewingRoom.tsx", error) diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx index ace65b5f83b..f2e729a2736 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx @@ -7,7 +7,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" import { ProvideScreenTracking, Schema } from "lib/utils/track" -import { Box, Flex, Sans, Separator, Spinner, Text, useSpace } from "palette" +import { Box, Flex, Sans, Separator, space, Spinner, Text } from "palette" import { Touchable } from "palette" import React, { useMemo, useState } from "react" import { FlatList } from "react-native" @@ -26,7 +26,6 @@ interface ArtworkSection { } export const ViewingRoomArtworks: React.FC = (props) => { - const space = useSpace() const { viewingRoom, relay } = props const [isLoadingMore, setIsLoadingMore] = useState(false) const tracking = useTracking() diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx index a5d85e4c39a..ef7086e22a9 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx @@ -9,7 +9,7 @@ import { PlaceholderBox, PlaceholderText, ProvidePlaceholderContext } from "lib/ import { ProvideScreenTracking, Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import _ from "lodash" -import { Flex, Sans, Separator, Spacer, useSpace } from "palette" +import { Flex, Sans, Separator, space, Spacer } from "palette" import React, { useRef, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { ConnectionConfig } from "react-relay" @@ -48,7 +48,6 @@ interface ViewingRoomsListProps { } export const ViewingRoomsListContainer: React.FC = (props) => { - const space = useSpace() const [queryData, { isLoading, hasMore, loadMore, refetchConnection }] = usePagination(fragmentSpec, props.query) const viewingRooms = extractNodes(queryData.viewingRooms) diff --git a/src/lib/navigation/__tests__/routes-tests.tsx b/src/lib/navigation/__tests__/routes-tests.tsx index fbd92214263..93c9d3bce6a 100644 --- a/src/lib/navigation/__tests__/routes-tests.tsx +++ b/src/lib/navigation/__tests__/routes-tests.tsx @@ -12,7 +12,7 @@ describe("artsy.net routes", () => { expect(matchRoute("")).toEqual(expected) expect(matchRoute("//")).toEqual(expected) expect(matchRoute("https://www.artsy.net/")).toEqual(expected) - expect(matchRoute("https://www.artsy.net/")).toEqual(expected) + expect(matchRoute("https://artsy.net/")).toEqual(expected) expect(matchRoute("https://staging.artsy.net/")).toEqual(expected) }) @@ -84,7 +84,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://www.artsy.net/artist/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://artsy.net/artist/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artist", "params": Object { @@ -108,7 +108,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://www.artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { @@ -152,7 +152,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://www.artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artwork", "params": Object { @@ -161,7 +161,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute(encodeURIComponent(encodeURIComponent("https://www.artsy.net/artwork/more%26more")))) + expect(matchRoute(encodeURIComponent(encodeURIComponent("https://artsy.net/artwork/more%26more")))) .toMatchInlineSnapshot(` Object { "module": "Artwork", @@ -187,7 +187,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://www.artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { diff --git a/src/lib/navigation/navigate.ts b/src/lib/navigation/navigate.ts index 6b72c78bc40..dc04f6a61f5 100644 --- a/src/lib/navigation/navigate.ts +++ b/src/lib/navigation/navigate.ts @@ -95,7 +95,9 @@ export function dismissModal() { export function goBack() { LegacyNativeModules.ARScreenPresenterModule.goBack(unsafe__getSelectedTab()) - navigationEvents.emit("goBack") + if (Platform.OS === "android") { + navigationEvents.emit("goBack") + } } export function popParentViewController() { diff --git a/src/lib/navigation/routes.tsx b/src/lib/navigation/routes.tsx index 0de26afc149..15eceac38a2 100644 --- a/src/lib/navigation/routes.tsx +++ b/src/lib/navigation/routes.tsx @@ -131,7 +131,7 @@ function getDomainMap(): Record { new RouteMatcher("/artist/:artistID/artist-series", "FullArtistSeriesList"), webViewRoute("/artist/:artistID/articles"), new RouteMatcher("/artist/:artistID/*", "Artist"), - // For artists in a gallery context, like https://www.artsy.net/spruth-magers/artist/astrid-klein . Until we have a native + // For artists in a gallery context, like https://artsy.net/spruth-magers/artist/astrid-klein . Until we have a native // version of the gallery profile/context, we will use the normal native artist view instead of showing a web view. new RouteMatcher("/:profile_id_ignored/artist/:artistID", "Artist"), new RouteMatcher("/auction-registration/:saleID", "AuctionRegistration"), @@ -170,8 +170,6 @@ function getDomainMap(): Record { new RouteMatcher("/my-profile/payment/new-card", "MyProfilePaymentNewCreditCard"), new RouteMatcher("/my-profile/push-notifications", "MyProfilePushNotifications"), new RouteMatcher("/my-profile/saved-addresses", "SavedAddresses"), - new RouteMatcher("/my-profile/saved-addresses/new-address", "SavedAddressesForm"), - new RouteMatcher("/my-profile/saved-addresses/edit-address", "SavedAddressesForm"), new RouteMatcher("/local-discovery", "LocalDiscovery"), new RouteMatcher("/privacy-request", "PrivacyRequest"), @@ -222,9 +220,7 @@ function getDomainMap(): Record { unsafe_getFeatureFlag("AROptionsUseReactNativeWebView") ? webViewRoute("/orders/:orderID", { mimicBrowserBackButton: false }) : new RouteMatcher("/orders/:orderID", "Checkout"), - __DEV__ && new RouteMatcher("/storybook", "Storybook"), - // Every other route needs to go above new RouteMatcher("/:slug", "VanityURLEntity"), webViewRoute("/*"), ]) diff --git a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts index c69a644d5e5..f23ce498d2b 100644 --- a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts +++ b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts @@ -74,7 +74,7 @@ describe(errorMiddleware, () => { // @ts-ignore const relayResponse: RelayNetworkLayerResponse = { json: { - errors: [{ message: "Tests error" }], + errors: [{}], }, } diff --git a/src/lib/relay/middlewares/errorMiddleware.ts b/src/lib/relay/middlewares/errorMiddleware.ts index 34b02eb72d5..059fe84feb1 100644 --- a/src/lib/relay/middlewares/errorMiddleware.ts +++ b/src/lib/relay/middlewares/errorMiddleware.ts @@ -14,7 +14,7 @@ const isErrorStatus = (status: number | undefined) => { } const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { - const resJson = res?.json as GraphQLResponse + // const formattedError = formatGraphQLErrors(req, res.errors!) Sentry.withScope((scope) => { scope.setExtra("kind", req.operation.operationKind) scope.setExtra("query-name", req.operation.name) @@ -24,7 +24,7 @@ const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { scope.setExtra("variables", req.variables as any) } console.log(createRequestError(req, res)) - Sentry.captureException(resJson.errors && resJson.errors[0]?.message) + Sentry.captureException(req.operation.name) }) throw createRequestError(req, res) } diff --git a/src/lib/store/AuthModel.ts b/src/lib/store/AuthModel.ts index ec5a1d55ef9..5d059868fb9 100644 --- a/src/lib/store/AuthModel.ts +++ b/src/lib/store/AuthModel.ts @@ -4,10 +4,8 @@ import { action, Action, Computed, computed, StateMapper, thunk, Thunk, thunkOn, import { isArtsyEmail } from "lib/utils/general" import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { stringify } from "qs" -import { Alert, Linking, Platform } from "react-native" import Config from "react-native-config" import { AccessToken, GraphRequest, GraphRequestManager, LoginManager } from "react-native-fbsdk-next" -import PushNotification from "react-native-push-notification" import { getCurrentEmissionState } from "./GlobalStore" import type { GlobalStoreModel } from "./GlobalStoreModel" type BasicHttpMethod = "GET" | "PUT" | "POST" | "DELETE" @@ -267,29 +265,6 @@ export const getAuthModel = (): AuthModel => ({ }) actions.notifyTracking({ userId: id }) - if (Platform.OS === "android") { - PushNotification.checkPermissions((permissions) => { - if (!permissions.alert) { - // settimeout so alerts show when/immediately after page loads not before. - setTimeout(() => { - Alert.alert( - "Artsy Would Like to Send You Notifications", - "Turn on notifications to get important updates about artists you follow.", - [ - { - text: "Dismiss", - style: "cancel", - }, - { - text: "Settings", - onPress: () => Linking.openSettings(), - }, - ] - ) - }, 3000) - } - }) - } return true } diff --git a/src/lib/store/GlobalStoreModel.ts b/src/lib/store/GlobalStoreModel.ts index 724b6897cc5..077dc8f0093 100644 --- a/src/lib/store/GlobalStoreModel.ts +++ b/src/lib/store/GlobalStoreModel.ts @@ -14,7 +14,6 @@ import { unsafe__getEnvironment } from "./GlobalStore" import { CURRENT_APP_VERSION } from "./migration" import { getNativeModel, NativeModel } from "./NativeModel" import { assignDeep, sanitize } from "./persistence" -import { getToastModel, ToastModel } from "./ToastModel" interface GlobalStoreStateModel { version: number @@ -28,7 +27,6 @@ interface GlobalStoreStateModel { myCollection: MyCollectionModel config: ConfigModel auth: AuthModel - toast: ToastModel } export interface GlobalStoreModel extends GlobalStoreStateModel { rehydrate: Action>> @@ -92,7 +90,6 @@ export const getGlobalStoreModel = (): GlobalStoreModel => ({ myCollection: getMyCollectionModel(), config: getConfigModel(), auth: getAuthModel(), - toast: getToastModel(), // for testing only. noop otherwise. __inject: __TEST__ diff --git a/src/lib/store/NativeModel.ts b/src/lib/store/NativeModel.ts index c8fdd9fd8e4..a91ed1d40da 100644 --- a/src/lib/store/NativeModel.ts +++ b/src/lib/store/NativeModel.ts @@ -2,9 +2,7 @@ import { Action, action, Thunk, thunk } from "easy-peasy" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { NotificationsManager } from "lib/NativeModules/NotificationsManager" import { navigate, navigationEvents } from "lib/navigation/navigate" -import { InfoType } from "lib/utils/track/providers" -import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" -import { getCurrentEmissionState, GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" +import { GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" // These should match the values in emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m export type NativeEvent = @@ -23,14 +21,6 @@ export type NativeEvent = | { type: "MODAL_DISMISSED" } - | { - type: "EVENT_TRACKING" - payload: InfoType - } - | { - type: "IDENTIFY_TRACKING" - payload: InfoType - } export interface NativeState { userID: string @@ -64,31 +54,9 @@ export function listenToNativeEvents(cb: (event: NativeEvent) => void) { listenToNativeEvents((event: NativeEvent) => { switch (event.type) { - case "IDENTIFY_TRACKING": - // Segment should automatically stitch identify calls to existing user even if userid is null - SegmentTrackingProvider.identify ? SegmentTrackingProvider.identify(null, event.payload) : (() => undefined)() - return - case "EVENT_TRACKING": - SegmentTrackingProvider.postEvent(event.payload) - return case "STATE_CHANGED": - const newOnboardingFlow = unsafe_getFeatureFlag("AREnableNewOnboardingFlow") - if (!newOnboardingFlow) { - const prevState = getCurrentEmissionState() - const onboardingChanged = - prevState.onboardingState !== "complete" && event.payload.onboardingState === "complete" - const userIdChanged = !prevState.userID && event.payload.userID - if (onboardingChanged || userIdChanged) { - // weird ts-lint no-unused-expressions lint - SegmentTrackingProvider.identify - ? SegmentTrackingProvider.identify(event.payload.userID, { - is_temporary_user: !event.payload.userID ? 1 : 0, - }) - : (() => undefined)() - } - } GlobalStore.actions.native.setLocalState(event.payload) - if (!newOnboardingFlow && event.payload.userEmail !== null) { + if (!unsafe_getFeatureFlag("AREnableNewOnboardingFlow") && event.payload.userEmail !== null) { GlobalStore.actions.auth.setState({ userEmail: event.payload.userEmail }) } return diff --git a/src/lib/store/ToastModel.ts b/src/lib/store/ToastModel.ts deleted file mode 100644 index 9f1afb7cc47..00000000000 --- a/src/lib/store/ToastModel.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { action, Action } from "easy-peasy" -import { ToastDetails, ToastOptions, ToastPlacement } from "lib/Components/Toast/types" - -export interface ToastModel { - sessionState: { - nextId: number - toasts: Array> - } - - add: Action< - this, - { - message: string - placement: ToastPlacement - options?: ToastOptions - } - > - remove: Action - removeOldest: Action -} - -export const getToastModel = (): ToastModel => ({ - sessionState: { - nextId: 0, - toasts: [], - }, - - add: action((state, newToast) => { - state.sessionState.toasts.push({ - id: state.sessionState.nextId, - message: newToast.message, - placement: newToast.placement, - ...newToast.options, - }) - - state.sessionState.nextId += 1 - }), - remove: action((state, toastId) => { - state.sessionState.toasts = state.sessionState.toasts.filter((toast) => toast.id !== toastId) - }), - removeOldest: action((state) => { - state.sessionState.toasts.shift() - }), -}) diff --git a/src/lib/store/__tests__/migration-tests.ts b/src/lib/store/__tests__/migration-tests.ts index 68a03149432..9790576b2c4 100644 --- a/src/lib/store/__tests__/migration-tests.ts +++ b/src/lib/store/__tests__/migration-tests.ts @@ -277,20 +277,3 @@ describe("App version Versions.RenameUserEmail", () => { expect(migratedState.auth.userEmail).toEqual("user@ios.com") }) }) - -describe("App version Versions.AddToastModel", () => { - const migrationToTest = Versions.AddToastModel - it("adds session toast storage", () => { - const previousState = migrate({ - state: { version: 0 }, - toVersion: migrationToTest - 1, - }) as any - - const migratedState = migrate({ - state: previousState, - toVersion: migrationToTest, - }) as any - - expect(migratedState.toast).toEqual({}) - }) -}) diff --git a/src/lib/store/config/EnvironmentModel.tsx b/src/lib/store/config/EnvironmentModel.tsx index 7a6a4907092..6c487e6c036 100644 --- a/src/lib/store/config/EnvironmentModel.tsx +++ b/src/lib/store/config/EnvironmentModel.tsx @@ -49,7 +49,7 @@ export const environment = defineEnvironmentOptions({ presets: { local: "http://localhost:5000", staging: "https://staging.artsy.net", - production: "https://www.artsy.net", + production: "https://artsy.net", }, }, causalityURL: { diff --git a/src/lib/store/config/features.ts b/src/lib/store/config/features.ts index 7fe3c3c79a1..0930750190b 100644 --- a/src/lib/store/config/features.ts +++ b/src/lib/store/config/features.ts @@ -103,18 +103,10 @@ export const features = defineFeatures({ }, AREnableSavedSearch: { readyForRelease: true, - echoFlagKey: "AREnableSavedSearch", - description: "Enable Saved Search: iOS", - }, - AREnableSavedSearchAndroid: { - readyForRelease: false, - echoFlagKey: "AREnableSavedSearchAndroid", - description: "Enable Saved Search: Android", - showInAdminMenu: true, - }, - AREnableSavedSearchV2: { - readyForRelease: false, - description: "Enable Saved Search V2", + // TODO: after implementation of notifications for android we need to change the following line to + // echoFlagKey: "AREnableSavedSearch", + echoFlagKey: Platform.OS === "ios" ? "AREnableSavedSearch" : undefined, + description: "Enable Saved Search", showInAdminMenu: true, }, AREnableNewOnboardingFlow: { @@ -167,9 +159,6 @@ export const devToggles = defineDevToggles({ } }, }, - DTShowAnalyticsVisualiser: { - description: "Show analytics visualiser", - }, }) export const isDevToggle = (name: FeatureName | DevToggleName): name is DevToggleName => { diff --git a/src/lib/store/migration.ts b/src/lib/store/migration.ts index f419a0fbf49..c72cfdea0e6 100644 --- a/src/lib/store/migration.ts +++ b/src/lib/store/migration.ts @@ -21,10 +21,9 @@ export const Versions = { AddUserIsDev: 9, AddAuthOnboardingState: 10, RenameUserEmail: 11, - AddToastModel: 12, } -export const CURRENT_APP_VERSION = Versions.AddToastModel +export const CURRENT_APP_VERSION = Versions.RenameUserEmail export type Migrations = Record any> export const artsyAppMigrations: Migrations = { @@ -87,9 +86,6 @@ export const artsyAppMigrations: Migrations = { state.auth.userEmail = state.auth.userEmail ?? null delete state.auth.androidUserEmail }, - [Versions.AddToastModel]: (state) => { - state.toast = {} - }, } export function migrate({ diff --git a/src/lib/tests/renderRelayTree.tsx b/src/lib/tests/renderRelayTree.tsx index f6a42d9b13c..85c18f5a854 100644 --- a/src/lib/tests/renderRelayTree.tsx +++ b/src/lib/tests/renderRelayTree.tsx @@ -1,7 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, RenderUntilPredicate } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { Theme } from "palette" import React from "react" import { Variables } from "relay-runtime" import { LoadingTestID } from "../utils/renderWithLoadProgress" @@ -111,19 +109,15 @@ export function renderRelayTree

- - - - + ) return mount(wrapper ? wrapper(renderer) : renderer).renderUntil( renderUntilPredicate || RelayFinishedLoading diff --git a/src/lib/utils/AdminMenu.tsx b/src/lib/utils/AdminMenu.tsx index 120f5700965..3835231e81a 100644 --- a/src/lib/utils/AdminMenu.tsx +++ b/src/lib/utils/AdminMenu.tsx @@ -9,8 +9,7 @@ import { environment, EnvironmentKey } from "lib/store/config/EnvironmentModel" import { DevToggleName, devToggles, FeatureName, features } from "lib/store/config/features" import { GlobalStore } from "lib/store/GlobalStore" import { capitalize, compact, sortBy } from "lodash" -import { ChevronIcon, CloseIcon, Flex, ReloadIcon, Separator, Spacer, Text, useColor } from "palette" -import { DevTogglePaletteFlag } from "palette/PaletteFlag" +import { ChevronIcon, CloseIcon, color, Flex, ReloadIcon, Separator, Spacer, Text } from "palette" import React, { useEffect, useState } from "react" import { Alert, @@ -85,12 +84,6 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa navigate("/admin", { modal: true }) }} /> - { - navigate("/storybook") - }} - /> @@ -123,7 +116,6 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa {configurableDevToggleKeys.map((devToggleKey) => { return })} - void }> = ({ onClose }) => { - const color = useColor() const { env, adminOverrides, strings } = GlobalStore.useAppState((store) => store.config.environment) // show custom url options if there are already admin overrides in effect, or if the user has tapped the option // to set custom overrides during the lifetime of this component diff --git a/src/lib/utils/QAInfo.tsx b/src/lib/utils/QAInfo.tsx index d26404210a2..4ec81212449 100644 --- a/src/lib/utils/QAInfo.tsx +++ b/src/lib/utils/QAInfo.tsx @@ -1,7 +1,7 @@ import Clipboard from "@react-native-community/clipboard" import { useToast } from "lib/Components/Toast/toastHook" import { useDevToggle } from "lib/store/GlobalStore" -import { Flex, FlexProps, Text, Touchable, useColor } from "palette" +import { color, Flex, FlexProps, Text, Touchable } from "palette" import React from "react" export const QAInfoPanel: React.FC & { info: Array<[string, string]> }> = (props) => ( @@ -22,7 +22,6 @@ export const QAInfoManualPanel: React.FC = (props) => { } export const QAInfoRow: React.FC<{ name: string; value: string }> = ({ name, value }) => { - const color = useColor() const toast = useToast() return ( diff --git a/src/lib/utils/__tests__/renderMarkdown-tests.tsx b/src/lib/utils/__tests__/renderMarkdown-tests.tsx index eeb9f031545..26ffd729348 100644 --- a/src/lib/utils/__tests__/renderMarkdown-tests.tsx +++ b/src/lib/utils/__tests__/renderMarkdown-tests.tsx @@ -7,7 +7,6 @@ import { defaultRules, renderMarkdown } from "../renderMarkdown" import { readFileSync } from "fs" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { join } from "path" describe("renderMarkdown", () => { @@ -111,11 +110,9 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - - {componentList} - - + + {componentList} + ) expect(renderedComponent.find(LinkText).length).toEqual(2) @@ -146,11 +143,9 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - - {componentList} - - + + {componentList} + ) expect(renderedComponent.find(LinkText).length).toEqual(2) diff --git a/src/lib/utils/hideBackButtonOnScroll.tsx b/src/lib/utils/hideBackButtonOnScroll.tsx index 8397dbeff6c..c629e12271f 100644 --- a/src/lib/utils/hideBackButtonOnScroll.tsx +++ b/src/lib/utils/hideBackButtonOnScroll.tsx @@ -4,7 +4,7 @@ import { unsafe__getSelectedTab } from "lib/store/GlobalStore" import { useContext, useMemo } from "react" import { FlatListProps, Platform } from "react-native" -export const SCROLL_UP_TO_SHOW_THRESHOLD = 150 +const SCROLL_UP_TO_SHOW_THRESHOLD = 150 const SCROLL_DOWN_TO_HIDE_THRESHOLD = 50 type Direction = "up" | "down" | null diff --git a/src/lib/utils/placeholders.tsx b/src/lib/utils/placeholders.tsx index a74047f7f8e..b004da8aae9 100644 --- a/src/lib/utils/placeholders.tsx +++ b/src/lib/utils/placeholders.tsx @@ -1,5 +1,5 @@ import { GenericGridPlaceholder } from "lib/Components/ArtworkGrids/GenericGrid" -import { Flex, useColor } from "palette" +import { color, Flex } from "palette" import React, { useContext, useEffect, useMemo, useRef } from "react" import { View, ViewStyle } from "react-native" import Animated from "react-native-reanimated" @@ -34,7 +34,6 @@ export const ProvidePlaceholderContext: React.FC<{}> = ({ children }) => { } export const PlaceholderBox: React.FC = ({ children, ...styles }) => { - const color = useColor() const ctx = useContext(PlaceholderContext) if (!ctx) { throw new Error("You're using a Placeholder outside of a PlaceholderContext") diff --git a/src/lib/utils/renderMarkdown.tsx b/src/lib/utils/renderMarkdown.tsx index 9950b2b81bb..4e085aab18e 100644 --- a/src/lib/utils/renderMarkdown.tsx +++ b/src/lib/utils/renderMarkdown.tsx @@ -2,7 +2,7 @@ import { decode } from "html-entities" import { LinkText } from "lib/Components/Text/LinkText" import { navigate } from "lib/navigation/navigate" import _ from "lodash" -import { ClassTheme, Sans, Separator, Serif, Text } from "palette" +import { color, Sans, Separator, Serif, space, Text } from "palette" import React from "react" import { Text as RNText, View } from "react-native" import SimpleMarkdown, { ParserRule, ParserRules, ReactNodeOutput } from "simple-markdown" @@ -242,13 +242,9 @@ export function defaultRules({ }, blockQuote: { react: (node, output, state) => ( - - {({ color, space }) => ( - - {output(node.content, state)} - - )} - + + {output(node.content, state)} + ), }, hr: { diff --git a/src/lib/utils/track/SegmentTrackingProvider.ts b/src/lib/utils/track/SegmentTrackingProvider.ts index fd54c56f5c8..b63b632dff7 100644 --- a/src/lib/utils/track/SegmentTrackingProvider.ts +++ b/src/lib/utils/track/SegmentTrackingProvider.ts @@ -1,14 +1,8 @@ -import Clipboard from "@react-native-community/clipboard" import { Analytics } from "@segment/analytics-react-native" -import { addBreadcrumb } from "@sentry/react-native" -import { Toast } from "lib/Components/Toast/Toast" -import { unsafe_getDevToggle } from "lib/store/GlobalStore" import { Platform } from "react-native" import Config from "react-native-config" import { isCohesionScreen, TrackingProvider } from "./providers" -export const SEGMENT_TRACKING_PROVIDER = "SEGMENT_TRACKING_PROVIDER" - let analytics: Analytics.Client export const SegmentTrackingProvider: TrackingProvider = { setup: () => { @@ -16,35 +10,25 @@ export const SegmentTrackingProvider: TrackingProvider = { const Braze = require("@segment/analytics-react-native-appboy").default analytics - .setup( - Platform.select({ - ios: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_IOS : Config.SEGMENT_PRODUCTION_WRITE_KEY_IOS, - android: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, - default: "", - }), - { - using: [Braze], - } - ) + .setup(__DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, { + using: [Braze], + }) .then(() => console.log("Analytics is ready")) .catch((err) => console.error("Something went wrong", err)) }, identify: (userId, traits) => { + // temporary guard + if (Platform.OS !== "android") { + return + } + analytics.identify(userId, traits) }, postEvent: (info) => { - addBreadcrumb({ - message: `${JSON.stringify(info, null, 2)}`, - category: "analytics", - }) - - // Events bubbled up from ios native - if ("screen_name" in info) { - const { screen_name, ...rest } = info - visualize("Screen", screen_name, info) - analytics.screen(screen_name, rest as any) + // temporary guard + if (Platform.OS !== "android") { return } @@ -52,10 +36,8 @@ export const SegmentTrackingProvider: TrackingProvider = { const { action } = info if (isCohesionScreen(info)) { const { context_screen_owner_type } = info - visualize("Screen", context_screen_owner_type, info) analytics.screen(context_screen_owner_type, info as any) } else { - visualize("Track", action, info) analytics.track(action, info as any) } return @@ -63,61 +45,23 @@ export const SegmentTrackingProvider: TrackingProvider = { if ("action_type" in info) { const { action_type, ...rest } = info - visualize("Track", action_type, info) analytics.track(action_type, rest as any) return } if ("name" in info) { const { name, ...rest } = info - visualize("Track", name, info) analytics.track(name, rest as any) return } if ("context_screen" in info) { const { context_screen, ...rest } = info - visualize("Screen", context_screen, info) analytics.screen(context_screen, rest as any) return } - // default check events from ios native - if ("event_name" in info) { - const { event_name, ...rest } = info - visualize("Track", event_name, info) - analytics.track(event_name, rest as any) - return - } - console.warn("oh wow, we are not tracking this event!! we should!", { info }) assertNever(info) }, } - -const visualize = (type: string, name: string, info: { [key: string]: any }) => { - if (!unsafe_getDevToggle("DTShowAnalyticsVisualiser")) { - return - } - - const title = `${type}: ${name}` - const message = JSON.stringify(info, null, 2) - - Toast.show(title, "top", { - onPress: ({ showActionSheetWithOptions }) => { - showActionSheetWithOptions( - { - title, - message, - options: ["Copy description", "Continue"], - cancelButtonIndex: 1, - }, - (buttonIndex) => { - if (buttonIndex === 0) { - Clipboard.setString(message) - } - } - ) - }, - }) -} diff --git a/src/lib/utils/track/providers.tsx b/src/lib/utils/track/providers.tsx index e9e26f31a16..e30c76df92c 100644 --- a/src/lib/utils/track/providers.tsx +++ b/src/lib/utils/track/providers.tsx @@ -6,14 +6,6 @@ interface CohesionAction { // TODO: This can be removed once cohesion provides a global `Action` type. action: string } - -type NativeIOSTrackingEventID = - | { - // identifier for native ios events for tracking - screen_name: string - } - | { event_name: string } - export const isCohesionScreen = (info: CohesionAction | Screen): info is Screen => info.action === ActionType.screen interface LegacyNameAction { @@ -21,13 +13,7 @@ interface LegacyNameAction { name: string } -export type InfoType = - | Schema.PageView - | Schema.Entity - | CohesionAction - | Screen - | LegacyNameAction - | NativeIOSTrackingEventID +type InfoType = Schema.PageView | Schema.Entity | CohesionAction | Screen | LegacyNameAction export interface TrackingProvider { setup?: () => void diff --git a/src/palette/ClassTheme.tsx b/src/palette/ClassTheme.tsx deleted file mode 100644 index c0df1a33317..00000000000 --- a/src/palette/ClassTheme.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react" -import { Theme, useTheme } from "./Theme" - -export const ClassTheme = ({ - theme = "v2", - children, -}: { - theme?: "v2" | "v3" - children: React.ReactNode | ((helpers: ReturnType) => React.ReactNode) -}) => { - const hookStuff = useTheme() - return {typeof children === "function" ? children(hookStuff) : children} -} diff --git a/src/palette/PaletteFlag.tsx b/src/palette/PaletteFlag.tsx deleted file mode 100644 index ba15db3f7aa..00000000000 --- a/src/palette/PaletteFlag.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import AsyncStorage from "@react-native-community/async-storage" -import { MenuItem } from "lib/Components/MenuItem" -import { Text } from "palette" -import React from "react" -import { Alert } from "react-native" -import create from "zustand" -import { persist } from "zustand/middleware" - -interface PaletteFlagState { - allowV3: boolean - setAllowV3: (value: boolean) => void -} - -export const usePaletteFlagStore = create( - persist( - (set) => ({ - allowV3: __TEST__, - setAllowV3: (value) => set((_state) => ({ allowV3: value })), - }), - { name: "z-devtoggle-palette", getStorage: () => AsyncStorage } - ) -) - -export const DevTogglePaletteFlag = () => { - const currentValue = usePaletteFlagStore((state) => state.allowV3) - const setValue = usePaletteFlagStore((state) => state.setAllowV3) - - const description = "Allow Palette V3" - const valText = currentValue ? "Yes" : "No" - - return ( - { - Alert.alert(description, undefined, [ - { - text: currentValue ? "Keep turned ON" : "Turn ON", - onPress: () => setValue(true), - }, - { - text: currentValue ? "Turn OFF" : "Keep turned OFF", - onPress: () => setValue(false), - }, - ]) - }} - value={ - currentValue ? ( - - {valText} - - ) : ( - - {valText} - - ) - } - /> - ) -} diff --git a/src/palette/Theme.tsx b/src/palette/Theme.tsx index 0b5df0fb6da..0e10b7499a1 100644 --- a/src/palette/Theme.tsx +++ b/src/palette/Theme.tsx @@ -1,177 +1,28 @@ -import { THEME_V2, THEME_V3 } from "@artsy/palette-tokens" -import _ from "lodash" -import React, { useContext } from "react" -import { ThemeContext, ThemeProvider } from "styled-components/native" -import { TEXT_FONTS_V2, TEXT_FONTS_V3 } from "./elements/Text/tokens" -import { usePaletteFlagStore } from "./PaletteFlag" +import tokens from "@artsy/palette-tokens" +import React from "react" +import { TEXT_FONTS } from "./elements/Text/tokens" import { fontFamily } from "./platform/fonts/fontFamily" +import { ThemeProvider } from "./platform/primitives" /** * All of the config for the Artsy theming system, based on the * design system from our design team: * https://www.notion.so/artsy/Master-Library-810612339f474d0997fe359af4285c56 */ -export { SansSize, SerifSize, TypeSizes } from "@artsy/palette-tokens/dist/themes/v2" - -import { Color as ColorV2, SpacingUnit as SpacingUnitV2 } from "@artsy/palette-tokens/dist/themes/v2" -import { Color as ColorV3, SpacingUnit as SpacingUnitV3Numbers } from "@artsy/palette-tokens/dist/themes/v3" - -type SpacingUnitV3 = `${SpacingUnitV3Numbers}` -export type Color = ColorV2 | ColorV3 -export type SpacingUnit = SpacingUnitV2 | SpacingUnitV3 -export { ColorV2, ColorV3, SpacingUnitV2, SpacingUnitV3 } - -const { - breakpoints: _eigenDoesntCareAboutBreakpoints, - mediaQueries: _eigenDoesntCareAboutMediaQueries, - grid: _eigenDoesntCareAboutGrid, - space: spaceNumbers, - ...eigenUsefulTHEME_V3 -} = THEME_V3 - -// this function is converting the space values that come from palette-tokens -// from a string `"120px"` to a number `120`. -const fixSpaceUnitsV2 = ( - units: typeof THEME_V2.space -): { - 0.3: number - 0.5: number - 1: number - 1.5: number - 2: number - 3: number - 4: number - 5: number - 6: number - 9: number - 12: number - 18: number -} => { - let fixed = units - - fixed = _.mapValues(fixed, (stringValueWithPx) => { - const justStringValue = _.split(stringValueWithPx, "px")[0] - const numberValue = parseInt(justStringValue, 10) - return numberValue - }) as any - - return fixed as any +export * from "@artsy/palette-tokens" +export const themeProps = { + ...tokens, + fontFamily, + fonts: TEXT_FONTS, } -// this function is converting the space values that come from palette-tokens -// from a string `"120px"` to a number `120`, and the key values -// from a number `0.5` to a string `"0.5"`. -const fixSpaceUnitsV3 = ( - units: typeof spaceNumbers -): { - "0.5": number - "1": number - "2": number - "4": number - "6": number - "12": number -} => { - let fixed = units - - fixed = _.mapKeys(fixed, (_value, numberKey) => `${numberKey}`) as any - - fixed = _.mapValues(fixed, (stringValueWithPx) => { - const justStringValue = _.split(stringValueWithPx, "px")[0] - const numberValue = parseInt(justStringValue, 10) - return numberValue - }) as any - - return fixed as any -} - -const THEMES = { - v2: { ...THEME_V2, fontFamily, fonts: TEXT_FONTS_V2, space: fixSpaceUnitsV2(THEME_V2.space) }, - v3: { - ...eigenUsefulTHEME_V3, - fonts: TEXT_FONTS_V3, - space: fixSpaceUnitsV3(spaceNumbers), - }, // v3 removed `fontFamily`, `fontSizes`, `letterSpacings`, `lineHeights`, `typeSizes` +interface ThemeProps { + override?: { [key: string]: any } } -type ThemeV2Type = typeof THEMES.v2 -type ThemeV3Type = typeof THEMES.v3 -type ThemeType = ThemeV2Type | ThemeV3Type - /** - * Do not use this!! Use any the hooks instead! + * A wrapper component for passing down the Artsy theme context */ -export const themeProps = THEMES.v2 - -export const Theme: React.FC<{ - theme?: keyof typeof THEMES | ThemeType - override?: DeepPartial | DeepPartial -}> = ({ children, theme = "v2", override = {} }) => { - const allowV3 = usePaletteFlagStore((state) => state.allowV3) - - let actualTheme: ThemeType - if (_.isString(theme)) { - if (allowV3) { - actualTheme = THEMES[theme] - } else { - actualTheme = THEMES.v2 - } - } else { - actualTheme = theme - } - - return {children} +export const Theme: React.FC = (props) => { + return {props.children} } - -export const ThemeV2: React.FC = ({ children }) => {children} -export const ThemeV3: React.FC = ({ children }) => {children} - -interface ColorFuncOverload { - (colorNumber: undefined): undefined - (colorNumber: Color): string - (colorNumber: Color | undefined): string | undefined -} -const color = (theme: ThemeType): ColorFuncOverload => (colorName: any): any => - colorName === undefined - ? undefined - : isThemeV2(theme) - ? theme.colors[colorName as ColorV2] - : // @ts-ignore - theme.colors[colorName as ColorV3] - -const space = (theme: ThemeType) => (spaceName: SpacingUnitV2 | SpacingUnitV3): number => - isThemeV2(theme) - ? ((theme.space[spaceName as SpacingUnitV2] as unknown) as number) - : theme.space[spaceName as SpacingUnitV3] - -export const useTheme = () => { - const theme: ThemeType = useContext(ThemeContext) - - // if we are not wrapped in ``, if we dev, throw error. if we are in prod, just default to v2 to avoid a crash. - if (theme === undefined) { - if (__DEV__ || __TEST__) { - console.error( - "You are trying to use the `Theme` but you have not wrapped your component/screen with ``. Please wrap and try again." - ) - throw new Error("ThemeContext is not defined. Wrap your component with `` and try again.") - } else { - return { theme: THEMES.v2, color: color(THEMES.v2), space: space(THEMES.v2) } - } - } - - // if we are wrapped, then all good. - return { theme, color: color(theme), space: space(theme) } -} - -export const isThemeV2 = (theme: ThemeType): theme is ThemeV2Type => theme.id === "v2" -export const isThemeV3 = (theme: ThemeType): theme is ThemeV3Type => theme.id === "v3" - -/** - * Only use this if it's are absolutely neccessary. - */ -// tslint:disable-next-line:variable-name -export const _test_colorV2 = color(THEMES.v2) -/** - * Only use this if it's are absolutely neccessary. - */ -// tslint:disable-next-line:variable-name -export const _test_colorV3 = color(THEMES.v3) diff --git a/src/palette/elements/Avatar/Avatar.tsx b/src/palette/elements/Avatar/Avatar.tsx index e4311836ba3..72f8f1c4e30 100644 --- a/src/palette/elements/Avatar/Avatar.tsx +++ b/src/palette/elements/Avatar/Avatar.tsx @@ -1,8 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import React, { FunctionComponent, ImgHTMLAttributes } from "react" import { Image } from "react-native" -import styled from "styled-components/native" import { borderRadius } from "styled-system" +import { styledWrapper } from "../../platform/primitives" +import { color } from "../../Theme" import { Flex } from "../Flex" import { Text, TextFontSize } from "../Text" @@ -92,8 +92,8 @@ export const BaseAvatar = ({ src, initials, size = "md", renderAvatar }: BaseAva } /** InitialsHolder */ -export const InitialsHolder = styled(Flex)` - background-color: ${themeGet("colors.black10")}; +export const InitialsHolder = styledWrapper(Flex)` + background-color: ${color("black10")}; text-align: center; overflow: hidden; ${borderRadius} diff --git a/src/palette/elements/BorderBox/BorderBox.tsx b/src/palette/elements/BorderBox/BorderBox.tsx index c9a9018d5ca..8b4b4e1a535 100644 --- a/src/palette/elements/BorderBox/BorderBox.tsx +++ b/src/palette/elements/BorderBox/BorderBox.tsx @@ -1,8 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" -import styled from "styled-components/native" import { border, BorderProps, space as styledSpace, SpaceProps } from "styled-system" +import { styledWrapper } from "../../platform/primitives" +import { color, space } from "../../Theme" import { Flex, FlexProps } from "../Flex" export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { @@ -13,10 +13,10 @@ export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { * A `View` or `div` (depending on the platform) that has a common border * and padding set by default */ -export const BorderBox = styled(Flex)` - border: 1px solid ${themeGet("colors.black10")}; +export const BorderBox = styledWrapper(Flex)` + border: 1px solid ${color("black10")}; border-radius: 2px; - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ${border} ${styledSpace} ` diff --git a/src/palette/elements/Button/Button.stories.tsx b/src/palette/elements/Button/Button.stories.tsx deleted file mode 100644 index 9332fe230e1..00000000000 --- a/src/palette/elements/Button/Button.stories.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { action } from "@storybook/addon-actions" -import { storiesOf } from "@storybook/react-native" -import { Button, ButtonSize, ButtonVariant } from "palette" -import React from "react" -import { DList, List } from "storybook/helpers" - -const sizes: ButtonSize[] = ["small", "medium", "large"] - -const variants: ButtonVariant[] = [ - "primaryBlack", - "primaryWhite", - "secondaryGray", - "secondaryOutline", - "secondaryOutlineWarning", - "noOutline", -] - -storiesOf("Button", module) - .add("Sizes", () => ( - ( - - )} - /> - )) - .add("Variants", () => ( - ( - - )} - /> - )) - .add("States", () => ( - - - - - - )) diff --git a/src/palette/elements/Button/Button.test.tsx b/src/palette/elements/Button/Button.test.tsx index ebcaf731dde..80b9a1cde1c 100644 --- a/src/palette/elements/Button/Button.test.tsx +++ b/src/palette/elements/Button/Button.test.tsx @@ -8,11 +8,9 @@ describe("Button", () => { it("returns variants and sizes", () => { const getWrapper = (props) => { return mount( - - - - - + + + ) } @@ -45,11 +43,9 @@ describe("Button", () => { it("shows spinner if loading is true", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find("Spinner").length).toBe(1) expect(wrapper.html()).toContain('class="loading') @@ -59,13 +55,11 @@ describe("Button", () => { const onClickMock = jest.fn() const wrapper = mount( - - - - - + + + ) wrapper.find("Button").simulate("click") @@ -75,14 +69,12 @@ describe("Button", () => { it("passes the `disabled` prop down to the DOM element", () => { const wrapper = mount( - - - <> - - - - - + + <> + + + + ) expect(wrapper.find("button[disabled]")).toHaveLength(1) diff --git a/src/palette/elements/Button/Button.tsx b/src/palette/elements/Button/Button.tsx index e45cf7e3312..4c0c2c79530 100644 --- a/src/palette/elements/Button/Button.tsx +++ b/src/palette/elements/Button/Button.tsx @@ -1,4 +1,4 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React, { ReactNode, useState } from "react" import { GestureResponderEvent, TouchableWithoutFeedback } from "react-native" import Haptic, { HapticFeedbackTypes } from "react-native-haptic-feedback" @@ -19,28 +19,17 @@ export type ButtonVariant = | "secondaryOutline" | "secondaryOutlineWarning" | "noOutline" - /** Default button color variant */ export const defaultVariant: ButtonVariant = "primaryBlack" /** The size of the button */ export type ButtonSize = "small" | "medium" | "large" -/** Icon position */ -export type ButtonIconPosition = "left" | "right" - /** Default button size */ export const defaultSize: ButtonSize = "medium" -/** Default icon position */ -export const defaultIconPosition: ButtonIconPosition = "left" - export interface ButtonProps extends ButtonBaseProps { children: ReactNode - /** The icon component */ - icon?: ReactNode - /** Icon position */ - iconPosition?: ButtonIconPosition /** The size of the button */ size?: ButtonSize /** The theme of the button */ @@ -194,10 +183,8 @@ enum DisplayState { /** A button with various size and color settings */ export const Button: React.FC = (props) => { - const color = useColor() const size = props.size ?? defaultSize const variant = props.variant ?? defaultVariant - const iconPosition = props.iconPosition ?? defaultIconPosition const [previous, setPrevious] = useState(DisplayState.Enabled) const [current, setCurrent] = useState(DisplayState.Enabled) @@ -270,13 +257,12 @@ export const Button: React.FC = (props) => { props.onPress(event) } - const { children, loading, disabled, inline, longestText, style, icon, ...rest } = props + const { children, loading, disabled, inline, longestText, ...rest } = props const s = getSize() const variantColors = getColorsForVariant(variant, disabled) const from = variantColors[previous] const to = variantColors[current] - const iconBox = {icon} return ( @@ -304,18 +290,13 @@ export const Button: React.FC = (props) => { px={s.px} > - {iconPosition === "left" && iconBox} {children} - {iconPosition === "right" && iconBox} - - {icon} - - {longestText ? longestText : children} - - + + {longestText ? longestText : children} + {!!loading && } @@ -339,14 +320,10 @@ const VisibleTextContainer = styled(Box)` height: 100%; ` -const HiddenContainer = styled(Box)` - display: flex; - flex-direction: row; +const HiddenText = styled(Sans)` opacity: 0; ` -const LongestText = styled(Sans)`` - const Container = styled(Box)` align-items: center; justify-content: center; diff --git a/src/palette/elements/Cards/CardTag.tsx b/src/palette/elements/Cards/CardTag.tsx index 2f84839942d..03a727d383d 100644 --- a/src/palette/elements/Cards/CardTag.tsx +++ b/src/palette/elements/Cards/CardTag.tsx @@ -2,9 +2,10 @@ import React from "react" import { View } from "react-native" import { StyleProp, ViewStyle } from "react-native" import { PositionProps } from "styled-system" -import { useColor } from "../../hooks" + +import { Sans } from ".." +import { color } from "../../Theme" import { Color } from "../../Theme" -import { Sans } from "../Typography" export interface CardTagProps extends PositionProps { text: string @@ -18,7 +19,6 @@ export interface CardTagProps extends PositionProps { * `CardTag` is used for the Cards, and is controlled by their `tag` prop. */ export const CardTag: React.FC = ({ text, textColor, color: bgColor, borderColor, style }) => { - const color = useColor() return ( = ({ image, title, subtitle, tag }) => { - const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/MediumCard.tsx b/src/palette/elements/Cards/MediumCard.tsx index 714df5b76df..dc1369e74bd 100644 --- a/src/palette/elements/Cards/MediumCard.tsx +++ b/src/palette/elements/Cards/MediumCard.tsx @@ -1,11 +1,8 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" -import { useTheme } from "palette/Theme" +import { color, Flex, Sans, space, Spacer } from "palette" import React from "react" import LinearGradient from "react-native-linear-gradient" import { Box, BoxProps } from "../Box" -import { Flex } from "../Flex" -import { Spacer } from "../Spacer" -import { Sans } from "../Typography" import { CardTag, CardTagProps } from "./CardTag" export interface MediumCardProps extends BoxProps { @@ -20,7 +17,6 @@ export interface MediumCardProps extends BoxProps { * at the bottom. */ export const MediumCard: React.FC = ({ image, title, subtitle, tag, ...rest }) => { - const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/SmallCard.tsx b/src/palette/elements/Cards/SmallCard.tsx index 404eaea0e12..ce0a3f46e9b 100644 --- a/src/palette/elements/Cards/SmallCard.tsx +++ b/src/palette/elements/Cards/SmallCard.tsx @@ -1,9 +1,8 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" -import { useSpace } from "palette/hooks" import React from "react" -import { Box, BoxProps } from "../Box" -import { Spacer } from "../Spacer" -import { Text } from "../Text" +import { Box, Spacer, Text } from ".." +import { space } from "../../Theme" +import { BoxProps } from "../Box" import { CardTag, CardTagProps } from "./CardTag" export interface SmallCardProps extends BoxProps { @@ -19,7 +18,6 @@ export interface SmallCardProps extends BoxProps { * at the bottom. */ export const SmallCard: React.FC = ({ images, title, subtitle, tag, ...rest }) => { - const space = useSpace() return ( `` +export const Flex = styledWrapper(Box)`` Flex.defaultProps = { display: "flex", diff --git a/src/palette/elements/Message/Message.tsx b/src/palette/elements/Message/Message.tsx index b7c43f942ce..13dd9a74ff8 100644 --- a/src/palette/elements/Message/Message.tsx +++ b/src/palette/elements/Message/Message.tsx @@ -1,7 +1,6 @@ -import { themeGet } from "@styled-system/theme-get" import React from "react" -import styled from "styled-components/native" -import { useColor } from "../../hooks" +import { styledWrapper } from "../../platform/primitives" +import { color } from "../../Theme" import { SansSize } from "../../Theme" import { Flex, FlexProps } from "../Flex" import { Sans } from "../Typography" @@ -14,8 +13,8 @@ interface MessageProps extends FlexProps { textSize?: SansSize } -const StyledFlex = styled(Flex)` - background-color: ${themeGet("colors.black5")}; +const StyledFlex = styledWrapper(Flex)` + background-color: ${color("black5")}; border-radius: 2px; ` @@ -23,7 +22,6 @@ const StyledFlex = styled(Flex)` * A generic message window for displaying ZerStates, notices, errors, etc. */ export const Message: React.FC = ({ children, textSize = "3t", ...others }) => { - const color = useColor() return ( diff --git a/src/palette/elements/Radio/RadioDot.tsx b/src/palette/elements/Radio/RadioDot.tsx index 1b5ca300aa9..f0b9a50e374 100644 --- a/src/palette/elements/Radio/RadioDot.tsx +++ b/src/palette/elements/Radio/RadioDot.tsx @@ -1,4 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" +import { color } from "@artsy/palette-tokens" import React from "react" import styled, { css } from "styled-components/native" import { Box } from "../Box" @@ -7,55 +7,55 @@ const RADIO_DOT_MODES = { default: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, disabled: { resting: css` border: 2px solid; color: transparent; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, }, error: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.red100")}; + color: ${color("white100")}; + border-color: ${color("red100")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, hover: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, } @@ -119,7 +119,7 @@ const Dot = styled(Box)` } return css` - background-color: ${themeGet("colors.white100")}; + background-color: ${color("white100")}; ` }}; ` diff --git a/src/palette/elements/Separator/Separator.tsx b/src/palette/elements/Separator/Separator.tsx index 070c8bd5c46..44b98a471d5 100644 --- a/src/palette/elements/Separator/Separator.tsx +++ b/src/palette/elements/Separator/Separator.tsx @@ -1,16 +1,17 @@ -import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" -import styled from "styled-components/native" + import { border, BorderProps, space, SpaceProps, width, WidthProps } from "styled-system" +import { styled as primitives } from "../../platform/primitives" +import { color } from "../../Theme" export interface SeparatorProps extends SpaceProps, WidthProps, BorderProps {} /** * A horizontal divider whose width and spacing can be adjusted */ -export const Separator = styled.View` - border: 1px solid ${themeGet("colors.black10")}; +export const Separator = primitives.View` + border: 1px solid ${color("black10")}; border-bottom-width: 0; ${space}; ${width}; diff --git a/src/palette/elements/Spinner/Spinner.tsx b/src/palette/elements/Spinner/Spinner.tsx index 26acfd9b69d..248984757ce 100644 --- a/src/palette/elements/Spinner/Spinner.tsx +++ b/src/palette/elements/Spinner/Spinner.tsx @@ -1,8 +1,7 @@ -import { themeGet } from "@styled-system/theme-get" import React, { useEffect, useMemo } from "react" import { Animated, Easing, ViewProps } from "react-native" import styled from "styled-components/native" -import { Color } from "../../Theme" +import { Color, color as colorResolve } from "../../Theme" export interface SpinnerProps extends ViewProps { /** Delay before spinner appears */ @@ -96,10 +95,9 @@ const Bar = styled(Animated.View)` ${(props) => { const { width, height } = getSize(props) - const propColorString = `colors.${props.color}` return ` - background: ${themeGet(propColorString)}; + background: ${colorResolve(props.color)}; width: ${width}px; height: ${height}px; ` diff --git a/src/palette/elements/Text/Text.tsx b/src/palette/elements/Text/Text.tsx index 8594148c3ad..dee11967775 100644 --- a/src/palette/elements/Text/Text.tsx +++ b/src/palette/elements/Text/Text.tsx @@ -1,7 +1,6 @@ import { TEXT_LINE_HEIGHTS } from "@artsy/palette-tokens/dist/text" import React from "react" import { TextProps as RNTextProps } from "react-native" -import styled from "styled-components/native" import { color, ColorProps, @@ -13,6 +12,7 @@ import { TypographyProps, variant as systemVariant, } from "styled-system" +import { styled as primitives } from "../../platform/primitives" import { calculateLetterSpacing, calculateLineHeight, @@ -20,7 +20,6 @@ import { isControlledLetterSpacing, isControlledLineHeight, TEXT_VARIANTS, - TextLineHeight, TextVariant, TREATMENTS, } from "./tokens" @@ -44,7 +43,7 @@ export const textMixin = compose(typography, color, textColor, space) /** TextProps */ export type TextProps = BaseTextProps & RNTextProps -const InnerText = styled.Text` +const InnerText = primitives.Text` ${systemVariant({ variants: TEXT_VARIANTS })} ${textMixin} ` @@ -75,7 +74,7 @@ export const Text: React.FC = ({ children, variant, fontSize, letterS ...(variant && fontSize && typeof fontSize === "number" && !lineHeight ? // Possibly convert the lineHeight { - lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight as TextLineHeight], + lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight], } : {}), ...rest, diff --git a/src/palette/elements/Text/__tests__/Text.test.tsx b/src/palette/elements/Text/__tests__/Text.test.tsx index 97714ad66e6..a11a2fd329f 100644 --- a/src/palette/elements/Text/__tests__/Text.test.tsx +++ b/src/palette/elements/Text/__tests__/Text.test.tsx @@ -1,3 +1,4 @@ +import "jest-styled-components" import React from "react" import renderer from "react-test-renderer" import { Theme } from "../../../Theme" @@ -7,11 +8,9 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the variant", () => { const tree = renderer .create( - - - hello world - - + + hello world + ) .toJSON() @@ -23,13 +22,11 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the font-size directly", () => { const tree = renderer .create( - - - - hello world - - - + + + hello world + + ) .toJSON() diff --git a/src/palette/elements/Text/tokens.ts b/src/palette/elements/Text/tokens.ts index 852683af80e..29dd7e1256a 100644 --- a/src/palette/elements/Text/tokens.ts +++ b/src/palette/elements/Text/tokens.ts @@ -2,28 +2,24 @@ import { TEXT_FONT_SIZES, TEXT_LETTER_SPACING, TEXT_LINE_HEIGHTS, - TEXT_VARIANT_NAMES as TEXT_TREATMENTS, + TEXT_TREATMENTS, TEXT_VARIANTS as WEB_TEXT_VARIANTS, + TextFontSize, + TextLetterSpacing, + TextLineHeight, TextTreatment as WebTextTreatment, -} from "@artsy/palette-tokens/dist/typography/v2" +} from "@artsy/palette-tokens/dist/text" import { ResponsiveValue, Theme, TLengthStyledSystem } from "styled-system" -// get rid of these three -export type TextFontSize = keyof typeof TEXT_FONT_SIZES -type TextLetterSpacing = keyof typeof TEXT_LETTER_SPACING -export type TextLineHeight = keyof typeof TEXT_LINE_HEIGHTS +export { TextFontSize } from "@artsy/palette-tokens/dist/text" /** * font-families */ -export const TEXT_FONTS_V2 = { +export const TEXT_FONTS = { sans: "Unica77LL-Regular", serif: "ReactNativeAGaramondPro-Regular", } -export const TEXT_FONTS_V3 = { - sans: "Unica77LL-Regular", -} -export const TEXT_FONTS = TEXT_FONTS_V2 /** * em-units don't exist on React Native so we convert it to a number @@ -79,14 +75,14 @@ export const TEXT_VARIANTS = (Object.keys(TREATMENTS) as Array */ -export const Touchable: React.FC = ({ children, flex, haptic, noFeedback, onPress, ...props }) => { - const color = useColor() +export const Touchable: React.FC = ({ + children, + flex, + haptic, + noFeedback, + useDefaultTouchable, + onPress, + ...props +}) => { const inner = React.Children.count(children) === 1 ? children : {children} const onPressWrapped = (evt: GestureResponderEvent) => { @@ -40,13 +50,27 @@ export const Touchable: React.FC = ({ children, flex, haptic, no onPress(evt) } - return noFeedback ? ( - - {inner} - - ) : ( - + if (noFeedback) { + const NoFeedbackButton = Platform.select({ + ios: useDefaultTouchable ? RNTouchableWithoutFeedback : TouchableWithoutFeedback, + default: RNTouchableWithoutFeedback, + }) + + return ( + + {inner} + + ) + } + + const HighlightButton = Platform.select({ + ios: useDefaultTouchable ? RNTouchableHighlight : TouchableHighlight, + default: RNTouchableHighlight, + }) + + return ( + {inner} - + ) } diff --git a/src/palette/elements/Touchable/TouchableHighlightColor.tsx b/src/palette/elements/Touchable/TouchableHighlightColor.tsx index afd186318f2..41e13c50adb 100644 --- a/src/palette/elements/Touchable/TouchableHighlightColor.tsx +++ b/src/palette/elements/Touchable/TouchableHighlightColor.tsx @@ -1,6 +1,5 @@ -import { Color } from "palette/Theme" +import { Color, Touchable, TouchableProps } from "palette" import React, { useState } from "react" -import { Touchable, TouchableProps } from "./Touchable" interface TouchableHighlightState { color: Color @@ -10,7 +9,7 @@ interface TouchableHighlightState { interface TouchableHighlightColorProps extends TouchableProps { activeColor?: Color normalColor?: Color - render: (state: TouchableHighlightState) => React.ReactNode + render: (state: TouchableHighlightState) => React.ReactNode; } export const TouchableHighlightColor: React.FC = (props) => { diff --git a/src/palette/elements/Typography/Typography.tsx b/src/palette/elements/Typography/Typography.tsx index 3f4b1854a63..ff94245dd5f 100644 --- a/src/palette/elements/Typography/Typography.tsx +++ b/src/palette/elements/Typography/Typography.tsx @@ -1,5 +1,5 @@ import React from "react" -import styled from "styled-components/native" +import { styled as primitives, styledWrapper } from "../../platform/primitives" import { SansSize, SerifSize, themeProps, TypeSizes } from "../../Theme" @@ -41,7 +41,7 @@ interface FullTextProps VerticalAlignProps {} /** Base Text component for typography */ -export const BaseText = styled.Text` +export const BaseText = primitives.Text` ${fontSize}; ${lineHeight}; ${color}; @@ -87,22 +87,24 @@ interface StyledTextProps extends Partial { * An optional function that maps weight+italic to a font-family. */ function createStyledText

(fontType: keyof FontFamily) { - return styled>(({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { - const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] - if (fontFamilyString === null) { - throw new Error( - `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` - ) + return styledWrapper>( + ({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { + const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] + if (fontFamilyString === null) { + throw new Error( + `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` + ) + } + + const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] + + if (fontMetrics == null) { + throw new Error(`"${size}" is not a valid size for ${fontType}`) + } + + return } - - const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] - - if (fontMetrics == null) { - throw new Error(`"${size}" is not a valid size for ${fontType}`) - } - - return - })`` + )`` } function stripPx(fontMetrics: { fontSize: string; lineHeight: string }): { fontSize: number; lineHeight: number } { diff --git a/src/palette/helpers/__tests__/color.test.ts b/src/palette/helpers/__tests__/color.test.ts new file mode 100644 index 00000000000..ee498248dca --- /dev/null +++ b/src/palette/helpers/__tests__/color.test.ts @@ -0,0 +1,8 @@ +import { color } from "../color" + +describe("color", () => { + it("returns the correct color", () => { + expect(color("black10")).toEqual("#E5E5E5") + expect(color("black30")).toEqual("#C2C2C2") + }) +}) diff --git a/src/palette/helpers/__tests__/color.tests.tsx b/src/palette/helpers/__tests__/color.tests.tsx deleted file mode 100644 index f2029bfbc08..00000000000 --- a/src/palette/helpers/__tests__/color.tests.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import React from "react" -import { View } from "react-native" -import { useColor } from "../../hooks" -import { Color, Theme } from "../../Theme" - -describe("color", () => { - const ColorView = ({ name }: { name: Color }) => { - const color = useColor() - return - } - - it("returns the correct color with a Theme provider", () => { - const TestComponent = () => ( - - - - - - ) - - const tree = renderWithWrappers().root - expect(tree.findByType(View).props.style.backgroundColor).toBe("#E5E5E5") - }) - - it("returns the correct color with a Theme provider in v2", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("#FAE7BA") - expect(bgColors[1]).toBe("#A85F00") - }) - - it("returns the correct color with a Theme provider in v3", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe(undefined) - expect(bgColors[1]).toBe("#7B5927") - }) - - it("returns the correct color with a Theme provider with override", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("red") - expect(bgColors[1]).toBe("blue") - }) - - it("returns the correct color with nested Theme providers", () => { - const TestComponent = () => ( - - - <> - - - - <> - - - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("red") - expect(bgColors[1]).toBe("blue") - expect(bgColors[2]).toBe("green") - expect(bgColors[3]).toBe("purple") - }) -}) diff --git a/src/palette/helpers/__tests__/space.test.ts b/src/palette/helpers/__tests__/space.test.ts new file mode 100644 index 00000000000..198b6c4b91f --- /dev/null +++ b/src/palette/helpers/__tests__/space.test.ts @@ -0,0 +1,9 @@ +import { space } from "../space" + +describe("space", () => { + it("returns the correct space", () => { + expect(space(1)).toEqual(10) + expect(space(2)).toEqual(20) + expect(space(3)).toEqual(30) + }) +}) diff --git a/src/palette/helpers/__tests__/space.tests.tsx b/src/palette/helpers/__tests__/space.tests.tsx deleted file mode 100644 index ab17e267ac9..00000000000 --- a/src/palette/helpers/__tests__/space.tests.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import React from "react" -import { View } from "react-native" -import { useSpace } from "../../hooks" -import { SpacingUnit, Theme } from "../../Theme" - -describe("space", () => { - const SpaceView = ({ name }: { name: SpacingUnit }) => { - const space = useSpace() - return - } - - it("returns the correct space with a Theme provider", () => { - const TestComponent = () => ( - - - - - - ) - - const tree = renderWithWrappers().root - expect(tree.findByType(View).props.style.marginLeft).toBe(10) - }) - - it("returns the correct space with a Theme provider in v2", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(3) - expect(margins[1]).toBe(60) - }) - - it("returns the correct space with a Theme provider in v3", () => { - const TestComponent = () => ( - - - <> - {/* @ts-ignore */} - - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(undefined) - expect(margins[1]).toBe(20) - }) - - it("returns the correct space with a Theme provider with override", () => { - const TestComponent = () => ( - - - <> - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(12) - }) -}) diff --git a/src/palette/helpers/styled.tsx b/src/palette/helpers/styled.tsx deleted file mode 100644 index b158495f232..00000000000 --- a/src/palette/helpers/styled.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react" -import { StyleProp, ViewStyle } from "react-native" - -export const artsyStyled =

}>(Component: React.ComponentType

) => ( - styleProps: StyleProp -) => (props: P) => diff --git a/src/palette/hooks.ts b/src/palette/hooks.ts deleted file mode 100644 index 80677b33205..00000000000 --- a/src/palette/hooks.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { usePaletteFlagStore } from "./PaletteFlag" -import { useTheme } from "./Theme" - -export const useColor = () => useTheme().color -export const useSpace = () => useTheme().space - -/** Returns a config specific to the current theme. */ -export const useThemeConfig = ({ v2, v3 }: { v2: T; v3: U }): U | T => { - const { theme = { id: "v2" } } = useTheme() - const allowV3 = usePaletteFlagStore((state) => state.allowV3) - return theme.id === "v2" ? v2 : allowV3 ? v3 : v2 -} diff --git a/src/palette/index.tsx b/src/palette/index.tsx index 60f3ba0329c..ed29f9aab9c 100644 --- a/src/palette/index.tsx +++ b/src/palette/index.tsx @@ -2,8 +2,6 @@ export * from "./elements" export * from "./helpers" export * from "./svgs" export * from "./Theme" -export * from "./hooks" -export * from "./ClassTheme" // Helpers import * as _AllIcons from "./svgs" diff --git a/src/palette/platform/primitives.ts b/src/palette/platform/primitives.ts new file mode 100644 index 00000000000..18e41f3ee20 --- /dev/null +++ b/src/palette/platform/primitives.ts @@ -0,0 +1,12 @@ +/* tslint:disable:completed-docs */ + +import styles, { ThemeProvider as NativeThemeProvider } from "styled-components/native" + +export const styled = { + Image: styles.Image, + Text: styles.Text, + View: styles.View, +} + +export const ThemeProvider = NativeThemeProvider +export const styledWrapper = styles as typeof styles diff --git a/src/palette/svgs/AddCircleFillIcon.tsx b/src/palette/svgs/AddCircleFillIcon.tsx index c907492ab4a..e331897f780 100644 --- a/src/palette/svgs/AddCircleFillIcon.tsx +++ b/src/palette/svgs/AddCircleFillIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** AddCircleFillIcon */ export const AddCircleFillIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/AlertCircleFillIcon.tsx b/src/palette/svgs/AlertCircleFillIcon.tsx index 0fbc34e9970..00698ab3908 100644 --- a/src/palette/svgs/AlertCircleFillIcon.tsx +++ b/src/palette/svgs/AlertCircleFillIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { Icon, IconProps, Path } from "./Icon" +/** AlertCircleFillIcon */ export const AlertCircleFillIcon: React.FC = ({ title = "AlertCircleFillIcon", ...props }) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( { - const color = useColor() - return ( - - - - ) -} - -export const ArrowUpCircleFillIcon: React.FC = (props) => +const FilledArrowCircle = ({ rotate, ...props }: IconProps & { rotate?: string }) => ( + + + +) -export const ArrowDownCircleFillIcon: React.FC = (props) => +/** ArrowUpCircleFillIcon */ +export const ArrowUpCircleFillIcon: React.FC = (props) => { + return +} +/** ArrowDownCircleFillIcon */ +export const ArrowDownCircleFillIcon: React.FC = (props) => { + return +} diff --git a/src/palette/svgs/ArrowDownCircleIcon.tsx b/src/palette/svgs/ArrowDownCircleIcon.tsx index dc8182f667c..07560846978 100644 --- a/src/palette/svgs/ArrowDownCircleIcon.tsx +++ b/src/palette/svgs/ArrowDownCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowDownCircleIcon */ export const ArrowDownCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowLeftCircleIcon.tsx b/src/palette/svgs/ArrowLeftCircleIcon.tsx index aa35775b6c3..d5f265e3d8b 100644 --- a/src/palette/svgs/ArrowLeftCircleIcon.tsx +++ b/src/palette/svgs/ArrowLeftCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowLeftCircleIcon */ export const ArrowLeftCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowRightCircleIcon.tsx b/src/palette/svgs/ArrowRightCircleIcon.tsx index bd77b71390d..148e6a63f69 100644 --- a/src/palette/svgs/ArrowRightCircleIcon.tsx +++ b/src/palette/svgs/ArrowRightCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowRightCircleIcon */ export const ArrowRightCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowUpCircleIcon.tsx b/src/palette/svgs/ArrowUpCircleIcon.tsx index 9de83cf8969..d13ce5f3b6d 100644 --- a/src/palette/svgs/ArrowUpCircleIcon.tsx +++ b/src/palette/svgs/ArrowUpCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowUpCircleIcon */ export const ArrowUpCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoBlackIcon.tsx b/src/palette/svgs/ArtsyLogoBlackIcon.tsx index 4427d6f32d6..e4baa13fba8 100644 --- a/src/palette/svgs/ArtsyLogoBlackIcon.tsx +++ b/src/palette/svgs/ArtsyLogoBlackIcon.tsx @@ -1,13 +1,13 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" interface ArtsyLogoBlackIconProps extends Omit { scale?: number } +/** ArtsyLogoBlackIcon */ export const ArtsyLogoBlackIcon: React.FC = ({ scale = 1, title = "Artsy", ...props }) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx index d11a4047147..60d72c65460 100644 --- a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx @@ -1,6 +1,7 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" +/** ArtsyLogoWhiteIcon */ export const ArtsyLogoWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtsyMarkBlackIcon.tsx b/src/palette/svgs/ArtsyMarkBlackIcon.tsx index 7d8e8af7fbc..d17da9c7ae2 100644 --- a/src/palette/svgs/ArtsyMarkBlackIcon.tsx +++ b/src/palette/svgs/ArtsyMarkBlackIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** ArtsyMarkBlackIcon */ export const ArtsyMarkBlackIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx index 4ed51bfc338..9cddb933fc2 100644 --- a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx @@ -1,6 +1,7 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" +/** ArtsyMarkWhiteIcon */ export const ArtsyMarkWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtworkIcon.tsx b/src/palette/svgs/ArtworkIcon.tsx index c6d54a160fe..42faff054e3 100644 --- a/src/palette/svgs/ArtworkIcon.tsx +++ b/src/palette/svgs/ArtworkIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArtworkIcon */ export const ArtworkIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/DocumentIcon.tsx b/src/palette/svgs/DocumentIcon.tsx index 3c6cd9b6680..f68a4049746 100644 --- a/src/palette/svgs/DocumentIcon.tsx +++ b/src/palette/svgs/DocumentIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** DocumentIcon */ export const DocumentIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EnterIcon.tsx b/src/palette/svgs/EnterIcon.tsx index 2e933b5cf5e..acfd13b5de6 100644 --- a/src/palette/svgs/EnterIcon.tsx +++ b/src/palette/svgs/EnterIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EnterIcon */ export const EnterIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EnvelopeIcon.tsx b/src/palette/svgs/EnvelopeIcon.tsx index 83983ec88f1..53fd8b24f38 100644 --- a/src/palette/svgs/EnvelopeIcon.tsx +++ b/src/palette/svgs/EnvelopeIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** EnvelopeIcon */ export const EnvelopeIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EyeOpenedIcon.tsx b/src/palette/svgs/EyeOpenedIcon.tsx index 8abc6f68475..bae70a5fd3c 100644 --- a/src/palette/svgs/EyeOpenedIcon.tsx +++ b/src/palette/svgs/EyeOpenedIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EyeOpenedIcon */ export const EyeOpenedIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/FacebookIcon.tsx b/src/palette/svgs/FacebookIcon.tsx index 3357ec9fd5a..878de5b6bc3 100644 --- a/src/palette/svgs/FacebookIcon.tsx +++ b/src/palette/svgs/FacebookIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** FacebookIcon */ export const FacebookIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/LoaderIcon.tsx b/src/palette/svgs/LoaderIcon.tsx index 9fe2a2bc544..08f4f97e812 100644 --- a/src/palette/svgs/LoaderIcon.tsx +++ b/src/palette/svgs/LoaderIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** LoaderIcon */ export const LoaderIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/LockIcon.tsx b/src/palette/svgs/LockIcon.tsx index e8b70499391..7db7a685564 100644 --- a/src/palette/svgs/LockIcon.tsx +++ b/src/palette/svgs/LockIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** LockIcon */ export const LockIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( @@ -16,3 +16,7 @@ export const LogoutIcon: React.FC = (props) => { ) } + +// TODO: remove this alias once clients have been updated +/** PowerIcon */ +export const PowerIcon = LogoutIcon diff --git a/src/palette/svgs/MagnifyingGlassIcon.tsx b/src/palette/svgs/MagnifyingGlassIcon.tsx index 9c0ee605f9b..295af4068d5 100644 --- a/src/palette/svgs/MagnifyingGlassIcon.tsx +++ b/src/palette/svgs/MagnifyingGlassIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** MagnifyingGlassIcon */ export const MagnifyingGlassIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/MessageIcon.tsx b/src/palette/svgs/MessageIcon.tsx index 7e355cfd1c5..9d82a9a9664 100644 --- a/src/palette/svgs/MessageIcon.tsx +++ b/src/palette/svgs/MessageIcon.tsx @@ -1,10 +1,10 @@ -import { useColor } from "palette/hooks" import React from "react" import { Path } from "react-native-svg" +import { color } from "../Theme" import { Icon, IconProps } from "./Icon" +/** MessageIcon */ export const MessageIcon: React.FC = (props) => { - const color = useColor() return ( = ({ ...props }) => { - const color = useColor() +/** MoneyFillIcon */ +export const MoneyFillIcon: React.SFC = ({ ...props }) => { return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { ) } + +// TODO: remove this alias once clients have been updated +/** BookIcon */ +export const BookIcon = PublicationIcon diff --git a/src/palette/svgs/QuestionCircleIcon.tsx b/src/palette/svgs/QuestionCircleIcon.tsx index 9f419df65c4..816d4f52a06 100644 --- a/src/palette/svgs/QuestionCircleIcon.tsx +++ b/src/palette/svgs/QuestionCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** QuestionCircleIcon */ export const QuestionCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/TrashIcon.tsx b/src/palette/svgs/TrashIcon.tsx index f0bfbc0d2e6..7d75a34b8a5 100644 --- a/src/palette/svgs/TrashIcon.tsx +++ b/src/palette/svgs/TrashIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** TrashIcon */ export const TrashIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => ( diff --git a/src/palette/svgs/XCircleIcon.tsx b/src/palette/svgs/XCircleIcon.tsx index d4e2c368103..1dce64c12dd 100644 --- a/src/palette/svgs/XCircleIcon.tsx +++ b/src/palette/svgs/XCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Circle, Icon, IconProps, Path } from "./Icon" /** XCircleIcon */ export const XCircleIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/sf/BoltCircleFill.tsx b/src/palette/svgs/sf/BoltCircleFill.tsx index 8d5ce03ac6c..2f2fa767cf1 100644 --- a/src/palette/svgs/sf/BoltCircleFill.tsx +++ b/src/palette/svgs/sf/BoltCircleFill.tsx @@ -1,11 +1,10 @@ -import { useColor } from "palette/hooks" import React from "react" import { EMaskUnits } from "react-native-svg" +import { color } from "../../Theme" import { Icon, IconProps, Mask, Path, Rect } from "../Icon" /** BoltCircleFill */ export const BoltCircleFill: React.FC = (props) => { - const color = useColor() console.warn(EMaskUnits) return ( diff --git a/src/palette/svgs/sf/BoltFill.tsx b/src/palette/svgs/sf/BoltFill.tsx index db5388971f6..d1cfb1e8e69 100644 --- a/src/palette/svgs/sf/BoltFill.tsx +++ b/src/palette/svgs/sf/BoltFill.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../../Theme" import { Icon, IconProps, Path } from "../Icon" +/** BoltFill */ export const BoltFill: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( ({ })) jest.mock("./lib/NativeModules/Events.tsx", () => ({ + postEvent: jest.fn(), userHadMeaningfulInteraction: jest.fn(), + NativeAnalyticsProvider: { + postEvent: jest.fn(), + }, })) jest.mock("react-native-share", () => ({ @@ -269,6 +273,7 @@ function getNativeModules(): OurNativeModules { presentModal: jest.fn(), }, AREventsModule: { + postEvent: jest.fn(), requestAppStoreRating: jest.fn(), }, ArtsyNativeModule: { @@ -514,28 +519,7 @@ jest.mock("react-native-config", () => ({ })) jest.mock("react-native-view-shot", () => ({})) - -// MOCKS FOR TRACKING -jest.mock("@segment/analytics-react-native", () => ({ - setup: () => null, - identify: () => null, - reset: () => null, -})) - -jest.mock("@segment/analytics-react-native-appboy", () => ({})) - -jest.mock("lib/utils/track/SegmentTrackingProvider", () => ({ - SegmentTrackingProvider: { - setup: () => null, - identify: () => null, - postEvent: () => null, - }, -})) - -jest.mock("lib/utils/track/providers.tsx", () => ({ - postEventToProviders: jest.fn(), - _addTrackingProvider: jest.fn(), -})) +jest.mock("@segment/analytics-react-native", () => ({})) jest.mock("react-native-push-notification", () => ({ configure: jest.fn(), diff --git a/src/storybook/addons.js b/src/storybook/addons.js deleted file mode 100644 index 38233e7be5f..00000000000 --- a/src/storybook/addons.js +++ /dev/null @@ -1 +0,0 @@ -import "@storybook/addon-actions/register" diff --git a/src/storybook/helpers.tsx b/src/storybook/helpers.tsx deleted file mode 100644 index 09a45d9af6a..00000000000 --- a/src/storybook/helpers.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Spacer } from "palette" -import React from "react" -import { FlatList, ScrollView } from "react-native" - -export const DList = ({ - data, - keyExtractor, - renderItem, -}: { - data: ItemT[] - keyExtractor?: (item: ItemT, index: number) => string - renderItem: (info: { item: ItemT; index: number }) => React.ReactElement | null -}) => ( - `${item}`)} - renderItem={renderItem} - ItemSeparatorComponent={() => } - contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} - /> -) - -export const List = ({ children }: { children: React.ReactElement[] }) => ( - `${index}`} - renderItem={({ item: child }) => child} - ItemSeparatorComponent={() => } - contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} - /> -) - -export const CenterView = ({ children }: { children: React.ReactNode }) => { - return ( - - {children} - - ) -} diff --git a/src/storybook/index.js b/src/storybook/index.js deleted file mode 100644 index dd0383b01ce..00000000000 --- a/src/storybook/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { AppRegistry } from "react-native" - -import StorybookUIRoot from "./storybook-ui" - -AppRegistry.registerComponent("Artsy", () => StorybookUIRoot) diff --git a/src/storybook/package.json b/src/storybook/package.json deleted file mode 100644 index 38803d2c8a1..00000000000 --- a/src/storybook/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "storybook" -} diff --git a/src/storybook/rn-addons.js b/src/storybook/rn-addons.js deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/storybook/storyLoader.js b/src/storybook/storyLoader.js deleted file mode 100644 index 15ea6f5ed2b..00000000000 --- a/src/storybook/storyLoader.js +++ /dev/null @@ -1,15 +0,0 @@ -// Auto-generated file created by react-native-storybook-loader -// Do not edit. -// -// https://github.com/elderfo/react-native-storybook-loader.git - -function loadStories() { - require("../palette/elements/Button/Button.stories") -} - -const stories = ["../palette/elements/Button/Button.stories"] - -module.exports = { - loadStories, - stories, -} diff --git a/src/storybook/storybook-ui.js b/src/storybook/storybook-ui.js deleted file mode 100644 index b552b47f82d..00000000000 --- a/src/storybook/storybook-ui.js +++ /dev/null @@ -1,17 +0,0 @@ -import { addDecorator, configure, getStorybookUI } from "@storybook/react-native" -import "./rn-addons" -import { loadStories } from "./storyLoader" - -// import stories -configure(() => { - loadStories() -}, module) - -// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters -// To find allowed options for getStorybookUI -const StorybookUIRoot = getStorybookUI({ - onDeviceUI: false, - asyncStorage: null, -}) - -export default StorybookUIRoot diff --git a/tsconfig.json b/tsconfig.json index 8084851eee4..97fe90f321f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,20 +5,14 @@ "baseUrl": "src", "experimentalDecorators": true, "incremental": true, - "lib": [ - "es2015" - ], + "lib": ["es2015"], "jsx": "react", "module": "commonjs", "moduleResolution": "node", "noUnusedLocals": true, "noUnusedParameters": true, "outDir": "build", - "plugins": [ - { - "name": "typescript-styled-plugin" - } - ], + "plugins": [{ "name": "typescript-styled-plugin" }], "pretty": true, "resolveJsonModule": true, "strict": true, @@ -27,11 +21,7 @@ "noFallthroughCasesInSwitch": true, "strictFunctionTypes": true, "target": "es6", - "types": [ - "jest", - "react", - "react-native" - ], + "types": ["jest", "react", "react-native"], "noEmit": true }, "include": [ diff --git a/typings/storybook.d.ts b/typings/storybook.d.ts deleted file mode 100644 index eb0368c7193..00000000000 --- a/typings/storybook.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module "storybook-router" { - global { - interface Window { - location: any - } - } -} diff --git a/typings/styled-components.native.d.ts b/typings/styled-components.native.d.ts index 9bb2ab6616e..f73f24c063d 100644 --- a/typings/styled-components.native.d.ts +++ b/typings/styled-components.native.d.ts @@ -1,14 +1,12 @@ declare module "styled-components/native" { - import * as React from "react" import * as ReactNative from "react-native" + import * as React from "react" export { css, DefaultTheme, isStyledComponent, ThemeConsumer, - // @ts-ignore - ThemeContext, ThemeProps, ThemeProvider, withTheme, @@ -19,7 +17,6 @@ declare module "styled-components/native" { isStyledComponent, ThemedCssFunction, ThemedStyledFunction, - ThemedStyledInterface, ThemeProviderComponent, WithThemeFnInterface, } from "styled-components" @@ -32,11 +29,13 @@ declare module "styled-components/native" { > = ThemedStyledFunction, T> // Copied over from "ThemedBaseStyledInterface" in index.d.ts in order to remove DOM element typings - type ReactNativeThemedBaseStyledInterface = >( - // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` - // causes tests to fail in TS 3.1 - component: C - ) => ThemedStyledFunction, T> + interface ReactNativeThemedBaseStyledInterface { + >( + // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` + // causes tests to fail in TS 3.1 + component: C + ): ThemedStyledFunction, T> + } type ReactNativeThemedStyledInterface = ReactNativeThemedBaseStyledInterface> @@ -88,11 +87,6 @@ declare module "styled-components/native" { css: ThemedCssFunction - withTheme: WithThemeFnInterface - ThemeProvider: ThemeProviderComponent - ThemeConsumer: React.Consumer - ThemeContext: React.Context - // This could be made to assert `target is StyledComponent` instead, but that feels not type safe isStyledComponent: typeof isStyledComponent } diff --git a/yarn.lock b/yarn.lock index 59ed4f393ce..ce6b301fbe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,22 +2,27 @@ # yarn lockfile v1 -"@artsy/cohesion@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.13.0.tgz#418ee07bdba21451445668f9f71c617e7009f60f" - integrity sha512-TyoDJW6ctpN/ZsV9d7tD9YoPr3B7xVnoAyL6ag0xFxH1TZHK6nNIxpUneUx812K6jyWLZkwOnNUfjETEu/45tA== +"@artsy/auto-config@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@artsy/auto-config/-/auto-config-1.0.2.tgz#b79f6fd0d0bda0c5e0764ced55e014cf58174d6f" + integrity sha512-mJyuKNDMYZcgc2oLIkvmpVIr1RexklV71JmU+to5qs3Y9pv5dsj4WHl8+wf9g74EQNOyhWH2SYMGBm1JoPYh/Q== + +"@artsy/cohesion@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.7.0.tgz#974d34831d8a66c834a83a2975f7c03e6203b9f4" + integrity sha512-i1t0vUYhHqYgw2IamNKhfqSHfmOIZmXRXnnxXaQBk+B7ZTUBeDhBduxfHfgA2W29sIVEr5N1ne2/vmpgrPGoog== dependencies: core-js "3" -"@artsy/palette-tokens@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-2.1.2.tgz#0225ad2646009a0a3fde0a014dd7d3477c561bf1" - integrity sha512-6/wb2305/pqCpEKLABUG0m3dxLpPG8xp4Gp1YTuVU7HwdZ8zvS6HC2d2sZEeVIgLGjFedQzSj2TQe3R2XqRstg== +"@artsy/palette-tokens@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-1.3.1.tgz#8e1f4652f9ae53bf5567630e036b650355ec9c95" + integrity sha512-aKkIKkYkK2+AEUhoIuiXJFaac7QkAbkfA5NKWDBP3H0yj/7ZZ8p8+qWL+aa6w9kuMLZuQGuy2JkvS3W/G1MWjw== -"@artsy/update-repo@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.1.tgz#7b82e393c7eee59f60deaf7fc6f77661e36dbd04" - integrity sha512-sco76cOeJbp/Opv9NsZi2Ra9FcDX6PFjms5gqdlokgBA3ig/lIiBXVEB26alMMuckrVYjYtL1Y86EktofH5pfg== +"@artsy/update-repo@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.0.tgz#c978d475fa4e2e1be0cc40fe57a7581f0d8f690b" + integrity sha512-S7pM46T6/pAaHVD5R5nCc4UXIQQo3kG4KQk2B75RYbOb8LMk7dyFKwsm36R3nriv7Xhb4E2jEN6J/srpataLFQ== dependencies: "@octokit/rest" "^17.2.0" kleur "^3.0.3" @@ -79,13 +84,6 @@ deepmerge "^4.0.0" tslib "1.10.0" -"@babel/code-frame@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -100,13 +98,6 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -114,11 +105,6 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== - "@babel/core@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" @@ -159,6 +145,25 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.2": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helpers" "^7.1.5" + "@babel/parser" "^7.1.6" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -225,6 +230,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" + dependencies: + "@babel/types" "^7.1.6" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/generator@^7.11.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" @@ -243,15 +258,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.5.0": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" @@ -279,13 +285,6 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" @@ -294,14 +293,6 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-builder-react-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" @@ -319,16 +310,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -352,18 +333,6 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-create-class-features-plugin@^7.8.3": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" @@ -376,14 +345,6 @@ "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" - "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -393,20 +354,6 @@ "@babel/types" "^7.0.0" lodash "^4.17.10" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" @@ -415,13 +362,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -440,15 +380,6 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -472,13 +403,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -493,13 +417,6 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" @@ -521,13 +438,6 @@ dependencies: "@babel/types" "^7.12.7" -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -556,13 +466,6 @@ dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -597,20 +500,6 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -638,13 +527,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -662,11 +544,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" @@ -690,15 +567,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-replace-supers@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" @@ -729,16 +597,6 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-replace-supers@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" @@ -764,13 +622,6 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -779,13 +630,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" @@ -800,13 +644,6 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -819,11 +656,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" @@ -834,11 +666,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - "@babel/helper-wrap-function@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" @@ -849,16 +676,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helpers@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" @@ -868,6 +685,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.1.2" +"@babel/helpers@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.5.tgz#68bfc1895d685f2b8f1995e788dbfe1f6ccb1996" + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.1.5" + "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" @@ -913,15 +738,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -936,6 +752,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== +"@babel/parser@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" + "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" @@ -946,25 +766,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.14.5", "@babel/parser@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== - "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-external-helpers@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0.tgz#61ee7ba5dba27d7cad72a13d46bec23c060b762e" @@ -972,15 +778,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-async-generator-functions@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" - integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" @@ -1001,23 +798,6 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.7.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-proposal-decorators@7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" @@ -1027,14 +807,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-decorators" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz#a057bbfd4649facfe39f33a537e18554bdd2b5da" @@ -1043,30 +815,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-export-default-from" "^7.0.0" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz#b72ec31adf612d062dc0348316246127a451e45f" @@ -1075,22 +823,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" @@ -1099,17 +831,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" @@ -1118,14 +839,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz#3d344d4152253379b8758e7d041148e8787c4a9d" @@ -1134,48 +847,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-bigint@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" @@ -1190,20 +861,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" @@ -1218,13 +875,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz#084b639bce3d42f3c5bf3f68ccb42220bb2d729d" @@ -1232,13 +882,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" @@ -1260,13 +903,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" @@ -1281,13 +917,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz#b60931d5a15da82625fff6657c39419969598743" @@ -1295,20 +924,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -1316,13 +931,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" @@ -1330,13 +938,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz#1e6ecba124310b5d3a8fc1e00d50b1c4c2e05e68" @@ -1344,27 +945,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" @@ -1386,13 +966,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-async-to-generator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" @@ -1402,15 +975,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" @@ -1418,13 +982,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-block-scoping@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" @@ -1433,13 +990,6 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-classes@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" @@ -1454,19 +1004,6 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" - "@babel/plugin-transform-computed-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" @@ -1474,13 +1011,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-destructuring@^7.0.0": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" @@ -1488,28 +1018,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" @@ -1518,14 +1026,6 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-flow-strip-types@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" @@ -1549,13 +1049,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-function-name@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" @@ -1564,14 +1057,6 @@ "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" @@ -1579,13 +1064,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-member-expression-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.0.0.tgz#96a265bf61a9ed6f75c39db0c30d41ef7aabf072" @@ -1593,22 +1071,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-commonjs@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" @@ -1618,49 +1080,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== - dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" - integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-object-assign@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0.tgz#fca6d7500d9675c42868b8f3882979201b9a5ad8" @@ -1676,14 +1095,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/plugin-transform-parameters@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" @@ -1693,13 +1104,6 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-property-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.0.0.tgz#0b95a91dbd1f0be5b5a99ed86571ef5b5ae77009" @@ -1707,20 +1111,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-react-constant-elements@^7.2.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" - integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-react-display-name@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" @@ -1760,20 +1150,6 @@ dependencies: regenerator-transform "^0.13.3" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-runtime@7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" @@ -1801,13 +1177,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" @@ -1815,14 +1184,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-transform-sticky-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" @@ -1831,13 +1192,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-template-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" @@ -1846,20 +1200,6 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" @@ -1878,13 +1218,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" @@ -1894,14 +1227,6 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/polyfill@^7.2.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" @@ -1910,96 +1235,6 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.4.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.7" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.15.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - "@babel/preset-typescript@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" @@ -2043,13 +1278,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.3.1": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" @@ -2114,15 +1342,6 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -2162,10 +1381,24 @@ globals "^11.1.0" lodash "^4.17.10" -"@babel/traverse@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.6" + "@babel/types" "^7.1.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/traverse@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.11.5" @@ -2192,21 +1425,6 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" @@ -2231,6 +1449,14 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.1.5", "@babel/types@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -2249,14 +1475,6 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.14.5", "@babel/types@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" @@ -2299,49 +1517,6 @@ version "0.1.6" resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz#e4a9856c1057f0aff7d443b8536477c243abe28c" -"@emotion/cache@^10.0.27": - version "10.0.29" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" - integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== - dependencies: - "@emotion/sheet" "0.9.4" - "@emotion/stylis" "0.8.5" - "@emotion/utils" "0.11.3" - "@emotion/weak-memoize" "0.2.5" - -"@emotion/core@^10.0.20": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3" - integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.27" - "@emotion/css" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - -"@emotion/css@^10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" - integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== - dependencies: - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - babel-plugin-emotion "^10.0.27" - -"@emotion/hash@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@emotion/is-prop-valid@0.8.8": - 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@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -2354,84 +1529,11 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== -"@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/native@^10.0.14": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/native/-/native-10.0.27.tgz#67c2c0ceeeed873c849c611d9a6497a006d43a8f" - integrity sha512-3qxR2XFizGfABKKbX9kAYc0PHhKuCEuyxshoq3TaMEbi9asWHdQVChg32ULpblm4XAf9oxaitAU7J9SfdwFxtw== - dependencies: - "@emotion/primitives-core" "10.0.27" - -"@emotion/primitives-core@10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/primitives-core/-/primitives-core-10.0.27.tgz#7a5fae07fe06a046ced597f5c0048f22d5c45842" - integrity sha512-fRBEDNPSFFOrBJ0OcheuElayrNTNdLF9DzMxtL0sFgsCFvvadlzwJHhJMSwEJuxwARm9GhVLr1p8G8JGkK98lQ== - dependencies: - css-to-react-native "^2.2.1" - -"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": - version "0.11.16" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" - integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== - dependencies: - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/unitless" "0.7.5" - "@emotion/utils" "0.11.3" - csstype "^2.5.7" - -"@emotion/sheet@0.9.4": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" - integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== - -"@emotion/styled-base@^10.0.27": - version "10.0.31" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" - integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.8" - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - -"@emotion/styled@^10.0.17": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" - integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== - dependencies: - "@emotion/styled-base" "^10.0.27" - babel-plugin-emotion "^10.0.27" - -"@emotion/stylis@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - -"@emotion/unitless@0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - "@emotion/unitless@^0.7.0": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" integrity sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg== -"@emotion/utils@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" - integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== - -"@emotion/weak-memoize@0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== - "@expo/react-native-action-sheet@^3.8.0": version "3.8.0" resolved "https://registry.yarnpkg.com/@expo/react-native-action-sheet/-/react-native-action-sheet-3.8.0.tgz#0db8b70ea8550ceb2983abda8584efa3a61d7389" @@ -2472,14 +1574,6 @@ dependencies: "@hapi/hoek" "^8.3.0" -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - "@invertase/react-native-apple-authentication@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@invertase/react-native-apple-authentication/-/react-native-apple-authentication-2.1.2.tgz#af5ffde838a0e3151364b80418f6d25668a05107" @@ -3358,16 +2452,6 @@ resolved "https://registry.yarnpkg.com/@ptomasroos/react-native-multi-slider/-/react-native-multi-slider-2.2.2.tgz#35a97fb8c355627c6a2ded010b360ac5728b44ad" integrity sha512-HWyCnRD3Z3SbHK2FLWYmBBqd1B4iXipeKv1+AK0FoY/CElEDTEixHE8hN60TsqxalPrznn798LE2Q4tHuCiyaA== -"@reach/router@^1.2.1": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" - integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== - dependencies: - create-react-context "0.3.0" - invariant "^2.2.3" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - "@react-native-community/async-storage@1.6.3": version "1.6.3" resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.6.3.tgz#1a713e8c5cacd543ab8539080a5ce57ad917da88" @@ -3624,15 +2708,15 @@ lodash "^4.17.15" lodash-es "^4.17.15" -"@segment/analytics-react-native-appboy@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.5.0.tgz#0aa635710cf6d8198990f9cf5d27112af1f9ed82" - integrity sha512-de4NCfopobxziH/sDmGEsZ7VWevNObkFMtDsqhmrbYrjRMs4LGJ/GWo2TX0GhzYqPJurBrNPIoiQlrTaX7rIfg== +"@segment/analytics-react-native-appboy@^1.4.8": + version "1.4.8" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.4.8.tgz#ecbbeb658036975352d84d197d7fc099e02b871e" + integrity sha512-czX4H1/cfDhWeLL9I4MlbqxXT/xqaNpVw5uo70GgHD5ZZOEB1Y3hC5g81oBwgh6G/y/cn7ZS/XXCmJhG4EV8Gw== -"@segment/analytics-react-native@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.5.0.tgz#14538b8c018202ef62daf8c5b3898312a057fbde" - integrity sha512-hW93MKffFfkqNec615jQUB5wJHb5KyIcZitIVF5L7cZZxBCM7rQjVdwV9Jdk3KGFwjnWGRkAjDD2DkJZYqz7KQ== +"@segment/analytics-react-native@^1.4.4": + version "1.4.4" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.4.4.tgz#1c5e4f18ac46dd899947c758f104004fc7d5ffce" + integrity sha512-zSgoGvw3VNqam0QoumOGiNr97ar3tutSwuMJPj2Da6mcJBVohMYHQcpShyufWfsiDeX8oMnu+UJx5eo+cxskrw== "@sentry/browser@6.2.0": version "6.2.0" @@ -3768,364 +2852,6 @@ dependencies: type-detect "4.0.8" -"@storybook/addon-actions@^5.3": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.21.tgz#16eed3eb24996adfcbf70bd476a261324d6de593" - integrity sha512-6SAF/j8UBZaAbRz/rYUlcCXda+c4LQvvNlbVJc9GHjNNNMJQQVc3/EU+M7PyFz6uDUxudAW1+AFchGk04ACJ2g== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/theming" "5.3.21" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - polished "^3.3.1" - prop-types "^15.7.2" - react "^16.8.3" - react-inspector "^4.0.0" - uuid "^3.3.2" - -"@storybook/addons@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.21.tgz#ee312c738c33e8c34dc11777ef93522c3c36e56a" - integrity sha512-Ji/21WADTLVbTbiKcZ64BcL0Es+h1Afxx3kNmGJqPSTUYroCwIFCT9mUzCqU6G+YyWaISAmTii5UJkTwMkChwA== - dependencies: - "@storybook/api" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - util-deprecate "^1.0.2" - -"@storybook/api@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" - integrity sha512-K1o4an/Rx8daKRDooks6qzN6ZGyqizeacZZbair3F8CsSfTgrr2zCcf9pgKojLQa9koEmMHlcdb2KnS+GwPEgA== - dependencies: - "@reach/router" "^1.2.1" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - prop-types "^15.6.2" - react "^16.8.3" - semver "^6.0.0" - shallow-equal "^1.1.0" - store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" - -"@storybook/channel-postmessage@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz#9c08bf1c108ff973dbca18e582680d25178db1d4" - integrity sha512-CfoP7aEbZtJ35R9zeujMRdIwprETUi+Ve+y84DhXYQ2uJ0rR3vO4zHLZnxMMyJ5VnYOfuO042uch07+EKBz40Q== - dependencies: - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.2.0" - -"@storybook/channel-websocket@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-5.3.21.tgz#2ffc670563de672c087c05dc1007253d9b9f55ed" - integrity sha512-9TcsCvgZMdCZu2urudyLhshuQxjCsFUd8pu6ZzcxBFn5a8kgb1oKEv9pD0A9S+uQ2ramYgtqykRiG4Z3/JeuyA== - dependencies: - "@storybook/channels" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.2.0" - -"@storybook/channels@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.21.tgz#53ba622b171d68b3b102983a62aa05149a49497b" - integrity sha512-OXoFs9XtBVg/cCk6lYMrxkzaNlJRf54ABdorp7YAAj7S9tRL1JxOZHxmjNQwEoiRvssmem2rAWtEAxfuEANsAA== - dependencies: - core-js "^3.0.1" - -"@storybook/client-api@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.21.tgz#5b218a28f24219c32ab4b92a6af2a3e452fb8089" - integrity sha512-vS4DfA2Avvl7JNQymO4e3RUNoTWIGVfZJ70Irnd6PTAZNojbCXTYuigDavrmyf83F3g5rQpwmSAPjuoi/X/FRA== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@types/webpack-env" "^1.15.0" - core-js "^3.0.1" - eventemitter3 "^4.0.0" - global "^4.3.2" - is-plain-object "^3.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - stable "^0.1.8" - ts-dedent "^1.1.0" - util-deprecate "^1.0.2" - -"@storybook/client-logger@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.21.tgz#912c83b0d358e70acad1ad4abe199de4c38b109f" - integrity sha512-OzQkwpZ5SK9cXD9Mv6lxPGPot+hSZvnkEW12kpt1AHfJz4ET26YTDOI3oetPsjfRJo6qYLeQX8+wF7rklfXbzA== - dependencies: - core-js "^3.0.1" - -"@storybook/components@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" - integrity sha512-42QQk6qZl6wrtajP8yNCfmNS2t8Iod5QY+4V/l6iNnnT9O+j6cWOlnO+ZyvjNv0Xm0zIOt+VyVjdkKh8FUjQmA== - dependencies: - "@storybook/client-logger" "5.3.21" - "@storybook/theming" "5.3.21" - "@types/react-syntax-highlighter" "11.0.4" - "@types/react-textarea-autosize" "^4.3.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - polished "^3.3.1" - popper.js "^1.14.7" - prop-types "^15.7.2" - react "^16.8.3" - react-dom "^16.8.3" - react-focus-lock "^2.1.0" - react-helmet-async "^1.0.2" - react-popper-tooltip "^2.8.3" - react-syntax-highlighter "^11.0.2" - react-textarea-autosize "^7.1.0" - simplebar-react "^1.0.0-alpha.6" - ts-dedent "^1.1.0" - -"@storybook/core-events@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.21.tgz#41d81c3f107302a032545fc86ff344230c04b9e9" - integrity sha512-/Zsm1sKAh6pzQv8jQUmuhM7nuM01ZljIRKy8p2HjPNlMjDB5yaRkBfyeAUXUg+qXNI6aHVWa4jGdPEdwwY4oLA== - dependencies: - core-js "^3.0.1" - -"@storybook/core@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.21.tgz#da963166ea24601f318266a3aa6bbc06fc8fb175" - integrity sha512-plD47WIsn/JoyRJDOpmH7N7mEMo/jiA8ZlOitLW55zYvzUn8UrVpRFpMYo91OJxiCT6JFoaEh3XtNdhbgUwnPA== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.7.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-react-constant-elements" "^7.2.0" - "@babel/preset-env" "^7.4.5" - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@storybook/node-logger" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - "@storybook/ui" "5.3.21" - airbnb-js-shims "^2.2.1" - ansi-to-html "^0.6.11" - autoprefixer "^9.7.2" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-emotion "^10.0.20" - babel-plugin-macros "^2.7.0" - babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" - boxen "^4.1.0" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^3.0.0" - cli-table3 "0.5.1" - commander "^4.0.1" - core-js "^3.0.1" - corejs-upgrade-webpack-plugin "^2.2.0" - css-loader "^3.0.0" - detect-port "^1.3.0" - dotenv-webpack "^1.7.0" - ejs "^2.7.4" - express "^4.17.0" - file-loader "^4.2.0" - file-system-cache "^1.0.5" - find-cache-dir "^3.0.0" - find-up "^4.1.0" - fs-extra "^8.0.1" - glob-base "^0.3.0" - global "^4.3.2" - html-webpack-plugin "^4.0.0-beta.2" - inquirer "^7.0.0" - interpret "^2.0.0" - ip "^1.1.5" - json5 "^2.1.1" - lazy-universal-dotenv "^3.0.1" - micromatch "^4.0.2" - node-fetch "^2.6.0" - open "^7.0.0" - pnp-webpack-plugin "1.5.0" - postcss-flexbugs-fixes "^4.1.0" - postcss-loader "^3.0.0" - pretty-hrtime "^1.0.3" - qs "^6.6.0" - raw-loader "^3.1.0" - react-dev-utils "^9.0.0" - regenerator-runtime "^0.13.3" - resolve "^1.11.0" - resolve-from "^5.0.0" - semver "^6.0.0" - serve-favicon "^2.5.0" - shelljs "^0.8.3" - style-loader "^1.0.0" - terser-webpack-plugin "^2.1.2" - ts-dedent "^1.1.0" - unfetch "^4.1.0" - url-loader "^2.0.1" - util-deprecate "^1.0.2" - webpack "^4.33.0" - webpack-dev-middleware "^3.7.0" - webpack-hot-middleware "^2.25.0" - webpack-virtual-modules "^0.2.0" - -"@storybook/csf@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" - integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== - dependencies: - lodash "^4.17.15" - -"@storybook/node-logger@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.21.tgz#f11d45042bd57dc69e9037d8f374d9fd0aad8071" - integrity sha512-8xibncy873JXePCK5MC0qem1MKtWI1Lc4hv6rwURSwYpZtkO7yElay3XAFGUSfz8qFJkoDBmMTxBR3fp4Dln7g== - dependencies: - "@types/npmlog" "^4.1.2" - chalk "^3.0.0" - core-js "^3.0.1" - npmlog "^4.1.2" - pretty-hrtime "^1.0.3" - regenerator-runtime "^0.13.3" - -"@storybook/react-native-server@^5.3.23": - version "5.3.23" - resolved "https://registry.yarnpkg.com/@storybook/react-native-server/-/react-native-server-5.3.23.tgz#27ef61a74ec991b3d56690cd1dd9eba30718f3a5" - integrity sha512-1jGHwikc6BVoEW8tdJeYvnY1N2+cHyzit9xiXL9WXofiiYERoL4ENj1pgVp+AGA+yUYBsuSzeN7Hqp/LwdJ1Ug== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/channel-websocket" "5.3.21" - "@storybook/core" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/ui" "5.3.21" - commander "^4.0.1" - core-js "^3.0.1" - global "^4.3.2" - react "^16.6.0" - react-dom "^16.8.3" - uuid "^3.3.2" - webpack "^4.33.0" - ws "^7.1.2" - -"@storybook/react-native@^5.3.25": - version "5.3.25" - resolved "https://registry.yarnpkg.com/@storybook/react-native/-/react-native-5.3.25.tgz#681c9cdcadba7eda88716f5d383ea47558367825" - integrity sha512-KPctJdk1++k4byblqTwULmxKDADsRAMat9BgMTx3Gewk4PjMbsbKCvRK7+AlJeNjz/kEsf9L6Y25y8lrw3rPXA== - dependencies: - "@emotion/core" "^10.0.20" - "@emotion/native" "^10.0.14" - "@storybook/addons" "5.3.21" - "@storybook/channel-websocket" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/core-events" "5.3.21" - core-js "^3.0.1" - emotion-theming "^10.0.19" - react-native-swipe-gestures "^1.0.4" - -"@storybook/router@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.21.tgz#32b08e5daa90a6ffa024bb670b874525a712a901" - integrity sha512-c29m5UikK5Q1lyd6FltOGFhIcpd6PIb855YS3OUNe3F6ZA1tfJ+aNKrCBc65d1c+fvCGG76dYYYv0RvwEmKXXg== - dependencies: - "@reach/router" "^1.2.1" - "@storybook/csf" "0.0.1" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - util-deprecate "^1.0.2" - -"@storybook/theming@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.21.tgz#ae2dc101aa57c3be4df1724ae729e11bad118e0b" - integrity sha512-FZbxjizqdO9lV5LUixPio/7+6UdPiswCzTJn8Hcot9uwwgfnrViRdN7xyjmSYRqv9nHP3OlYbtdeCAgZ4aPq8g== - dependencies: - "@emotion/core" "^10.0.20" - "@emotion/styled" "^10.0.17" - "@storybook/client-logger" "5.3.21" - core-js "^3.0.1" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.19" - global "^4.3.2" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - resolve-from "^5.0.0" - ts-dedent "^1.1.0" - -"@storybook/ui@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.21.tgz#b42568e03353b47aaab1b6449311f38858585f81" - integrity sha512-OUf8JYY9LN+XfzLSZE6KtboITGDL6C8Z0W9QOXM5LJwFLv4PkANK/f9qsB5vVHFm7vhoO96butFzs6SjTKhxkw== - dependencies: - "@emotion/core" "^10.0.20" - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - copy-to-clipboard "^3.0.8" - core-js "^3.0.1" - core-js-pure "^3.0.1" - emotion-theming "^10.0.19" - fast-deep-equal "^2.0.1" - fuse.js "^3.4.6" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - qs "^6.6.0" - react "^16.8.3" - react-dom "^16.8.3" - react-draggable "^4.0.3" - react-helmet-async "^1.0.2" - react-hotkeys "2.0.0" - react-sizeme "^2.6.7" - regenerator-runtime "^0.13.2" - resolve-from "^5.0.0" - semver "^6.0.0" - store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" - "@styled-system/background@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" @@ -4201,13 +2927,6 @@ dependencies: "@styled-system/core" "^5.1.2" -"@styled-system/theme-get@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049" - integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ== - dependencies: - "@styled-system/core" "^5.1.2" - "@styled-system/typography@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" @@ -4434,16 +3153,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/html-minifier-terser@^5.0.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" - integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== - -"@types/is-function@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" - integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -4484,15 +3193,10 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/json-schema@^7.0.5": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== - -"@types/lodash@4.14.149": - version "4.14.149" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" - integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== +"@types/lodash@4.14.170": + version "4.14.170" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" + integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== "@types/luxon@1.15.2": version "1.15.2" @@ -4526,11 +3230,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== -"@types/npmlog@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.3.tgz#9c24b49a97e25cf15a890ff404764080d7942132" - integrity sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -4556,13 +3255,6 @@ resolved "https://registry.yarnpkg.com/@types/query-string/-/query-string-5.0.1.tgz#6cb41c724cb1644d56c2d1dae7c7b204e706b39e" integrity sha512-qlH3YtJ5ipp6z5SU9G0LJsBnNEZqTKPeGjNIyMcGD5Dhbooz0CCsW/sILsgb+LBRrDeTehRtQviXV2kfLm3dqg== -"@types/reach__router@^1.2.3": - version "1.3.9" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.9.tgz#d3aaac0072665c81063cc6c557c18dadd642b226" - integrity sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w== - dependencies: - "@types/react" "*" - "@types/react-native-push-notification@^7.3.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@types/react-native-push-notification/-/react-native-push-notification-7.3.0.tgz#5c998134347c1e8a2ddb28524349acf12cfbb243" @@ -4583,13 +3275,6 @@ "@types/react" "*" "@types/relay-runtime" "*" -"@types/react-syntax-highlighter@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz#d86d17697db62f98046874f62fdb3e53a0bbc4cd" - integrity sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg== - dependencies: - "@types/react" "*" - "@types/react-test-renderer@^16.9.3": version "16.9.3" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" @@ -4597,13 +3282,6 @@ dependencies: "@types/react" "*" -"@types/react-textarea-autosize@^4.3.3": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.6.tgz#f56f7b41aee9fb0310b6e32a8d2a77eb9a5893db" - integrity sha512-cTf8tCem0c8A7CERYbTuF+bRFaqYu7N7HLCa6ZhUhDx8XnUsTpGx5udMWljt87JpciUKuUkImKPEsy6kcKhrcQ== - dependencies: - "@types/react" "*" - "@types/react-tracking@7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@types/react-tracking/-/react-tracking-7.0.1.tgz#aa431b621c9fbee5d5a56844039216bfbfe3f713" @@ -4650,11 +3328,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -4665,25 +3338,20 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/styled-components@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.3.tgz#8287e54e446302369eecc521243a2f32cf9122ee" - integrity sha512-LzntHlOKEOxUxMkVmQPNG88TsldeHO2NlwNkzHnw4wL8qhHQgd7u+u3yw84hZgoFh4ugsLCbFtjYcbP7v5WC5Q== +"@types/styled-components@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.2.tgz#4d60af452fd35e6be6bc7a46d1a317daaab613ea" + integrity sha512-LIm9OqdtG4WHDGkdPDOGpeIlIVYs2IBxXsW5xgt4tKwY/VGY40YvmlUq69GbHkvX+i35236GOcXh6DmYCFDrDg== dependencies: "@types/node" "*" "@types/react" "*" -"@types/styled-system@5.1.12": - version "5.1.12" - resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.12.tgz#4f3ca8da3dffe3c5a6cc3b2a97f51b41464c104a" - integrity sha512-7x4BYKKfK9QewfsFC2x5r9BK/OrfX+JF/1P21jKPMHruawDw9gvG7bTZgTVk6YkzDO2JUlsk4i8hdiAepAhD0g== +"@types/styled-system@5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.9.tgz#8baac8f6eca9e0bd5768c175ca5ce1f2d6f61ade" + integrity sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ== dependencies: - csstype "^3.0.2" - -"@types/styled-system__theme-get@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz#c3884e8f15641603503dc1d49f9d282dce11e5fb" - integrity sha512-+i4VZ5wuYKMU8oKPmUlzc9r2RhpSNOK061Khtrr7X0sOQEcIyhUtrDusuMkp5ZR3D05Xopn3zybTPyUSQkKGAA== + csstype "^2.6.9" "@types/supercluster@5.0.0": version "5.0.0" @@ -4692,44 +3360,6 @@ dependencies: "@types/geojson" "*" -"@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== - -"@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== - dependencies: - source-map "^0.6.1" - -"@types/webpack-env@^1.15.0": - version "1.16.2" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.2.tgz#8db514b059c1b2ae14ce9d7bb325296de6a9a0fa" - integrity sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw== - -"@types/webpack-sources@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" - integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.8": - version "4.41.30" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" - integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" - "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -4761,166 +3391,11 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.3.tgz#5a85024796bffe0eb01601bfc180fe218356dba4" integrity sha512-XxZFKnxzTfm+DR8MMBA35UUXfUPmjPpi8HJ90VZg7q/LIbtiOhVGJ26gNnATcflcpnIyf2Qm9A+oEhswaqoDpA== -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - "@xobotyi/scrollbar-width@^1.9.5": version "1.9.5" resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -4964,14 +3439,6 @@ accepts@~1.3.4: mime-types "~2.1.16" negotiator "0.6.1" -accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -4990,21 +3457,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - acorn@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - agent-base@4, agent-base@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" @@ -5034,29 +3491,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -airbnb-js-shims@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" - integrity sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - array.prototype.flatmap "^1.2.1" - es5-shim "^4.5.13" - es6-shim "^0.35.5" - function.prototype.name "^1.1.0" - globalthis "^1.0.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0 || ^1.0.0" - object.getownpropertydescriptors "^2.0.3" - object.values "^1.1.0" - promise.allsettled "^1.0.0" - promise.prototype.finally "^3.1.0" - string.prototype.matchall "^4.0.0 || ^3.0.1" - string.prototype.padend "^3.0.0" - string.prototype.padstart "^3.0.0" - symbol.prototype.description "^1.0.0" - airbnb-prop-types@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz#43147a5062dd2a4a5600e748a47b64004cc5f7fc" @@ -5073,22 +3507,11 @@ airbnb-prop-types@^2.13.2: prop-types-exact "^1.2.0" react-is "^16.8.6" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -5108,13 +3531,6 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" @@ -5122,7 +3538,7 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^3.0.0, ansi-colors@^3.2.1: +ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== @@ -5179,11 +3595,6 @@ ansi-gray@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" @@ -5248,13 +3659,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-to-html@^0.6.11: - version "0.6.15" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7" - integrity sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ== - dependencies: - entities "^2.0.0" - ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -5273,14 +3677,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - anymatch@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -5302,12 +3698,7 @@ apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: dependencies: fast-json-stable-stringify "^2.0.0" -app-root-dir@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= - -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -5390,21 +3781,15 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= -array-includes@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" +array-iterate@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6" + integrity sha1-hlv3+K851rCYLGCQKRSsdrwBCPY= array-map@~0.0.0: version "0.0.0" @@ -5454,27 +3839,6 @@ array.prototype.flat@^1.2.1: es-abstract "^1.10.0" function-bind "^1.1.1" -array.prototype.flatmap@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -array.prototype.map@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" - integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.5" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -5485,16 +3849,6 @@ asap@~2.0.3, asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -5505,14 +3859,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -5528,11 +3874,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-retry@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" @@ -5540,6 +3881,11 @@ async-retry@1.2.3: dependencies: retry "0.12.0" +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.4.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" @@ -5593,18 +3939,16 @@ auto@7.12.3: signale "^1.4.0" tslib "1.10.0" -autoprefixer@^9.7.2: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== +autoprefixer@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.3.1.tgz#71b622174de2b783d5fd99f9ad617b7a3c78443e" dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" + browserslist "^4.3.3" + caniuse-lite "^1.0.30000898" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" + postcss "^7.0.5" + postcss-value-parser "^3.3.1" await-to-js@^2.1.1: version "2.1.1" @@ -5643,41 +3987,6 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-helper-evaluate-path@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" - integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== - -babel-helper-flip-expressions@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" - integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= - -babel-helper-is-nodes-equiv@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" - integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= - -babel-helper-is-void-0@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" - integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= - -babel-helper-mark-eval-scopes@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" - integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= - -babel-helper-remove-or-void@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" - integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= - -babel-helper-to-multiple-sequence-expressions@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" - integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== - babel-jest@25.2.6, babel-jest@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.2.6.tgz#fe67ff4d0db3626ca8082da8881dd5e84e07ae75" @@ -5691,50 +4000,12 @@ babel-jest@25.2.6, babel-jest@^25.2.6: chalk "^3.0.0" slash "^3.0.0" -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-plugin-import-graphql@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/babel-plugin-import-graphql/-/babel-plugin-import-graphql-2.7.0.tgz#984b2330afa05cce5ff81e577f7d82cdb86aea6d" + integrity sha512-PCNT6hLXaFxb7bsXJ+ALFnEnZUK2Hj1HhM0nWv4XDpuYf8arulm7ZAu/Z0MBItLkcik/TAokGX9IUzwyTYMXvQ== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-add-react-displayname@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" - integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: - version "10.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" - integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/serialize" "^0.11.16" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - escape-string-regexp "^1.0.5" - find-root "^1.1.0" - source-map "^0.5.7" - -babel-plugin-import-graphql@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/babel-plugin-import-graphql/-/babel-plugin-import-graphql-2.7.0.tgz#984b2330afa05cce5ff81e577f7d82cdb86aea6d" - integrity sha512-PCNT6hLXaFxb7bsXJ+ALFnEnZUK2Hj1HhM0nWv4XDpuYf8arulm7ZAu/Z0MBItLkcik/TAokGX9IUzwyTYMXvQ== - dependencies: - graphql-tag "^2.9.2" + graphql-tag "^2.9.2" babel-plugin-istanbul@^6.0.0: version "6.0.0" @@ -5754,7 +4025,7 @@ babel-plugin-jest-hoist@^25.2.6: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: +babel-plugin-macros@^2.0.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -5763,106 +4034,6 @@ babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: cosmiconfig "^6.0.0" resolve "^1.12.0" -babel-plugin-minify-builtins@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" - integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== - -babel-plugin-minify-constant-folding@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" - integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-minify-dead-code-elimination@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" - integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-mark-eval-scopes "^0.4.3" - babel-helper-remove-or-void "^0.4.3" - lodash "^4.17.11" - -babel-plugin-minify-flip-comparisons@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" - integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-minify-guarded-expressions@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" - integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - -babel-plugin-minify-infinity@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" - integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= - -babel-plugin-minify-mangle-names@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" - integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== - dependencies: - babel-helper-mark-eval-scopes "^0.4.3" - -babel-plugin-minify-numeric-literals@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" - integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= - -babel-plugin-minify-replace@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" - integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== - -babel-plugin-minify-simplify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" - integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - babel-helper-is-nodes-equiv "^0.0.1" - babel-helper-to-multiple-sequence-expressions "^0.5.0" - -babel-plugin-minify-type-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" - integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - babel-plugin-relay@10.1.3: version "10.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-relay/-/babel-plugin-relay-10.1.3.tgz#3c52f06869c2295766f4df63736b9ad887386af3" @@ -5890,65 +4061,6 @@ babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== -babel-plugin-transform-inline-consecutive-adds@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" - integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= - -babel-plugin-transform-member-expression-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" - integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= - -babel-plugin-transform-merge-sibling-variables@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" - integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= - -babel-plugin-transform-minify-booleans@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" - integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= - -babel-plugin-transform-property-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" - integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= - dependencies: - esutils "^2.0.2" - -babel-plugin-transform-regexp-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" - integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= - -babel-plugin-transform-remove-console@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" - integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= - -babel-plugin-transform-remove-debugger@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" - integrity sha1-QrcnYxyXl44estGZp67IShgznvI= - -babel-plugin-transform-remove-undefined@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" - integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-transform-simplify-comparison-operators@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" - integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= - -babel-plugin-transform-undefined-to-void@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" - integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= - babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" @@ -5991,34 +4103,10 @@ babel-preset-jest@^25.2.6: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^25.2.6" -"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" - integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== - dependencies: - babel-plugin-minify-builtins "^0.5.0" - babel-plugin-minify-constant-folding "^0.5.0" - babel-plugin-minify-dead-code-elimination "^0.5.1" - babel-plugin-minify-flip-comparisons "^0.4.3" - babel-plugin-minify-guarded-expressions "^0.4.4" - babel-plugin-minify-infinity "^0.4.3" - babel-plugin-minify-mangle-names "^0.5.0" - babel-plugin-minify-numeric-literals "^0.4.3" - babel-plugin-minify-replace "^0.5.0" - babel-plugin-minify-simplify "^0.5.1" - babel-plugin-minify-type-constructors "^0.4.3" - babel-plugin-transform-inline-consecutive-adds "^0.4.3" - babel-plugin-transform-member-expression-literals "^6.9.4" - babel-plugin-transform-merge-sibling-variables "^6.9.4" - babel-plugin-transform-minify-booleans "^6.9.4" - babel-plugin-transform-property-literals "^6.9.4" - babel-plugin-transform-regexp-constructors "^0.4.3" - babel-plugin-transform-remove-console "^6.9.4" - babel-plugin-transform-remove-debugger "^6.9.4" - babel-plugin-transform-remove-undefined "^0.5.0" - babel-plugin-transform-simplify-comparison-operators "^6.9.4" - babel-plugin-transform-undefined-to-void "^6.9.4" - lodash "^4.17.11" +bail@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + integrity sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q= balanced-match@^1.0.0: version "1.0.0" @@ -6030,16 +4118,16 @@ base-64@0.1.0: resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= -base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base64-js@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw== +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -6053,11 +4141,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -batch-processor@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" - integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= - bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -6080,21 +4163,6 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - binaryextensions@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" @@ -6114,42 +4182,11 @@ bluebird@2.9.6: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.9.6.tgz#1fc3a6b1685267dc121b5ec89b32ce069d81ab7d" integrity sha1-H8OmsWhSZ9wSG17ImzLOBp2Bq30= -bluebird@^3.3.5, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bmp-js@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -6172,20 +4209,6 @@ bower-config@^1.4.0: untildify "^2.1.0" wordwrap "^0.0.3" -boxen@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - bplist-creator@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" @@ -6225,7 +4248,7 @@ braces@^2.3.0: split-string "^3.0.2" to-regex "^3.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -6241,18 +4264,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" @@ -6264,86 +4282,13 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== - dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" - -browserslist@^4.12.0, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.4.tgz#4477b737db6a1b07077275b24791e680d4300425" dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" + caniuse-lite "^1.0.30000899" + electron-to-chromium "^1.3.82" + node-releases "^1.0.1" bser@^2.0.0: version "2.0.0" @@ -6394,20 +4339,6 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -6416,71 +4347,16 @@ buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^1.1.1: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6496,14 +4372,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -6531,19 +4399,30 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -6554,15 +4433,9 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= - -caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001244" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz#a6dc49ad5fa02d81d04373ec3f5ceabc3da06abf" - integrity sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q== +caniuse-lite@^1.0.30000898, caniuse-lite@^1.0.30000899: + version "1.0.30000912" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz#08e650d4090a9c0ab06bfd2b46b7d3ad6dcaea28" capture-exit@^2.0.0: version "2.0.0" @@ -6579,16 +4452,16 @@ card-validator@^3.0.0: credit-card-type "^5.0.0" lodash "3.10.1" -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +ccount@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + integrity sha1-U7ai+BW7d7nChx97mnLDol8djok= + chalk@*, chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -6609,7 +4482,7 @@ chalk@0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" -chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -6666,6 +4539,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-html4@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + integrity sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA= + character-entities-legacy@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" @@ -6725,67 +4603,20 @@ cheerio@0.22.0, cheerio@^1.0.0-rc.2: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@^2.0.4, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== -chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== class-utils@^0.3.5: version "0.3.6" @@ -6797,18 +4628,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - clean-stack@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" @@ -6819,11 +4638,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -6848,16 +4662,6 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== -cli-table3@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" @@ -6878,19 +4682,14 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clipboard@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" - integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== +cliui@^3.0.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" cliui@^4.0.0: version "4.1.0" @@ -6924,6 +4723,14 @@ clone-buffer@^1.0.0: resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= +clone-regexp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" + integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw== + dependencies: + is-regexp "^1.0.0" + is-supported-regexp-flag "^1.0.0" + clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -6968,6 +4775,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collapse-white-space@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + integrity sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -7031,11 +4843,6 @@ colorette@^1.0.7: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" @@ -7065,11 +4872,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - command-exists@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" @@ -7124,16 +4926,6 @@ commander@^2.18.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.1, commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -7184,16 +4976,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" @@ -7226,33 +5008,11 @@ connect@^3.6.5: parseurl "~1.3.2" utils-merge "1.0.1" -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -7260,13 +5020,6 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.5.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -7274,53 +5027,18 @@ convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.3.1: +copy-to-clipboard@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.14.0, core-js-compat@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" - integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-pure@^3.0.1: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" - integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== - core-js@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -7356,11 +5074,6 @@ core-js@^3.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" integrity sha512-MQx/7TLgmmDVamSyfE+O+5BHvG1aUGj/gHhLn1wVtm2B5u1eVIPvh7vkfjwWKNCjrTJB8+He99IntSQ1qP+vYQ== -core-js@^3.0.1, core-js@^3.0.4: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" - integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== - core-js@^3.3.2: version "3.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.1.tgz#76dd6828412900ab27c8ce0b22e6114d7ce21b18" @@ -7371,14 +5084,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -corejs-upgrade-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" - integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== - dependencies: - resolve-from "^5.0.0" - webpack "^4.38.0" - cosmiconfig@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -7440,37 +5145,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - create-react-class@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" @@ -7480,14 +5154,6 @@ create-react-class@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" -create-react-context@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" - integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - credit-card-type@^5.0.0: version "5.0.4" resolved "https://registry.yarnpkg.com/credit-card-type/-/credit-card-type-5.0.4.tgz#2dd9df280411ce2bb91ed95ac31e814605717aed" @@ -7500,17 +5166,6 @@ cross-fetch@^3.0.4, cross-fetch@^3.0.6: dependencies: node-fetch "2.6.1" -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-0.2.9.tgz#bd67f96c07efb6303b7fe94c1e979f88478e0a39" @@ -7527,6 +5182,17 @@ cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" @@ -7545,23 +5211,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -7575,25 +5224,6 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^3.0.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" - css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" @@ -7604,17 +5234,6 @@ css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" -css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== - dependencies: - boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" - css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -7625,15 +5244,6 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" -css-to-react-native@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" - integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^3.3.0" - css-to-react-native@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.1.tgz#cf0f61e0514846e2d4dc188b0886e29d8bef64a2" @@ -7669,15 +5279,15 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== -css-what@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" - integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +css@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" cssom@^0.4.1: version "0.4.4" @@ -7701,31 +5311,28 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== -csstype@^2.5.7: - version "2.6.17" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" - integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== - -csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +csstype@^2.6.9: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== csstype@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cycle@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - danger-plugin-jest@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/danger-plugin-jest/-/danger-plugin-jest-1.3.0.tgz#7340e3c45f9f1707a57d031d8e5581e23f68199d" @@ -7816,7 +5423,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -7837,13 +5444,6 @@ debug@4, debug@^4.3.1: dependencies: ms "2.1.2" -debug@^3.0.0, debug@^3.2.5: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -7851,14 +5451,22 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -7885,18 +5493,6 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= -deep-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -7907,11 +5503,6 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deep-object-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" - integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== - deepmerge@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -7968,16 +5559,24 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -8007,14 +5606,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -8040,35 +5631,6 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detect-secrets@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/detect-secrets/-/detect-secrets-1.0.6.tgz#ce6f46840e666f7d396ffb9b458c29ce9fdb5afd" - integrity sha512-bAEmXtMJNS/By/TCg9uSW9Sp0V1Z0N+uwlQWFUMbCVri5Yq5rM8gVs+2zzNIjNOy36o5kANZRrMc+22Zf6eRFQ== - dependencies: - debug "^4.1.0" - which "^1.3.1" - devtools-protocol@0.0.847576: version "0.0.847576" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.847576.tgz#2f201bfb68aa9ef4497199fbd7f5d5dfde3b200b" @@ -8094,15 +5656,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@2.0.0, dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" @@ -8111,13 +5664,6 @@ dir-glob@2.0.0, dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -8126,15 +5672,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -8148,11 +5685,6 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - domelementtype@1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -8168,11 +5700,6 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== -domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -8187,13 +5714,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== - dependencies: - domelementtype "^2.2.0" - domutils@1.5.1, domutils@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -8210,52 +5730,18 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.5.2, domutils@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-defaults@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz#032c024f4b5906d9990eb06d722dc74cc60ec1bd" - integrity sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q== - dependencies: - dotenv "^6.2.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv-webpack@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" - integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: - dotenv-defaults "^1.0.2" + is-obj "^1.0.0" dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -dotenv@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== - dotenv@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" @@ -8271,21 +5757,6 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - easy-peasy@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/easy-peasy/-/easy-peasy-3.3.0.tgz#1ae7cbaa834dad5aa404f1437726fb8c0eed3cef" @@ -8333,35 +5804,9 @@ ejs@^2.5.9: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -ejs@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.723: - version "1.3.774" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz#4d6661a23119e35151646c9543b346bb3beca423" - integrity sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA== - -element-resize-detector@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.3.tgz#5078d9b99398fe4c589f8c8df94ff99e5d413ff3" - integrity sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ== - dependencies: - batch-processor "1.0.0" - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +electron-to-chromium@^1.3.82: + version "1.3.85" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.85.tgz#5c46f790aa96445cabc57eb9d17346b1e46476fe" emoji-regex@^7.0.1: version "7.0.3" @@ -8378,20 +5823,6 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emotion-theming@^10.0.19: - version "10.0.27" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" - integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.5" - hoist-non-react-statics "^3.3.0" - encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -8409,7 +5840,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -8426,15 +5857,6 @@ enhanced-resolve@3.3.0: object-assign "^4.0.1" tapable "^0.2.5" -enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - enquirer@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.1.tgz#f1bf52ea38470525f41412d723a62ba6868559c6" @@ -8543,13 +5965,6 @@ errno@^0.1.3: dependencies: prr "~1.0.1" -errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -8603,28 +6018,6 @@ es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0: is-regex "^1.0.4" object-keys "^1.0.12" -es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - es-abstract@^1.6.1: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -8636,25 +6029,6 @@ es-abstract@^1.6.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" - es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -8664,20 +6038,6 @@ es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-shim@^4.5.13: - version "4.5.15" - resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.15.tgz#6a26869b261854a3b045273f5583c52d390217fe" - integrity sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw== - es6-promise@^4.0.3: version "4.2.4" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" @@ -8690,31 +6050,21 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -es6-shim@^0.35.5: - version "0.35.6" - resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" - integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -8732,14 +6082,6 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -8750,28 +6092,11 @@ esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -8792,36 +6117,11 @@ eventemitter3@^3.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.1.tgz#4ce66c3fc5b5a6b9f2245e359e1938f1ab10f960" integrity sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" @@ -8871,6 +6171,14 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execall@^1.0.0: + name execa + version "1.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= + dependencies: + clone-regexp "^1.0.0" + exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" @@ -8913,42 +6221,6 @@ expect@^25.2.7: jest-message-util "^25.2.6" jest-regex-util "^25.2.6" -express@^4.17.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -8971,6 +6243,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= + extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -9103,20 +6380,6 @@ fastest-stable-stringify@^2.0.2: resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== -fault@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" - integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== - dependencies: - format "^0.2.0" - -faye-websocket@~0.11.1: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -9192,11 +6455,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -9204,40 +6462,26 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.2.0: +figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-loader@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" - integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" - -file-system-cache@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" - integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: - bluebird "^3.3.5" - fs-extra "^0.30.0" - ramda "^0.21.0" + flat-cache "^1.2.1" + object-assign "^4.0.1" file-type@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -9273,19 +6517,6 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -9295,24 +6526,6 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -9320,18 +6533,6 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -9339,6 +6540,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -9379,26 +6587,21 @@ first-chunk-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" fn-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== -focus-lock@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.9.1.tgz#e8ec7d4821631112193ae09258107f531588da01" - integrity sha512-/2Nj60Cps6yOLSO+CkVbeSKfwfns5XbX6HOedIK9PdzODP04N9c3xqOcPXayN0WsT9YjJvAnXmI0NdqNIDf5Kw== - dependencies: - tslib "^2.0.3" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -9409,20 +6612,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - form-data@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -9449,11 +6638,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= - formik@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570" @@ -9468,11 +6652,6 @@ formik@2.1.4: tiny-warning "^1.0.2" tslib "^1.10.0" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -9485,14 +6664,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -9503,17 +6674,6 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" @@ -9541,7 +6701,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -9567,23 +6727,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -9602,11 +6745,6 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -9621,11 +6759,6 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" -fuse.js@^3.4.6: - version "3.6.1" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" - integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -9665,15 +6798,6 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - get-monorepo-packages@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz#3eee88d30b11a5f65955dec6ae331958b2a168e4" @@ -9788,21 +6912,6 @@ gitlog@^3.1.2: debug "^3.1.0" lodash.assign "^4.2.0" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -9811,13 +6920,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -9859,13 +6961,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -9884,16 +6979,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -global@^4.3.2, global@^4.4.0, global@~4.4.0: +global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== @@ -9906,44 +6992,66 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globalthis@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: - define-properties "^1.1.3" + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" -globby@8.0.2, globby@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= dependencies: array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" + dir-glob "^2.0.0" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= +globby@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" dependencies: array-union "^1.0.1" dir-glob "^2.0.0" + fast-glob "^2.0.2" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + +gonzales-pe@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" + integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw== dependencies: - delegate "^3.1.2" + minimist "1.1.x" got@^7.0.0: version "7.1.0" @@ -9970,11 +7078,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -graceful-fs@^4.2.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - grapheme-splitter@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -10023,19 +7126,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -10063,11 +7153,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -10092,11 +7177,6 @@ has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -10147,48 +7227,11 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hasurl@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37" integrity sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ== -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - hermes-engine@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.5.1.tgz#601115e4b1e0a17d9aa91243b96277de4e926e09" @@ -10201,20 +7244,6 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -highlight.js@~9.13.0: - version "9.13.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" - integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hoist-non-react-statics@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" @@ -10260,11 +7289,6 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" @@ -10275,35 +7299,12 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-webpack-plugin@^4.0.0-beta.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" - integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.9.1: +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +htmlparser2@^3.9.1, htmlparser2@^3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= @@ -10315,27 +7316,6 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -10346,22 +7326,6 @@ http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -10379,11 +7343,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" @@ -10461,23 +7420,11 @@ iconv-lite@^0.4.17: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -10490,6 +7437,10 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== +ignore@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" + image-q@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" @@ -10510,11 +7461,6 @@ immer-peasy@3.1.3: resolved "https://registry.yarnpkg.com/immer-peasy/-/immer-peasy-3.1.3.tgz#d0ea8d388f47ec6b15ab2ca19ffb9f0bf4310110" integrity sha512-WzoZ96A93jOmcDOLNChMWAqy+ZU8vEYQx2DcKjgo7P5SToiJs+GL+5yQbWzH8X02Lhvv6xrGgVNa1xbki66Eow== -immer@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" - integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== - immutable@^4.0.0-rc.12: version "4.0.0-rc.12" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" @@ -10525,13 +7471,6 @@ immutable@~3.7.6: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - import-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" @@ -10562,13 +7501,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - import-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -10576,6 +7508,10 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -10589,7 +7525,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.2.0: +indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -10599,10 +7535,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= inflight@^1.0.4: version "1.0.6" @@ -10612,51 +7548,32 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.4, inherits@~2.0.1: +inherits@2, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@^1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inline-style-prefixer@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b" - integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg== - dependencies: - css-in-js-utils "^2.0.0" - -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inline-style-prefixer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b" + integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg== + dependencies: + css-in-js-utils "^2.0.0" inquirer@^3.0.6: version "3.3.0" @@ -10716,51 +7633,23 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= -interpret@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -invariant@2.2.4, invariant@^2.2.3, invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -10776,11 +7665,6 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -10800,6 +7684,11 @@ is-alphabetical@^1.0.0: resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" integrity sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg= +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + is-alphanumerical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" @@ -10808,13 +7697,6 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.0.4, is-arguments@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -10825,51 +7707,27 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= -is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^1.0.2" - -is-buffer@^1.1.5: +is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= + dependencies: + builtin-modules "^1.0.0" + is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" -is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -10931,19 +7789,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-dom@^1.0.9: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" - integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== - dependencies: - is-object "^1.0.1" - is-window "^1.0.2" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -10956,11 +7801,6 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -10993,13 +7833,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-glob@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -11014,13 +7847,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" @@ -11031,25 +7857,10 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -11062,7 +7873,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -11079,6 +7890,25 @@ is-odd@^1.0.0: dependencies: is-number "^3.0.0" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -11110,14 +7940,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -11128,11 +7950,6 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= -is-root@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - is-scoped@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" @@ -11140,11 +7957,6 @@ is-scoped@^1.0.0: dependencies: scoped-regex "^1.0.0" -is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -11159,16 +7971,16 @@ is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== - is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= +is-supported-regexp-flag@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" + integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -11176,13 +7988,6 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -11198,16 +8003,21 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-window@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" - integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= +is-whitespace-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" + integrity sha1-muAXbzKCtlRXoZks2whPil+DPjs= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-word-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" + integrity sha1-WgP6HqkazopusMfNdw64bWXIvvs= + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -11218,16 +8028,11 @@ is-wsl@^2.1.1: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isbinaryfile@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -11336,19 +8141,6 @@ iterall@^1.1.3, iterall@^1.2.2: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== -iterate-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" - integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== - -iterate-value@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" - java-properties@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" @@ -11809,6 +8601,13 @@ jest-snapshot@test: natural-compare "^1.4.0" pretty-format "21.3.0-beta.15" +jest-styled-components@7.0.0-2: + version "7.0.0-2" + resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.0-2.tgz#c827ab84a3e69c03579b32963f9e55f0b72f75a4" + integrity sha512-5Rtv9C1qaqamc1RNwg0IquGS+CGSVXbySVOtC3vs4XjcfI+RWTb+5V1lqIU+Qj4dAyk/3x+seiLvnJ+X80n8Gw== + dependencies: + css "^2.2.4" + jest-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" @@ -11935,14 +8734,6 @@ jest-worker@^25.2.6: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^25.4.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest@25.2.7: version "25.2.7" resolved "https://registry.yarnpkg.com/jest/-/jest-25.2.7.tgz#3929a5f35cdd496f7756876a206b99a94e1e09ae" @@ -11993,6 +8784,14 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.10.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -12061,7 +8860,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -12087,11 +8886,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - json5@2.1.0, json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -12104,20 +8898,6 @@ json5@^0.5.0: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" @@ -12263,6 +9043,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +known-css-properties@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.9.0.tgz#28f8a7134cfa3b0aa08b1e5edf64a57f64fc23af" + ky-universal@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" @@ -12276,16 +9060,12 @@ ky@^0.12.0: resolved "https://registry.yarnpkg.com/ky/-/ky-0.12.0.tgz#c05be95e6745ba422a6d2cc8ae964164962279f9" integrity sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ== -lazy-universal-dotenv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" - integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: - "@babel/runtime" "^7.5.0" - app-root-dir "^1.0.2" - core-js "^3.0.4" - dotenv "^8.0.0" - dotenv-expand "^5.1.0" + invert-kv "^1.0.0" lcid@^2.0.0: version "2.0.0" @@ -12294,6 +9074,18 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +leprechaun@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/leprechaun/-/leprechaun-0.0.2.tgz#8b96514a9e634c53fbe59a8094f3378c8fb2084d" + integrity sha1-i5ZRSp5jTFP75ZqAlPM3jI+yCE0= + dependencies: + log-symbols "^1.0.2" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -12391,20 +9183,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -12414,24 +9192,6 @@ loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - localforage@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" @@ -12502,11 +9262,6 @@ lodash.compact@^3.0.1: resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -12610,7 +9365,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0: +lodash.merge@^4.4.0, lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -12640,6 +9395,11 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -12685,7 +9445,7 @@ lodash@3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12700,6 +9460,20 @@ lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" + integrity sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ== + dependencies: + chalk "^2.0.1" + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -12741,6 +9515,11 @@ lolex@^5.0.0: dependencies: "@sinonjs/commons" "^1.7.0" +longest-streak@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" + integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA== + loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -12755,26 +9534,19 @@ loose-envify@^1.1.0: dependencies: js-tokens "^3.0.0" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: - tslib "^2.0.3" + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= -lowlight@~1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" - integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== - dependencies: - fault "^1.0.2" - highlight.js "~9.13.0" - lru-cache@^2.5.0: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" @@ -12788,13 +9560,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -12826,14 +9591,6 @@ make-dir@^1.1.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" @@ -12841,13 +9598,6 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@^1.1.1: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" @@ -12872,6 +9622,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" @@ -12884,22 +9644,28 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-to-jsx@^6.11.4: - version "6.11.4" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" - integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== - dependencies: - prop-types "^15.6.2" - unquote "^1.1.0" +markdown-escapes@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" + integrity sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg= -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== +markdown-table@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" + integrity sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw= + +mathml-tag-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578" + integrity sha1-jUEmgWi/htEQK5gQnijlMeejRXg= + +mdast-util-compact@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" + integrity sha1-zbX4TitqLTEU3zO9BdnLMuPECDo= dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" + unist-util-modify-children "^1.0.0" + unist-util-visit "^1.1.0" mdn-data@2.0.14: version "2.0.14" @@ -12916,11 +9682,6 @@ meant@^1.0.1: resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - mem-fs-editor@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-5.1.0.tgz#51972241640be8567680a04f7adaffe5fc603667" @@ -12973,7 +9734,7 @@ memoizerific@^1.11.3: dependencies: map-or-similar "^1.5.0" -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -12981,18 +9742,19 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" merge-stream@^1.0.1: version "1.0.1" @@ -13010,11 +9772,6 @@ merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - metro-babel-register@0.58.0: version "0.58.0" resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.58.0.tgz#5c44786d49a044048df56cf476a2263491d4f53a" @@ -13382,11 +10139,6 @@ metro@0.58.0, metro@^0.58.0: xpipe "^1.0.5" yargs "^14.2.0" -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - micromatch@^3.0.3: version "3.1.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.4.tgz#bb812e741a41f982c854e42b421a7eac458796f4" @@ -13441,19 +10193,6 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - "mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -13501,19 +10240,12 @@ mime-types@~2.1.19: dependencies: mime-db "~1.37.0" -mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@1.6.0, mime@^1.3.4: +mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -13523,11 +10255,6 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -13550,28 +10277,31 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@1.1.x: + version "1.1.3" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" + integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= + minimist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" @@ -13587,27 +10317,6 @@ minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -13616,13 +10325,6 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -13630,22 +10332,6 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -13666,7 +10352,7 @@ mkdirp@^0.5.0: dependencies: minimist "0.0.8" -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -13690,28 +10376,11 @@ mout@^1.0.0: resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d" integrity sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -13737,11 +10406,6 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -13805,6 +10469,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +nconf@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/nconf/-/nconf-0.10.0.tgz#da1285ee95d0a922ca6cee75adcf861f48205ad2" + integrity sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q== + dependencies: + async "^1.4.0" + ini "^1.3.0" + secure-keys "^1.0.0" + yargs "^3.19.0" + nearley@^2.7.10: version "2.11.0" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" @@ -13828,29 +10502,11 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" @@ -13879,35 +10535,6 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -13940,10 +10567,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.29, node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.4.tgz#2d585de8c6c81d00017e063e7810a63889aa6756" + dependencies: + semver "^5.3.0" node-stream-zip@^1.9.1: version "1.11.3" @@ -13976,6 +10604,16 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -13983,7 +10621,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -13993,6 +10631,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -14020,7 +10663,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -14037,13 +10680,6 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - dependencies: - boolbase "^1.0.0" - nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" @@ -14100,11 +10736,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.10.3, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - object-inspect@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -14125,11 +10756,6 @@ object-keys@^1.0.12: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -14147,16 +10773,6 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" @@ -14187,25 +10803,6 @@ object.fromentries@^2.0.0: function-bind "^1.1.1" has "^1.0.1" -"object.fromentries@^2.0.0 || ^1.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -14283,21 +10880,13 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^6.2.0, open@^6.3.0: +open@^6.2.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== dependencies: is-wsl "^1.1.0" -open@^7.0.0: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - opencollective-postinstall@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" @@ -14354,23 +10943,18 @@ ora@^5.4.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -14443,7 +11027,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.1.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -14478,13 +11062,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -14509,28 +11086,11 @@ p-try@^2.0.0, p-try@^2.1.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.5, pako@~1.0.5: +pako@^1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -14538,17 +11098,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-author@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" @@ -14579,10 +11128,21 @@ parse-diff@^0.7.0: resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== -parse-entities@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== +parse-entities@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + integrity sha1-gRLYhHExnyerrk1klksSL+ThuJA= + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -14655,19 +11215,6 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -14691,11 +11238,6 @@ patch-package@6.2.1: slash "^2.0.0" tmp "^0.0.33" -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -14716,6 +11258,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -14731,11 +11278,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -14748,17 +11290,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -14779,17 +11310,12 @@ picomatch@^2.0.4, picomatch@^2.0.5: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - picomatch@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== -pify@^2.3.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -14799,7 +11325,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.1: +pify@^4.0.0, pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -14856,27 +11382,13 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pkg-up@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -14914,105 +11426,110 @@ pngjs@^3.0.0, pngjs@^3.3.3: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== -pnp-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" - integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== - dependencies: - ts-pnp "^1.1.2" - -polished@^3.3.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.7.2.tgz#ec5ddc17a7d322a574d5e10ddd2a6f01d3e767d1" - integrity sha512-pQKtpZGmsZrW8UUpQMAnR7s3ppHeMQVNyMDKtUyKwuvDmklzcEyM5Kllb3JyE/sE/x7arDmyd35i+4vp99H6sQ== - dependencies: - "@babel/runtime" "^7.12.5" - -popper.js@^1.14.4, popper.js@^1.14.7: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-flexbugs-fixes@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== +postcss-html@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" dependencies: - postcss "^7.0.26" + htmlparser2 "^3.9.2" -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== +postcss-jsx@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" + "@babel/core" "^7.1.2" + optionalDependencies: + postcss-styled ">=0.34.0" -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== +postcss-less@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" + postcss "^7.0.3" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== +postcss-markdown@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" dependencies: - postcss "^7.0.5" + remark "^9.0.0" + unist-util-find-all-after "^1.0.2" -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + +postcss-reporter@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^7.0.2" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + +postcss-safe-parser@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" + postcss "^7.0.0" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== +postcss-sass@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" + dependencies: + gonzales-pe "^4.2.3" + postcss "^7.0.1" + +postcss-scss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + postcss "^7.0.0" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== +postcss-selector-parser@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-styled@>=0.34.0, postcss-styled@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" + +postcss-syntax@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= -postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + +postcss@^6.0.14: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + integrity sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog== + dependencies: + chalk "^2.3.0" + source-map "^0.6.1" + supports-color "^4.4.0" postcss@^7.0.0: version "7.0.14" @@ -15023,16 +11540,7 @@ postcss@^7.0.0: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7.0.5: +postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" dependencies: @@ -15055,11 +11563,6 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@^2.0.5: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== - prettier@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.0.tgz#8a03c7777883b29b37fb2c4348c66a78e980418b" @@ -15070,14 +11573,6 @@ pretty-bytes@^5.1.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.2.0.tgz#96c92c6e95a0b35059253fb33c03e260d40f5a1f" integrity sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w== -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - pretty-format@21.3.0-beta.15: version "21.3.0-beta.15" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.3.0-beta.15.tgz#702708a64be53619b2c10138dc5a594056fd1569" @@ -15134,11 +11629,6 @@ pretty-format@^26.0.1, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - prettyjson@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289" @@ -15147,18 +11637,6 @@ prettyjson@^1.2.1: colors "^1.1.2" minimist "^1.2.0" -prismjs@^1.8.4: - version "1.24.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" - integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== - -prismjs@~1.17.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== - optionalDependencies: - clipboard "^2.0.0" - private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -15179,37 +11657,11 @@ progress@^2.0.1, progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - promise-polyfill@^8.1.3: version "8.2.0" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" integrity sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g== -promise.allsettled@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" - integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== - dependencies: - array.prototype.map "^1.0.3" - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.0.2" - iterate-value "^1.0.2" - -promise.prototype.finally@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" - integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" - function-bind "^1.1.1" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -15241,7 +11693,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -15255,21 +11707,6 @@ property-expr@^2.0.2: resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== -property-information@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -15290,18 +11727,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pull-lock@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pull-lock/-/pull-lock-1.0.0.tgz#6a0ab2719a3b7e6f49838b52168a30b8fdd84188" @@ -15311,14 +11736,6 @@ pull-lock@1.0.0: debug "^4.1.1" execa "^1.0.0" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -15327,25 +11744,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -15369,18 +11772,6 @@ puppeteer@^7.1.0: unbzip2-stream "^1.3.3" ws "^7.2.3" -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@^6.6.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -15412,25 +11803,15 @@ query-string@^6.8.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= quickselect@^1.0.1: version "1.1.1" @@ -15471,49 +11852,11 @@ randexp@^0.4.2: drange "^1.0.0" ret "^0.2.0" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== - dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" - rbush@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" @@ -15531,44 +11874,6 @@ rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-clientside-effect@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.5.tgz#e2c4dc3c9ee109f642fac4f5b6e9bf5bcd2219a3" - integrity sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA== - dependencies: - "@babel/runtime" "^7.12.13" - -react-dev-utils@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" - integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== - dependencies: - "@babel/code-frame" "7.5.5" - address "1.1.2" - browserslist "4.7.0" - chalk "2.4.2" - cross-spawn "6.0.5" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - fork-ts-checker-webpack-plugin "1.5.0" - global-modules "2.0.0" - globby "8.0.2" - gzip-size "5.1.1" - immer "1.10.0" - inquirer "6.5.0" - is-root "2.1.0" - loader-utils "1.2.3" - open "^6.3.0" - pkg-up "2.0.0" - react-error-overlay "^6.0.3" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - sockjs-client "1.4.0" - strip-ansi "5.2.0" - text-table "0.2.0" - react-devtools-core@^4.6.0: version "4.8.2" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.8.2.tgz#4465f2e8de7795564aa20f28b2f3a9737586db23" @@ -15587,78 +11892,11 @@ react-dom@16.8.3: prop-types "^15.6.2" scheduler "^0.13.3" -react-dom@^16.8.3: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-draggable@^4.0.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" - integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - -react-error-overlay@^6.0.3: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== - react-fast-compare@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== - -react-focus-lock@^2.1.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.5.2.tgz#f1e4db5e25cd8789351f2bd5ebe91e9dcb9c2922" - integrity sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ== - dependencies: - "@babel/runtime" "^7.0.0" - focus-lock "^0.9.1" - prop-types "^15.6.2" - react-clientside-effect "^1.2.5" - use-callback-ref "^1.2.5" - use-sidecar "^1.0.5" - -react-helmet-async@^1.0.2: - version "1.0.9" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.9.tgz#5b9ed2059de6b4aab47f769532f9fbcbce16c5ca" - integrity sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - -react-hotkeys@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0.tgz#a7719c7340cbba888b0e9184f806a9ec0ac2c53f" - integrity sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q== - dependencies: - prop-types "^15.6.1" - -react-inspector@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-4.0.1.tgz#0f888f78ff7daccbc7be5d452b20c96dc6d5fbb8" - integrity sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg== - dependencies: - "@babel/runtime" "^7.6.3" - is-dom "^1.0.9" - prop-types "^15.6.1" - react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -15679,15 +11917,10 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-native-appboy-sdk@^1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.30.0.tgz#ccebdcb297c887d30bd7fb75afab88022e243884" - integrity sha512-IP6QgYZsgGkk7EyTuEzIgr/b/GyHWP2YSmcOcB06S6PTF6tUPyHobHDT1+MyC85UZpwVHkdXJ9k6GvMxHiJo3w== +react-native-appboy-sdk@^1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.29.1.tgz#ff38f7e02e3928fa804e55c6ec5034384cf63dd3" + integrity sha512-FwnbOqxWwivJyXL/XcWpfXIqb72/d0DVgpRDTSDJk5shze24EujvoYV9m7HNHl8rvKYLEu9QQ5Xzn7X34Fgsag== react-native-bootsplash@^3.2.0: version "3.2.0" @@ -15814,20 +12047,9 @@ react-native-scrollable-tab-view@1.0.0: react-timer-mixin "^0.13.3" react-native-share@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-5.1.0.tgz#6431f0aa6952e13fc74afbc756c2b37f06cb7feb" - integrity sha512-QGMWOPlwboAGd/5uUh2l0jXIDhZ2q8J4CIa063NDE7ihsZRQlF/w6kd90i3bi6GF6aedvhynqZPmezwqjiyU7g== - -react-native-storybook-loader@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-native-storybook-loader/-/react-native-storybook-loader-2.0.4.tgz#37bf37193e69b42a0b2aa0daeed4de8dbfeeae28" - integrity sha512-MmBdO7ugBkHEZa4F1qXFgjB7ejURmKGTZ/3o6zXPgUpaoMdh8tT5LLliJH9uOFzh7oY13TfTMZ9HyCa3E/dqLg== - dependencies: - colors "^1.1.2" - find-up "^4.1.0" - glob "^7.1.1" - prettier "^2.0.5" - yargs "^15.4.1" + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-5.1.0.tgz#6431f0aa6952e13fc74afbc756c2b37f06cb7feb" + integrity sha512-QGMWOPlwboAGd/5uUh2l0jXIDhZ2q8J4CIa063NDE7ihsZRQlF/w6kd90i3bi6GF6aedvhynqZPmezwqjiyU7g== react-native-svg@9.13.3: version "9.13.3" @@ -15837,11 +12059,6 @@ react-native-svg@9.13.3: css-select "^2.0.2" css-tree "^1.0.0-alpha.37" -react-native-swipe-gestures@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz#a172cb0f3e7478ccd681fd36b8bfbcdd098bde7c" - integrity sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw== - react-native-view-shot@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825" @@ -15888,27 +12105,6 @@ react-native@0.63.3: use-subscription "^1.0.0" whatwg-fetch "^3.0.0" -react-popper-tooltip@^2.8.3: - version "2.11.1" - resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" - integrity sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ== - dependencies: - "@babel/runtime" "^7.9.2" - react-popper "^1.3.7" - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - react-refresh@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334" @@ -15932,16 +12128,6 @@ react-relay@^10.0.1: nullthrows "^1.1.1" relay-runtime "10.0.1" -react-sizeme@^2.6.7: - version "2.6.12" - resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e" - integrity sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw== - dependencies: - element-resize-detector "^1.2.1" - invariant "^2.2.4" - shallowequal "^1.1.0" - throttle-debounce "^2.1.0" - react-spring@8.0.23: version "8.0.23" resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-8.0.23.tgz#2a0ddaeb0816ea9e21898d04d3b8da7d1a3daa14" @@ -15950,17 +12136,6 @@ react-spring@8.0.23: "@babel/runtime" "^7.3.1" prop-types "^15.5.8" -react-syntax-highlighter@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz#4e3f376e752b20d2f54e4c55652fd663149e4029" - integrity sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "~9.13.0" - lowlight "~1.11.0" - prismjs "^1.8.4" - refractor "^2.4.1" - react-test-renderer@16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" @@ -15981,14 +12156,6 @@ react-test-renderer@^16.0.0-0: react-is "^16.8.4" scheduler "^0.13.4" -react-textarea-autosize@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" - integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== - dependencies: - "@babel/runtime" "^7.1.2" - prop-types "^15.6.0" - react-timer-mixin@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" @@ -16037,15 +12204,6 @@ react@16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" -react@^16.6.0, react@^16.8.3: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - read-chunk@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca" @@ -16061,6 +12219,14 @@ read-env@^1.3.0: dependencies: camelcase "5.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -16078,19 +12244,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - "readable-stream@2 || 3": version "3.3.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" @@ -16113,7 +12266,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -16122,22 +12275,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - readline-sync@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" @@ -16160,12 +12297,13 @@ recursive-readdir-sync@1.0.6: resolved "https://registry.yarnpkg.com/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz#1dbf6d32f3c5bb8d3cde97a6c588d547a9e13d56" integrity sha1-Hb9tMvPFu4083pemxYjVR6nhPVY= -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: - minimatch "3.0.4" + indent-string "^3.0.0" + strip-indent "^2.0.0" reduce-flatten@^2.0.0: version "2.0.0" @@ -16205,15 +12343,6 @@ reflect.ownkeys@^0.2.0: resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= -refractor@^2.4.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" - integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== - dependencies: - hastscript "^5.0.0" - parse-entities "^1.1.2" - prismjs "~1.17.0" - regenerate-unicode-properties@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" @@ -16221,13 +12350,6 @@ regenerate-unicode-properties@^8.0.2: dependencies: regenerate "^1.4.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -16259,13 +12381,6 @@ regenerator-transform@^0.13.3: dependencies: private "^0.1.6" -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -16274,14 +12389,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - regexpu-core@^4.1.3: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" @@ -16294,18 +12401,6 @@ regexpu-core@^4.1.3: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - registry-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" @@ -16318,11 +12413,6 @@ regjsgen@^0.5.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -16330,18 +12420,6 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - relay-compiler-language-typescript@13.0.3: version "13.0.3" resolved "https://registry.yarnpkg.com/relay-compiler-language-typescript/-/relay-compiler-language-typescript-13.0.3.tgz#81c0ef35910514c7ae1a3252e0d7a802cdcdc76c" @@ -16419,6 +12497,53 @@ relay-test-utils@^10.0.1: fbjs "^1.0.0" relay-runtime "10.0.1" +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + dependencies: + remark-parse "^5.0.0" + remark-stringify "^5.0.0" + unified "^6.0.0" + remove-markdown@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.1.0.tgz#cf8b66e9e6fcb4acc9721048adeee7a357698ba9" @@ -16434,23 +12559,12 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -16460,7 +12574,7 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= -replace-ext@^1.0.0: +replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= @@ -16527,11 +12641,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -16583,7 +12692,7 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: dependencies: path-parse "^1.0.6" -resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2: +resolve@^1.12.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -16636,7 +12745,7 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.6.1, rimraf@^2.7.1: +rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -16655,14 +12764,6 @@ rimraf@~2.2.6: resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rn-fetch-blob@0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.12.0.tgz#ec610d2f9b3f1065556b58ab9c106eeb256f3cba" @@ -16698,18 +12799,11 @@ run-async@^2.0.0: dependencies: is-promise "^2.1.0" -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -16734,7 +12828,7 @@ rxjs@^5.4.3: dependencies: symbol-observable "1.0.1" -rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.7: +rxjs@^6.4.0, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -16746,16 +12840,11 @@ safe-buffer@5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -16763,7 +12852,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -16819,24 +12908,6 @@ scheduler@^0.18.0: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -16847,10 +12918,10 @@ screenfull@^5.1.0: resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8" integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA== -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= +secure-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/secure-keys/-/secure-keys-1.0.0.tgz#f0c82d98a3b139a8776a8808050b824431087fca" + integrity sha1-8MgtmKOxOah3aogIBQuCRDEIf8o= semver-compare@^1.0.0: version "1.0.0" @@ -16866,11 +12937,6 @@ semver-regex@^2.0.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -16881,7 +12947,7 @@ semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -16912,58 +12978,11 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serve-favicon@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" - integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= - dependencies: - etag "~1.8.1" - fresh "0.5.2" - ms "2.1.1" - parseurl "~1.3.2" - safe-buffer "5.1.1" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - serve-static@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" @@ -17004,7 +13023,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -17014,29 +13033,6 @@ setprototypeof@1.0.3: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-equal@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" - integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -17071,11 +13067,6 @@ shell-quote@1.6.1, shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - shelljs@^0.8.0: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" @@ -17085,29 +13076,11 @@ shelljs@^0.8.0: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -17150,26 +13123,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simplebar-react@^1.0.0-alpha.6: - version "1.2.3" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" - integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== - dependencies: - prop-types "^15.6.1" - simplebar "^4.2.3" - -simplebar@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" - integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== - dependencies: - can-use-dom "^0.1.0" - core-js "^3.0.1" - lodash.debounce "^4.0.8" - lodash.memoize "^4.1.2" - lodash.throttle "^4.1.1" - resize-observer-polyfill "^1.5.1" - sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" @@ -17190,10 +13143,21 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" slice-ansi@^3.0.0: version "3.0.0" @@ -17258,24 +13222,7 @@ snapshot-diff@0.2.2: pretty-format "^20.0.3" strip-ansi "^4.0.0" -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== @@ -17308,14 +13255,6 @@ source-map-support@^0.5.9: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -17326,12 +13265,12 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -17346,11 +13285,6 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -17377,6 +13311,10 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -17409,26 +13347,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" - integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stack-generator@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" @@ -17477,6 +13395,11 @@ stacktrace-parser@^0.1.3: dependencies: type-fest "^0.7.1" +state-toggle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -17485,7 +13408,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.3.1 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -17505,48 +13428,11 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -store2@^2.7.1: - version "2.12.0" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" - integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -17609,15 +13495,6 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -17627,38 +13504,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -"string.prototype.matchall@^4.0.0 || ^3.0.1": - version "4.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" - integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" - get-intrinsic "^1.1.1" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -string.prototype.padstart@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz#f9b9ce66bedd7c06acb40ece6e34c6046e1a019d" - integrity sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -17668,29 +13513,6 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -17705,6 +13527,16 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -17714,13 +13546,6 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -17740,7 +13565,14 @@ strip-ansi@^4.0.0: resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - ansi-regex "^3.0.0" + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" @@ -17784,23 +13616,25 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= -styled-components@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.1.tgz#494e35525b5557f7ce7b3c0040fcb0a46af40886" - integrity sha512-zBSMOJW1zfQ1rASGHJ5dHXIkn3VoOGLtQAYhkd4Ib7e+eI//uwMJWsI65JRe3aGrN2Xx8IT9jxxnVSXt9LaLCw== +styled-components@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.0.tgz#811fbbec4d64c7189f6c7482b9eb6fefa7fefef7" + integrity sha512-L/LzkL3ZbBhqIVHdR7DbYujy4tqvTNRfc+4JWDCYyhTatI+8CRRQUmdaR0+ARl03DWsfKLhjewll5uNLrqrl4A== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/is-prop-valid" "^0.7.3" @@ -17833,6 +13667,86 @@ styled-system@5.1.5: "@styled-system/variant" "^5.1.5" object-assign "^4.1.1" +stylelint-config-recommended@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" + integrity sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA== + +stylelint-config-standard@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06" + integrity sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA== + dependencies: + stylelint-config-recommended "^2.1.0" + +stylelint-config-styled-components@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" + integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q== + +stylelint-processor-styled-components@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.5.1.tgz#c3ab94eb0ea234750003ab648f2d3a17f79e1c61" + integrity sha512-gDsr2PCwc82lN2RkK2fq108lEIGFqnX0ZB+KVhHn4i+Lisb9W0f9gHChQK8peMo9/DVksb6QYNTLOwCb9OwcKg== + dependencies: + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + postcss "^6.0.14" + +stylelint@9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.8.0.tgz#bfdade6360d82afe820d6b15251b01acf8ffd04d" + integrity sha512-qYYgP9UnZ6S4uaXrfEGPIMeNv21gP4t3E7BtnYfJIiHKvz7AbrCP0vj1wPgD6OFyxLT5txQxtoznfSkm2vsUkQ== + dependencies: + autoprefixer "^9.0.0" + balanced-match "^1.0.0" + chalk "^2.4.1" + cosmiconfig "^5.0.0" + debug "^4.0.0" + execall "^1.0.0" + file-entry-cache "^2.0.0" + get-stdin "^6.0.0" + global-modules "^1.0.0" + globby "^8.0.0" + globjoin "^0.1.4" + html-tags "^2.0.0" + ignore "^5.0.4" + import-lazy "^3.1.0" + imurmurhash "^0.1.4" + known-css-properties "^0.9.0" + leven "^2.1.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + mathml-tag-names "^2.0.1" + meow "^5.0.0" + micromatch "^3.1.10" + normalize-selector "^0.2.0" + pify "^4.0.0" + postcss "^7.0.0" + postcss-html "^0.34.0" + postcss-jsx "^0.35.0" + postcss-less "^3.0.1" + postcss-markdown "^0.34.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^6.0.0" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^4.0.0" + postcss-sass "^0.3.5" + postcss-scss "^2.0.0" + postcss-selector-parser "^3.1.0" + postcss-styled "^0.34.0" + postcss-syntax "^0.34.0" + postcss-value-parser "^3.3.0" + resolve-from "^4.0.0" + signal-exit "^3.0.2" + slash "^2.0.0" + specificity "^0.4.1" + string-width "^2.1.0" + style-search "^0.1.0" + sugarss "^2.0.0" + svg-tags "^1.0.0" + table "^5.0.0" + stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -17853,6 +13767,12 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + dependencies: + postcss "^7.0.2" + supercluster@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.1.tgz#4c0177d96daa195d58a5bad9f55dbf12fb727a4c" @@ -17870,6 +13790,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -17907,6 +13834,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" @@ -17922,16 +13854,6 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= -symbol.prototype.description@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz#c30edd3fe8c040d941cf7dc15842be15adf66855" - integrity sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww== - dependencies: - call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.2" - synchronous-promise@^2.0.10: version "2.0.13" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702" @@ -17947,16 +13869,20 @@ table-layout@^1.0.0: typical "^5.0.0" wordwrapjs "^4.0.0" +table@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" + dependencies: + ajv "^6.5.3" + lodash "^4.17.10" + slice-ansi "1.0.0" + string-width "^2.1.1" + tapable@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tapable@^2.0.0-beta.2: version "2.0.0-beta.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0-beta.8.tgz#0a8d42f6895d43d5a895de15d9a9e3e425f72a0a" @@ -17996,20 +13922,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -telejson@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" - integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== - dependencies: - "@types/is-function" "^1.0.0" - global "^4.4.0" - is-function "^1.0.1" - is-regex "^1.0.4" - is-symbol "^1.0.3" - isobject "^4.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -18018,11 +13930,6 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -18031,45 +13938,6 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser-webpack-plugin@^2.1.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" - integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.3.1" - jest-worker "^25.4.0" - p-limit "^2.3.0" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.6.12" - webpack-sources "^1.4.3" - -terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -18079,7 +13947,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -18099,11 +13967,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -throttle-debounce@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" - integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== - throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" @@ -18139,23 +14002,11 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - timm@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -18189,11 +14040,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -18236,11 +14082,6 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -18270,15 +14111,30 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-dedent@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.2.0.tgz#6aa2229d837159bb6d635b6b233002423b91e0b0" - integrity sha512-6zSJp23uQI+Txyz5LlXMXAHpUhY4Hi0oluXny0OgIR7g/Cromq4vDBnhtbBdyIV34g0pgwxUvnvg+jLJe4c1NA== +trim-trailing-lines@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== ts-easing@^0.2.0: version "0.2.0" @@ -18296,11 +14152,6 @@ ts-node@8.4.1: source-map-support "^0.5.6" yn "^3.0.0" -ts-pnp@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== - ts-toolbelt@^6.1.6: version "6.15.5" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" @@ -18326,11 +14177,6 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - tslib@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -18372,11 +14218,6 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -18416,24 +14257,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -18453,25 +14276,24 @@ typescript-memoize@^1.0.0-alpha.3: dependencies: core-js "2.4.1" -typescript-styled-plugin@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.18.0.tgz#4e20e99bd7938f693ee37ad20682cc2401d06898" - integrity sha512-GopdOs3twyZkuLMU2ActiZQAtCgyibmwmQczULoe47qJ2URIaHSWxtUIDwuv6QhKPLBIrV6jSo/qp+184hlwLg== +typescript-styled-plugin@0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.13.0.tgz#e5d3d1293b9b85cffd473f01a7f4917ad6035ee5" + integrity sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg== dependencies: - typescript-template-language-service-decorator "^2.2.0" - vscode-css-languageservice "^5.1.1" + typescript-template-language-service-decorator "^2.0.0" + vscode-css-languageservice "^3.0.12" vscode-emmet-helper "1.2.11" - vscode-languageserver-types "^3.16.0" + vscode-languageserver-types "^3.13.0" -typescript-template-language-service-decorator@^2.2.0: +typescript-template-language-service-decorator@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-2.2.0.tgz#4ee6d580f307fb9239978e69626f2775b8a59b2a" - integrity sha512-xiolqt1i7e22rpqMaprPgSFVgU64u3b9n6EJlAaUYE61jumipKAdI1+O5khPlWslpTUj80YzjUKjJ2jxT0D74w== -typescript@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" + integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== typical@^4.0.0: version "4.0.0" @@ -18506,16 +14328,6 @@ ultron@1.0.x: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -18529,10 +14341,13 @@ underscore@~1.4.4: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= -unfetch@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== +unherit@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -18552,16 +14367,23 @@ unicode-match-property-value-ecmascript@^1.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +unified@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -18572,19 +14394,54 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unist-util-find-all-after@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" dependencies: - unique-slug "^2.0.0" + unist-util-is "^2.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +unist-util-is@^2.0.0, unist-util-is@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== + +unist-util-modify-children@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.3.tgz#d764a935f612dfb21b1bb92b0ea24321dc19a5f7" + integrity sha512-Aw3Us+NPrJGYWyLhcaqYzgxd/pryIanDNHVVvwdtTEEQ3Yfa/+sjnT2EeAAHbtTMAaYEdPW3XN6jxbzVWAo/BQ== dependencies: - imurmurhash "^0.1.4" + array-iterate "^1.0.0" + +unist-util-remove-position@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-visit-parents@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== + dependencies: + unist-util-is "^2.1.2" + +unist-util-visit@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== + dependencies: + unist-util-visit-parents "^2.0.0" universal-url@^2.0.0: version "2.0.0" @@ -18618,16 +14475,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -18648,11 +14500,6 @@ untildify@^3.0.3: resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -18670,15 +14517,6 @@ url-join@^4.0.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -url-loader@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -18686,14 +14524,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse@^1.4.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -18707,19 +14537,6 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use-callback-ref@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5" - integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg== - -use-sidecar@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b" - integrity sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA== - dependencies: - detect-node-es "^1.1.0" - tslib "^1.9.3" - use-subscription@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" @@ -18746,38 +14563,11 @@ utif@^2.0.1: dependencies: pako "^1.0.5" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -18823,6 +14613,28 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" + integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + vinyl-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" @@ -18861,25 +14673,17 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vscode-apollo-relay@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.1.tgz#6c98bef9a127c5bb80d10f6de35dd60ab851415e" - integrity sha512-+tEyseQVbjEqFR7wda9taij5bayVxE1x9XkgCAtBK2qqCq+V/5ohbEsrOdFRL0Ir3o9U+i+I2gz7y7Jn4dDiPA== +vscode-apollo-relay@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.0.tgz#cd427a49093c3c055ef0f0028bd46deb1e225fc0" + integrity sha512-NWOEEmB0s1PZgIntLlpHPuRA95TPvVJfw4bSePphr+rY0e+4XvuvVvxe+EE/9BirM8G2cGY1UM4yukWpP778Qg== -vscode-css-languageservice@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.4.tgz#07e4c63f1c3bb06e6f3f329c32b490d20a601bab" - integrity sha512-fIJZJMXbaBsK0ifBb2RmSiLtzwn6NrZnKn7O+0ziIjwAY+rPvSK9St2qqQXFU3reZVRAt/I4GBp40dC/THcUDA== +vscode-css-languageservice@^3.0.12: + version "3.0.12" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.12.tgz#fb4aac5ae3c5b761b1db1d7224b78ff824284dc3" dependencies: - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.2" + vscode-languageserver-types "^3.13.0" + vscode-nls "^4.0.0" vscode-emmet-helper@1.2.11: version "1.2.11" @@ -18889,29 +14693,13 @@ vscode-emmet-helper@1.2.11: jsonc-parser "^1.0.0" vscode-languageserver-types "^3.6.0-next.1" -vscode-languageserver-textdocument@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" - integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== - -vscode-languageserver-types@^3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== - -vscode-languageserver-types@^3.6.0-next.1: +vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.6.0-next.1: version "3.13.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4" -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== - -vscode-uri@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" - integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== +vscode-nls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002" w3c-hr-time@^1.0.1: version "1.0.1" @@ -18941,31 +14729,6 @@ warn-once@^0.1.0: resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.0.tgz#4f58d89b84f968d0389176aa99e0cf0f14ffd4c8" integrity sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA== -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -18978,93 +14741,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@^3.7.0: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-hot-middleware@^2.25.0: - version "2.25.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" - integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== - dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-virtual-modules@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" - integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== - dependencies: - debug "^3.0.0" - -webpack@^4.33.0, webpack@^4.38.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -19090,17 +14766,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -19145,12 +14810,10 @@ widest-line@^2.0.1: dependencies: string-width "^2.1.1" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" +window-size@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= windows-release@^3.1.0: version "3.2.0" @@ -19186,20 +14849,6 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.0.0" -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -19268,6 +14917,13 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -19281,16 +14937,16 @@ ws@^7, ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== -ws@^7.1.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - ws@^7.2.3: version "7.4.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + xcode@2.0.0, xcode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2" @@ -19364,11 +15020,16 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +y18n@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + "y18n@^3.2.1 || ^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" @@ -19384,7 +15045,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -19394,18 +15055,36 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml-lint@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/yaml-lint/-/yaml-lint-1.2.4.tgz#0dec2d1ef4e5ec999bba1e34d618fc60498d1bc5" + integrity sha512-qpKE0szyKsE9TrlVPi+bxKxVAjl30QjNAOyOxy7noQdf/WCCYUlT4xiCRxMG48eyeBzMBtBN6PgGfaB0MJePNw== + dependencies: + glob "^7.1.2" + js-yaml "^3.10.0" + leprechaun "0.0.2" + lodash.merge "^4.6.1" + lodash.snakecase "^4.1.1" + nconf "^0.10.0" -yaml@^1.7.2: +yaml@1.9.2, yaml@^1.7.2: version "1.9.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== dependencies: "@babel/runtime" "^7.9.2" +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -19473,7 +15152,7 @@ yargs@^14.2.0: y18n "^4.0.0" yargs-parser "^15.0.0" -yargs@^15.1.0, yargs@^15.4.1: +yargs@^15.1.0: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -19507,6 +15186,19 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" +yargs@^3.19.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -19594,8 +15286,3 @@ zen-observable-ts@^0.8.10: zen-observable@^0.8.0: version "0.8.11" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.11.tgz#d3415885eeeb42ee5abb9821c95bb518fcd6d199" - -zustand@^3.5.7: - version "3.5.7" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.7.tgz#add5e8d0ba031ce6e0ddf9cb76ef15306efb665f" - integrity sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g== From 7b059503d751492fb5552d16a69c24a11a75d080 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 29 Jul 2021 23:28:40 +0200 Subject: [PATCH 13/14] Revert "Revert "Merge branch 'master' into gkartalis/rn-testing-library"" This reverts commit 7f9e640b89b09e7f59653f3d9fb91d4ab5db48a3. --- .circleci/config.yml | 12 +- .gitignore | 2 + .secrets.baseline | 103 + .stylelintrc | 21 - .vscode/settings.json | 2 - Artsy.xcodeproj/project.pbxproj | 44 +- Artsy/App/ARAnalyticsVisualizer.h | 7 - Artsy/App/ARAnalyticsVisualizer.m | 72 - Artsy/App/ARAppActivityContinuationDelegate.m | 8 +- Artsy/App/ARAppDelegate+Analytics.h | 1 - Artsy/App/ARAppDelegate+Analytics.m | 87 +- Artsy/App/ARAppDelegate+Emission.m | 12 +- Artsy/App/ARAppDelegate.h | 9 +- Artsy/App/ARAppDelegate.m | 78 +- Artsy/App/ARAppNotificationsDelegate.h | 3 +- Artsy/App/ARAppNotificationsDelegate.m | 51 +- Artsy/App/AROptions.h | 1 - Artsy/App/AROptions.m | 1 - Artsy/App/ARScreenPresenterModule.m | 51 +- Artsy/App/ARSegmentProvider.h | 9 - Artsy/App/ARSegmentProvider.m | 36 - Artsy/App/ARSentryAnalyticsProvider.h | 6 - Artsy/App/ARSentryAnalyticsProvider.m | 44 - Artsy/App_Resources/Artsy-Info.plist | 5 + .../Apple/UIImageView+AsyncImageLoading.h | 2 +- .../Apple/UIImageView+AsyncImageLoading.m | 28 +- Artsy/Networking/API_Modules/ARUserManager.h | 2 - Artsy/Networking/API_Modules/ARUserManager.m | 22 +- .../API_Modules/ArtsyAPI+Sailthru.h | 11 - .../API_Modules/ArtsyAPI+Sailthru.m | 35 - Artsy/Networking/API_Modules/ArtsyAPI+Sales.m | 1 - Artsy/Networking/ARAuthProviders.m | 4 +- Artsy/Networking/ARRouter.h | 1 - Artsy/Networking/ARRouter.m | 5 - Artsy/Networking/ArtsyAPI.m | 9 +- Artsy/Resources/Artsy-Bridging-Header.h | 1 - .../ARAugmentedFloorBasedVIRViewController.m | 11 +- .../VCs/ARAugmentedVIRSetupViewController.m | 4 +- .../Admin/ARAdminSettingsViewController.m | 13 - .../AuctionInformationViewController.swift | 6 +- .../RefinementOptionsViewController.swift | 4 +- .../Core/ARViewInRoomViewController.m | 4 +- ...veAuctionLotCollectionViewDataSource.swift | 5 +- .../AROnboardingViewController.m | 19 +- .../ARSignUpSplashViewController.m | 18 +- .../ARPersonalizeViewController.m | 29 +- .../View_Controllers/Util/ARFeedImageLoader.m | 2 +- .../Util/ARNavigationController.m | 1 - .../Util/Errors/ARNetworkErrorManager.m | 4 +- .../Util/Sharing/ARSharingController.m | 4 +- .../Analytics_Tests/ARAppAnalyticsSpec.m | 40 - .../ARAppActivityContinuationDelegateTests.m | 16 - .../ARAppNotificationsDelegateTests.m | 38 +- .../ARTestImageCachingFunctions.swift | 2 +- .../Stubs/ARStubbedAnalyticsProvider.h | 28 - .../Stubs/ARStubbedAnalyticsProvider.m | 73 - Artsy_Tests/Supporting_Files/ARTestHelper.m | 1 + CHANGELOG.yml => CHANGELOG.legacy.yml | 84 +- Gemfile.lock | 87 +- HACKS.md | 20 +- Podfile | 12 +- Podfile.lock | 82 +- app.json | 2 +- dangerfile.ts | 28 - data/schema.graphql | 44 +- docs/README.md | 1 + docs/deploy_to_app_store.md | 1 - docs/palette_v3_migration_guide.md | 75 + docs/pull_request_template.md | 2 +- docs/storybook.md | 42 + emission/Emission.podspec | 2 +- emission/Pod/Classes/Core/AREmission.h | 3 + emission/Pod/Classes/Core/AREmission.m | 19 + emission/Pod/Classes/Core/AREventsModule.m | 5 - .../ARNotificationsManager.h | 2 + .../ARNotificationsManager.m | 19 + .../AROpaqueImageView.m | 23 +- fastlane/Fastfile | 22 +- index.android.js | 26 +- index.ios.js | 23 +- index.tests.ios.js | 1 - jest.config.js | 2 + package.json | 66 +- ...segment+analytics-react-native+1.4.4.patch | 32 - ...+analytics-react-native-appboy+1.4.8.patch | 35 - patches/react-native-appboy-sdk+1.29.1.patch | 29 - ...react-native-push-notification+7.4.0.patch | 13 + scripts/set-storybook-environment.js | 23 + scripts/start_packager.sh | 4 + .../FairArticlesQuery.graphql.ts | 52 +- .../FairArticles_fair.graphql.ts | 12 +- .../FairEditorialTestsQuery.graphql.ts | 13 +- .../FairEditorial_fair.graphql.ts | 9 +- src/__generated__/FairQuery.graphql.ts | 15 +- src/__generated__/FairTestsQuery.graphql.ts | 15 +- src/__generated__/Fair_fair.graphql.ts | 9 +- .../SavedAddressesFormQuery.graphql.ts | 234 + .../SavedAddressesFormTestsQuery.graphql.ts | 234 + .../SavedAddressesForm_me.graphql.ts | 170 + .../SavedAddressesQuery.graphql.ts | 26 +- .../SavedAddressesRefetchQuery.graphql.ts | 26 +- .../SavedAddressesTestsQuery.graphql.ts | 26 +- .../SavedAddresses_me.graphql.ts | 22 +- .../SavedSearchButtonQuery.graphql.ts | 154 + .../SavedSearchButtonTestsQuery.graphql.ts | 177 + .../SavedSearchButton_me.graphql.ts | 62 + .../VanityURLEntityQuery.graphql.ts | 15 +- .../addNewAddressMutation.graphql.ts | 290 + ...ddressDeleteUserAddressMutation.graphql.ts | 288 + .../setAsDefaultAddressMutation.graphql.ts | 207 + .../updateUserAddressMutation.graphql.ts | 300 + src/lib/AndroidApp.tsx | 4 +- src/lib/AppProviders.tsx | 24 +- src/lib/AppRegistry.tsx | 30 +- .../Artist/ArtistArtworks/ArtistArtworks.tsx | 60 +- .../ArtistArtworks/SavedSearchBanner.tsx | 91 +- .../ArtistArtworks/SavedSearchButton.tsx | 99 + .../__tests__/ArtistCollectionsRail-tests.tsx | 9 +- .../ArtistNotableWorksRail-tests.tsx | 9 +- .../__tests__/SavedSearchButton-tests.tsx | 80 + src/lib/Components/Artist/ArtistHeader.tsx | 2 + .../Artist/ArtistInsights/ArtistInsights.tsx | 15 +- .../ArtistInsightsAuctionResults.tsx | 38 +- src/lib/Components/ArtistListItem.tsx | 78 +- src/lib/Components/ArtsyReactWebView.tsx | 5 +- .../ArtworkFilter/ArtworkFilterHelpers.ts | 18 +- .../ArtworkFilterOptionsScreen.tsx | 10 +- .../ArtworkFilter/Filters/ColorsOptions.tsx | 3 +- .../Filters/FilterToggleButton.tsx | 3 +- .../ArtworkFilter/Filters/KeywordFilter.tsx | 32 +- .../Filters/PriceRangeOptions.tsx | 1 + .../Filters/SingleSelectOption.tsx | 58 +- .../ArtworkFilter/Filters/SizeOptions.tsx | 5 +- .../ArtworkFilter/Filters/YearOptions.tsx | 3 +- .../Filters/__tests__/ColorsSwatch-tests.tsx | 18 +- .../GalleriesAndInstitutionsOptions-tests.tsx | 2 +- .../__tests__/LocationCitiesOptions-tests.tsx | 2 +- .../Filters/__tests__/SizeOptions-tests.tsx | 2 +- .../__tests__/TimePeriodOptions-tests.tsx | 4 +- .../convertersToFilterParams-tests.ts | 14 +- .../__tests__/FilterModal-tests.tsx | 12 +- .../FilteredArtworkGridZeroState.tsx | 5 +- .../InfiniteScrollArtworksGrid.tsx | 4 +- .../ArtworkTileRail/ArtworkTileRailCard.tsx | 9 +- .../__tests__/ArtworkTileRailCard-tests.tsx | 89 +- .../Buttons/DarkNavigationButton.tsx | 26 +- src/lib/Components/ConnectivityBanner.tsx | 1 + .../__tests__/CountdownTimer-tests.tsx | 4 +- .../FancyModal/FancyModalHeader.tsx | 10 +- src/lib/Components/Gene/GeneArtworks.tsx | 2 +- .../Gene/__tests__/GeneArtworks-tests.tsx | 12 +- .../Components/GenericArtistSeriesRail.tsx | 3 +- .../Home/ArtistRails/ArtistCard.tsx | 50 +- src/lib/Components/HoursCollapsible.tsx | 36 +- src/lib/Components/Input/Input.tsx | 34 +- src/lib/Components/Input/InputTitle.tsx | 3 +- .../Lists/AuctionResultListItem.tsx | 3 +- src/lib/Components/Lists/SavedItemRow.tsx | 3 +- src/lib/Components/Lists/ShowItemRow.tsx | 117 +- src/lib/Components/LoadFailureView.tsx | 3 +- src/lib/Components/LocationMap/index.tsx | 5 +- src/lib/Components/MenuItem.tsx | 3 +- src/lib/Components/PhoneInput/PhoneInput.tsx | 3 +- src/lib/Components/Photos/AddEditPhotos.tsx | 3 +- .../PopoverMessage/PopoverMessage.tsx | 107 +- .../PopoverMessage/PopoverMessageProvider.tsx | 126 +- .../__tests__/PopoverMessage-tests.tsx | 44 +- .../RelatedArtists/RelatedArtist.tsx | 12 +- .../SaleArtworkTileRailCard.tsx | 9 +- src/lib/Components/ScrollableTabBar.tsx | 9 +- src/lib/Components/SectionTitle.tsx | 3 +- src/lib/Components/Select.tsx | 5 +- src/lib/Components/Spinner.tsx | 3 +- .../StickyTabPage/StickyTabPageFlatList.tsx | 3 +- .../StickyTabPage/StickyTabPageTabBar.tsx | 5 +- src/lib/Components/SwitchMenu.tsx | 43 +- src/lib/Components/TabBar.tsx | 106 +- src/lib/Components/TextArea.tsx | 6 +- src/lib/Components/Toast/Toast.ts | 9 + .../Toast/{Toast.tsx => ToastComponent.tsx} | 38 +- .../Toast/__tests__/Toast-tests.tsx | 8 +- src/lib/Components/Toast/toastHook.tsx | 55 +- src/lib/Components/Toast/types.ts | 22 + src/lib/Components/TouchableRow.tsx | 15 +- .../Components/WorksForYou/Notification.tsx | 38 +- .../__tests__/Notification-tests.tsx | 2 +- .../__tests__/ArtistListItem-tests.tsx | 11 +- .../__tests__/ArtsyReactWebView-tests.tsx | 2 +- .../__tests__/HoursCollapsible-tests.tsx | 25 +- .../Components/__tests__/ReadMore-tests.tsx | 41 +- src/lib/Icons/ChevronIcon.tsx | 8 +- src/lib/Icons/Crosshair.tsx | 33 +- src/lib/NativeModules/Events.tsx | 15 - src/lib/NativeModules/LegacyNativeModules.tsx | 3 - src/lib/Scenes/About/About.tsx | 3 +- src/lib/Scenes/Artist/Artist.tsx | 2 +- src/lib/Scenes/Artist/SearchCriteria.tsx | 4 +- .../__tests__/ArtistSavedSearch-tests.tsx | 14 + .../ArtistSeries/ArtistSeriesListItem.tsx | 3 +- src/lib/Scenes/Artwork/Artwork.tsx | 3 +- .../Artwork/Components/ArtworkActions.tsx | 22 +- .../CommercialButtons/BidButton.tsx | 12 +- .../CollapsibleArtworkDetails.tsx | 2 +- .../CommercialButtons/InquiryModal.tsx | 3 +- .../InquirySuccessNotification.tsx | 5 +- .../LocationAutocomplete.tsx | 5 +- .../__tests__/BidButton-tests.tsx | 13 +- .../__tests__/CommercialButtons-tests.tsx | 26 +- .../CommercialEditionSetInformation.tsx | 5 +- .../Components/CommercialInformation.tsx | 49 +- .../ImageCarouselFullScreen-tests.tsx | 15 +- .../Components/__tests__/AboutWork-tests.tsx | 29 +- .../__tests__/ArtworkActions-tests.tsx | 58 +- .../__tests__/ArtworkHistory-tests.tsx | 55 +- .../__tests__/ArtworkTombstone-tests.tsx | 121 +- .../__tests__/AuctionPrice-tests.tsx | 9 +- .../CommercialEditionSetInformation-tests.tsx | 17 +- .../__tests__/CommercialInformation-tests.tsx | 16 +- .../CommercialPartnerInformation-tests.tsx | 71 +- .../__tests__/ContextCard-tests.tsx | 81 +- .../__tests__/FollowArtistButton-tests.tsx | 25 +- .../Components/__tests__/OtherWorks-tests.tsx | 53 +- .../__tests__/PartnerCard-tests.tsx | 97 +- ...RequestConditionReport-analytics-tests.tsx | 27 +- .../RequestConditionReport-tests.tsx | 37 +- .../ArtworkAttributionClassFAQ.tsx | 2 +- .../AuctionResultsForYou.tsx | 2 +- .../__tests__/AuctionResultsForYou-tests.tsx | 2 +- src/lib/Scenes/BottomTabs/BottomTabs.tsx | 3 +- .../Scenes/BottomTabs/BottomTabsButton.tsx | 3 +- src/lib/Scenes/City/City.tsx | 5 +- src/lib/Scenes/City/CityPicker.tsx | 11 +- .../BMWEventSection/__tests__/index-tests.tsx | 33 +- .../City/Components/BMWEventSection/index.tsx | 55 +- .../Event/__tests__/index-tests.tsx | 9 +- .../Scenes/City/Components/Event/index.tsx | 70 +- .../EventSection/__tests__/index-tests.tsx | 21 +- .../Components/FairEventSectionCard.tsx | 10 +- .../__tests__/index-tests.tsx | 9 +- .../Components/FairEventSection/index.tsx | 51 +- .../Components/SavedEventSection/index.tsx | 7 +- .../TabFairItemRow/__tests__/index-tests.tsx | 9 +- .../City/Components/TabFairItemRow/index.tsx | 60 +- .../CollectionArtistSeriesRail-tests.tsx | 57 +- .../FeaturedCollectionsRail.tsx | 6 +- .../OtherCollections/OtherCollectionsRail.tsx | 16 +- .../__tests__/OtherCollectionsRail-tests.tsx | 2 +- .../__tests__/FeaturedArtists-tests.tsx | 9 +- .../FullFeaturedArtistList-tests.tsx | 9 +- .../__tests__/CollectionHeader-tests.tsx | 49 +- .../Components/ImageSelection.tsx | 6 +- .../Consignments/Components/SearchResults.tsx | 12 +- .../Consignments/Components/TextArea.tsx | 4 +- .../Consignments/Components/TextInput.tsx | 121 +- .../Scenes/Consignments/Components/Toggle.tsx | 28 +- .../Consignments/Screens/Confirmation.tsx | 109 +- .../Scenes/Consignments/Screens/Location.tsx | 49 +- .../Scenes/Fair/Components/FairEditorial.tsx | 5 +- src/lib/Scenes/Fair/Components/SimpleTabs.tsx | 3 +- src/lib/Scenes/Fair/Fair.tsx | 2 +- src/lib/Scenes/Fair/FairArticles.tsx | 5 +- src/lib/Scenes/Favorites/FavoriteArtists.tsx | 32 +- src/lib/Scenes/Favorites/FavoriteArtworks.tsx | 22 +- src/lib/Scenes/ForceUpdate/ForceUpdate.tsx | 3 +- .../Components/EmailConfirmationBanner.tsx | 3 +- src/lib/Scenes/Home/Components/HomeHero.tsx | 3 +- .../Home/Components/SaleArtworksHomeRail.tsx | 2 +- src/lib/Scenes/Home/Components/SalesRail.tsx | 145 +- .../__tests__/SaleArtworksHomeRail-tests.tsx | 2 +- .../Components/Conversations/Composer.tsx | 86 +- .../Conversations/ConversationSnippet.tsx | 97 +- .../Conversations/Conversations.tsx | 3 +- .../Conversations/EditionSelectBox.tsx | 6 +- .../Components/Conversations/Message.tsx | 51 +- .../Components/Conversations/OfferIcon.tsx | 21 +- .../Conversations/Preview/ArtworkPreview.tsx | 7 +- .../Preview/Attachment/AttachmentPreview.tsx | 18 +- .../Preview/Attachment/FileDownload.tsx | 1 + .../Conversations/Preview/ShowPreview.tsx | 11 +- .../Inbox/Screens/ConversationDetails.tsx | 2 +- .../Map/Components/CitySwitcherButton.tsx | 79 +- src/lib/Scenes/Map/Components/ShowCard.tsx | 59 +- .../Map/Components/UserPositionButton.tsx | 4 +- src/lib/Scenes/Map/GlobalMap.tsx | 30 +- .../Components/MyAccountFieldEditScreen.tsx | 39 +- .../Components/MyCollectionArtworkHeader.tsx | 3 +- .../Components/Dimensions.tsx | 3 +- .../MyCollectionArtworkFormAddPhotos.tsx | 3 +- ...CollectionArtworkFormAdditionalDetails.tsx | 3 +- .../MyCollectionArtworkListItem.tsx | 6 +- .../MyProfilePushNotifications-tests.tsx | 4 +- src/lib/Scenes/Onboarding/ForgotPassword.tsx | 3 +- .../OnboardingCreateAccount.tsx | 3 +- .../OnboardingCreateAccountEmail.tsx | 3 +- .../OnboardingCreateAccountName.tsx | 3 +- .../OnboardingCreateAccountPassword.tsx | 3 +- src/lib/Scenes/Onboarding/OnboardingLogin.tsx | 3 +- .../OnboardingPersonalization.tsx | 60 +- ...nboardingPersonalizationArtistListItem.tsx | 73 +- .../OnboardingPersonalizationModal.tsx | 3 +- .../Scenes/Onboarding/OnboardingWelcome.tsx | 3 +- .../Components/OrderDetailsPayment.tsx | 3 +- .../Scenes/Partner/Components/PartnerMap.tsx | 5 +- .../Partner/Components/PartnerShows.tsx | 111 +- .../PartnerLocationSection-tests.tsx | 9 +- .../__tests__/PartnerShows-tests.tsx | 9 +- .../Scenes/Sale/Components/SaleLotsList.tsx | 5 +- src/lib/Scenes/SaleFAQ/SaleFAQ.tsx | 2 +- .../Scenes/Sales/__tests__/index-tests.tsx | 9 +- src/lib/Scenes/Sales/index.tsx | 27 +- .../Components/AddAddressButton.tsx | 19 + .../Scenes/SavedAddresses/SavedAddresses.tsx | 153 +- .../SavedAddresses/SavedAddressesForm.tsx | 284 + .../__tests__/SavedAddresses-tests.tsx | 81 +- .../__tests__/SavedAddressesForm-tests.tsx | 95 + .../SavedAddresses/mutations/addNewAddress.ts | 57 + .../mutations/deleteSavedAddress.ts | 55 + .../mutations/setAsDefaultAddress.ts | 49 + .../mutations/updateUserAddress.ts | 59 + src/lib/Scenes/Search/AutosuggestResults.tsx | 3 +- src/lib/Scenes/Search/CityGuideCTA.tsx | 40 +- src/lib/Scenes/Search/Search.tsx | 3 +- src/lib/Scenes/Search/SearchResult.tsx | 5 +- .../__tests__/AutosuggestResults-tests.tsx | 13 +- .../Search/__tests__/RecentSearches-tests.tsx | 16 +- .../Scenes/Search/__tests__/Search-tests.tsx | 16 +- .../VanityURLPossibleRedirect-tests.tsx | 18 +- .../Components/ViewingRoomViewWorksButton.tsx | 5 +- src/lib/Scenes/ViewingRoom/ViewingRoom.tsx | 2 +- .../ViewingRoom/ViewingRoomArtworks.tsx | 3 +- .../Scenes/ViewingRoom/ViewingRoomsList.tsx | 3 +- src/lib/navigation/__tests__/routes-tests.tsx | 12 +- src/lib/navigation/navigate.ts | 4 +- src/lib/navigation/routes.tsx | 6 +- .../__tests__/errorMiddleware-tests.ts | 2 +- src/lib/relay/middlewares/errorMiddleware.ts | 4 +- src/lib/store/AuthModel.ts | 25 + src/lib/store/GlobalStoreModel.ts | 3 + src/lib/store/NativeModel.ts | 36 +- src/lib/store/ToastModel.ts | 44 + src/lib/store/__tests__/migration-tests.ts | 17 + src/lib/store/config/EnvironmentModel.tsx | 2 +- src/lib/store/config/features.ts | 19 +- src/lib/store/migration.ts | 6 +- src/lib/tests/renderRelayTree.tsx | 24 +- src/lib/utils/AdminMenu.tsx | 11 +- src/lib/utils/QAInfo.tsx | 3 +- .../utils/__tests__/renderMarkdown-tests.tsx | 17 +- src/lib/utils/hideBackButtonOnScroll.tsx | 2 +- src/lib/utils/placeholders.tsx | 3 +- src/lib/utils/renderMarkdown.tsx | 12 +- .../utils/track/SegmentTrackingProvider.ts | 76 +- src/lib/utils/track/providers.tsx | 16 +- src/palette/ClassTheme.tsx | 13 + src/palette/PaletteFlag.tsx | 59 + src/palette/Theme.tsx | 177 +- src/palette/elements/Avatar/Avatar.tsx | 8 +- src/palette/elements/BorderBox/BorderBox.tsx | 10 +- .../elements/Button/Button.stories.tsx | 45 + src/palette/elements/Button/Button.test.tsx | 42 +- src/palette/elements/Button/Button.tsx | 35 +- src/palette/elements/Cards/CardTag.tsx | 6 +- src/palette/elements/Cards/LargeCard.tsx | 7 +- src/palette/elements/Cards/MediumCard.tsx | 6 +- src/palette/elements/Cards/SmallCard.tsx | 8 +- src/palette/elements/Checkbox/Check.tsx | 28 +- src/palette/elements/Flex/Flex.tsx | 4 +- src/palette/elements/Message/Message.tsx | 10 +- src/palette/elements/Radio/RadioDot.tsx | 46 +- src/palette/elements/Separator/Separator.tsx | 9 +- src/palette/elements/Spinner/Spinner.tsx | 6 +- src/palette/elements/Text/Text.tsx | 7 +- .../elements/Text/__tests__/Text.test.tsx | 21 +- src/palette/elements/Text/tokens.ts | 22 +- src/palette/elements/Touchable/Touchable.tsx | 48 +- .../Touchable/TouchableHighlightColor.tsx | 5 +- .../elements/Typography/Typography.tsx | 36 +- src/palette/helpers/__tests__/color.test.ts | 8 - src/palette/helpers/__tests__/color.tests.tsx | 102 + src/palette/helpers/__tests__/space.test.ts | 9 - src/palette/helpers/__tests__/space.tests.tsx | 76 + src/palette/helpers/styled.tsx | 6 + src/palette/hooks.ts | 12 + src/palette/index.tsx | 2 + src/palette/platform/primitives.ts | 12 - src/palette/svgs/AddCircleFillIcon.tsx | 3 +- src/palette/svgs/AddCircleIcon.tsx | 3 +- src/palette/svgs/AddIcon.tsx | 4 +- src/palette/svgs/AlertCircleFillIcon.tsx | 4 +- src/palette/svgs/AlertIcon.tsx | 3 +- src/palette/svgs/ArrowCircleFillIcons.tsx | 32 +- src/palette/svgs/ArrowDownCircleIcon.tsx | 3 +- src/palette/svgs/ArrowDownIcon.tsx | 3 +- src/palette/svgs/ArrowLeftCircleIcon.tsx | 3 +- src/palette/svgs/ArrowLeftIcon.tsx | 3 +- src/palette/svgs/ArrowRightCircleIcon.tsx | 3 +- src/palette/svgs/ArrowRightIcon.tsx | 3 +- src/palette/svgs/ArrowUpCircleIcon.tsx | 3 +- src/palette/svgs/ArrowUpIcon.tsx | 3 +- src/palette/svgs/ArtsyLogoBlackIcon.tsx | 4 +- src/palette/svgs/ArtsyLogoWhiteIcon.tsx | 1 - src/palette/svgs/ArtsyMarkBlackIcon.tsx | 3 +- src/palette/svgs/ArtsyMarkWhiteIcon.tsx | 1 - src/palette/svgs/ArtworkIcon.tsx | 3 +- src/palette/svgs/AuctionIcon.tsx | 3 +- src/palette/svgs/BellFillIcon.tsx | 3 +- src/palette/svgs/BellIcon.tsx | 3 +- src/palette/svgs/BlueChipIcon.tsx | 3 +- src/palette/svgs/BriefcaseIcon.tsx | 3 +- src/palette/svgs/CertificateIcon.tsx | 3 +- src/palette/svgs/CheckCircleFillIcon.tsx | 3 +- src/palette/svgs/CheckCircleIcon.tsx | 3 +- src/palette/svgs/CheckIcon.tsx | 3 +- src/palette/svgs/CloseCircleIcon.tsx | 3 +- src/palette/svgs/CloseIcon.tsx | 3 +- src/palette/svgs/CollapseIcon.tsx | 3 +- src/palette/svgs/DecreaseIcon.tsx | 3 +- src/palette/svgs/DocumentIcon.tsx | 3 +- src/palette/svgs/DownloadIcon.tsx | 3 +- src/palette/svgs/EditIcon.tsx | 3 +- src/palette/svgs/EnterIcon.tsx | 3 +- src/palette/svgs/EnvelopeIcon.tsx | 3 +- src/palette/svgs/EstablishedIcon.tsx | 3 +- src/palette/svgs/ExpandIcon.tsx | 3 +- src/palette/svgs/EyeClosedIcon.tsx | 3 +- src/palette/svgs/EyeOpenedIcon.tsx | 3 +- src/palette/svgs/FacebookIcon.tsx | 4 +- src/palette/svgs/FairIcon.tsx | 3 +- src/palette/svgs/FilterIcon.tsx | 3 +- src/palette/svgs/GenomeIcon.tsx | 3 +- src/palette/svgs/GraphIcon.tsx | 3 +- src/palette/svgs/HeartFillIcon.tsx | 3 +- src/palette/svgs/HeartIcon.tsx | 3 +- src/palette/svgs/HomeIcon.tsx | 4 +- src/palette/svgs/Icon.tsx | 2 +- src/palette/svgs/IncreaseIcon.tsx | 3 +- src/palette/svgs/InfoCircleIcon.tsx | 4 +- src/palette/svgs/InstitutionIcon.tsx | 3 +- src/palette/svgs/LoaderIcon.tsx | 3 +- src/palette/svgs/LockIcon.tsx | 4 +- src/palette/svgs/LogoutIcon.tsx | 8 +- src/palette/svgs/MagnifyingGlassIcon.tsx | 3 +- src/palette/svgs/MapPinIcon.tsx | 3 +- src/palette/svgs/MenuIcon.tsx | 4 +- src/palette/svgs/MessageIcon.tsx | 4 +- src/palette/svgs/MoneyFillIcon.tsx | 6 +- src/palette/svgs/MoreIcon.tsx | 3 +- src/palette/svgs/NoArtworkIcon.tsx | 4 +- src/palette/svgs/NoImageIcon.tsx | 4 +- src/palette/svgs/PageIcon.tsx | 4 +- src/palette/svgs/PaymentIcon.tsx | 4 +- src/palette/svgs/PublicationIcon.tsx | 8 +- src/palette/svgs/QuestionCircleIcon.tsx | 3 +- src/palette/svgs/ReloadIcon.tsx | 4 +- src/palette/svgs/SettingsIcon.tsx | 4 +- src/palette/svgs/ShareIcon.tsx | 4 +- src/palette/svgs/TagIcon.tsx | 4 +- src/palette/svgs/TimerIcon.tsx | 4 +- src/palette/svgs/TopEmergingIcon.tsx | 4 +- src/palette/svgs/TrashIcon.tsx | 4 +- src/palette/svgs/TwitterIcon.tsx | 4 +- src/palette/svgs/UserMultiIcon.tsx | 4 +- src/palette/svgs/UserSingleIcon.tsx | 4 +- src/palette/svgs/VerifiedIcon.tsx | 4 +- src/palette/svgs/WhatsAppAppIcon.tsx | 2 +- src/palette/svgs/XCircleIcon.tsx | 3 +- src/palette/svgs/sf/BoltCircleFill.tsx | 3 +- src/palette/svgs/sf/BoltFill.tsx | 4 +- src/palette/svgs/sf/BookmarkFill.tsx | 3 +- src/palette/svgs/sf/ClockFill.tsx | 3 +- .../svgs/sf/ExclamationMarkCircleFill.tsx | 4 +- src/palette/svgs/sf/StarCircleFill.tsx | 4 +- src/palette/svgs/sf/Stopwatch.tsx | 3 +- src/setupJest.ts | 28 +- src/storybook/addons.js | 1 + src/storybook/helpers.tsx | 46 + src/storybook/index.js | 5 + src/storybook/package.json | 3 + src/storybook/rn-addons.js | 0 src/storybook/storyLoader.js | 15 + src/storybook/storybook-ui.js | 17 + tsconfig.json | 16 +- typings/storybook.d.ts | 7 + typings/styled-components.native.d.ts | 22 +- yarn.lock | 6611 ++++++++++++++--- 485 files changed, 13629 insertions(+), 4756 deletions(-) create mode 100644 .secrets.baseline delete mode 100644 .stylelintrc delete mode 100644 Artsy/App/ARAnalyticsVisualizer.h delete mode 100644 Artsy/App/ARAnalyticsVisualizer.m delete mode 100644 Artsy/App/ARSegmentProvider.h delete mode 100644 Artsy/App/ARSegmentProvider.m delete mode 100644 Artsy/App/ARSentryAnalyticsProvider.h delete mode 100644 Artsy/App/ARSentryAnalyticsProvider.m delete mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h delete mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m delete mode 100644 Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m delete mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h delete mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m rename CHANGELOG.yml => CHANGELOG.legacy.yml (96%) create mode 100644 docs/palette_v3_migration_guide.md create mode 100644 docs/storybook.md delete mode 100644 patches/@segment+analytics-react-native+1.4.4.patch delete mode 100644 patches/@segment+analytics-react-native-appboy+1.4.8.patch delete mode 100644 patches/react-native-appboy-sdk+1.29.1.patch create mode 100644 patches/react-native-push-notification+7.4.0.patch create mode 100755 scripts/set-storybook-environment.js create mode 100644 src/__generated__/SavedAddressesFormQuery.graphql.ts create mode 100644 src/__generated__/SavedAddressesFormTestsQuery.graphql.ts create mode 100644 src/__generated__/SavedAddressesForm_me.graphql.ts create mode 100644 src/__generated__/SavedSearchButtonQuery.graphql.ts create mode 100644 src/__generated__/SavedSearchButtonTestsQuery.graphql.ts create mode 100644 src/__generated__/SavedSearchButton_me.graphql.ts create mode 100644 src/__generated__/addNewAddressMutation.graphql.ts create mode 100644 src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts create mode 100644 src/__generated__/setAsDefaultAddressMutation.graphql.ts create mode 100644 src/__generated__/updateUserAddressMutation.graphql.ts create mode 100644 src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx create mode 100644 src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx create mode 100644 src/lib/Components/Toast/Toast.ts rename src/lib/Components/Toast/{Toast.tsx => ToastComponent.tsx} (77%) create mode 100644 src/lib/Components/Toast/types.ts create mode 100644 src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx create mode 100644 src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx create mode 100644 src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx create mode 100644 src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts create mode 100644 src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts create mode 100644 src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts create mode 100644 src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts create mode 100644 src/lib/store/ToastModel.ts create mode 100644 src/palette/ClassTheme.tsx create mode 100644 src/palette/PaletteFlag.tsx create mode 100644 src/palette/elements/Button/Button.stories.tsx delete mode 100644 src/palette/helpers/__tests__/color.test.ts create mode 100644 src/palette/helpers/__tests__/color.tests.tsx delete mode 100644 src/palette/helpers/__tests__/space.test.ts create mode 100644 src/palette/helpers/__tests__/space.tests.tsx create mode 100644 src/palette/helpers/styled.tsx create mode 100644 src/palette/hooks.ts delete mode 100644 src/palette/platform/primitives.ts create mode 100644 src/storybook/addons.js create mode 100644 src/storybook/helpers.tsx create mode 100644 src/storybook/index.js create mode 100644 src/storybook/package.json create mode 100644 src/storybook/rn-addons.js create mode 100644 src/storybook/storyLoader.js create mode 100644 src/storybook/storybook-ui.js create mode 100644 typings/storybook.d.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index c9595957044..9ae069fd477 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -154,12 +154,12 @@ commands: steps: - restore_cache: keys: - - v4-app_build_ios-{{ checksum ".manifests/app_build" }} + - v5-app_build_ios-{{ checksum ".manifests/app_build" }} - run: name: Build App - command: ls derived_data || ./scripts/ci-ios + command: ./scripts/ci-ios - save_cache: - key: v4-app_build_ios-{{ checksum ".manifests/app_build" }} + key: v5-app_build_ios-{{ checksum ".manifests/app_build" }} paths: - derived_data - node_modules/react-native-config @@ -503,12 +503,14 @@ workflows: - beta-android - app_store_submission - play_store_submission + - update-changelog - build-test-js: filters: branches: ignore: - app_store_submission - play_store_submission + - update-changelog - horizon/block: context: horizon project_id: 37 @@ -524,6 +526,7 @@ workflows: - app_store_submission - play_store_submission - beta-android + - update-changelog requires: - build-test-js - horizon/block @@ -534,6 +537,7 @@ workflows: - app_store_submission - play_store_submission - beta-ios + - update-changelog requires: - build-test-js - horizon/block @@ -543,6 +547,8 @@ workflows: only: - beta-ios - beta-android + ignore: + - update-changelog requires: - build-test-app-ios - build-test-app-android diff --git a/.gitignore b/.gitignore index 50b76e18861..376a4066663 100644 --- a/.gitignore +++ b/.gitignore @@ -138,3 +138,5 @@ android/app/src/main/assets/fonts # Firebase files android/app/google-services.json GoogleService-Info.plist + +storybook.json diff --git a/.secrets.baseline b/.secrets.baseline new file mode 100644 index 00000000000..b644f382638 --- /dev/null +++ b/.secrets.baseline @@ -0,0 +1,103 @@ +{ + "version": "1.1.0", + "plugins_used": [ + { + "name": "ArtifactoryDetector" + }, + { + "name": "AWSKeyDetector" + }, + { + "name": "AzureStorageKeyDetector" + }, + { + "name": "Base64HighEntropyString", + "limit": 4.5 + }, + { + "name": "BasicAuthDetector" + }, + { + "name": "CloudantDetector" + }, + { + "name": "HexHighEntropyString", + "limit": 3.0 + }, + { + "name": "IbmCloudIamDetector" + }, + { + "name": "IbmCosHmacDetector" + }, + { + "name": "JwtTokenDetector" + }, + { + "name": "KeywordDetector", + "keyword_exclude": "" + }, + { + "name": "MailchimpDetector" + }, + { + "name": "NpmDetector" + }, + { + "name": "PrivateKeyDetector" + }, + { + "name": "SlackDetector" + }, + { + "name": "SoftlayerDetector" + }, + { + "name": "SquareOAuthDetector" + }, + { + "name": "StripeDetector" + }, + { + "name": "TwilioKeyDetector" + } + ], + "filters_used": [ + { + "path": "detect_secrets.filters.allowlist.is_line_allowlisted" + }, + { + "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", + "min_level": 2 + }, + { + "path": "detect_secrets.filters.heuristic.is_indirect_reference" + }, + { + "path": "detect_secrets.filters.heuristic.is_likely_id_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_lock_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_potential_uuid" + }, + { + "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" + }, + { + "path": "detect_secrets.filters.heuristic.is_sequential_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_swagger_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_templated_secret" + } + ], + "results": {}, + "generated_at": "2021-07-26T13:07:17Z" +} diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index afca977d041..00000000000 --- a/.stylelintrc +++ /dev/null @@ -1,21 +0,0 @@ -{ - "processors": ["stylelint-processor-styled-components"], - "extends": [ - "stylelint-config-standard", - "stylelint-config-styled-components" - ], - "syntax": "scss", - "rules": { - "selector-type-no-unknown": [true, { "ignoreTypes": ["checkbox", "twitterwidget"] }], - "property-no-unknown": [true, { "ignoreProperties": ["resize-mode", "flexgrow"] }], - "block-opening-brace-space-after": null, - "block-closing-brace-space-before": null, - "declaration-colon-newline-after": null, - "value-list-comma-newline-after": null, - "declaration-block-no-redundant-longhand-properties": null, - "color-hex-length": null, - "block-no-empty": null, - "declaration-empty-line-before": null, - "function-calc-no-unspaced-operator": null - } -} diff --git a/.vscode/settings.json b/.vscode/settings.json index 8686265ca10..97f6f2999a5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,6 @@ "Podfile": "ruby", "*.h": "objective-c", "*.js": "javascriptreact", - "*.snap": "javascriptreact", - ".stylelintrc": "json", "yarn.lock": "text" }, "eslint.enable": false, diff --git a/Artsy.xcodeproj/project.pbxproj b/Artsy.xcodeproj/project.pbxproj index d39547b6606..15466f416c4 100644 --- a/Artsy.xcodeproj/project.pbxproj +++ b/Artsy.xcodeproj/project.pbxproj @@ -31,7 +31,6 @@ 1CC9EBA41CC76CDD00A74E3C /* followButtonChecked.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */; }; 1CC9EBA51CC76CDD00A74E3C /* followButtonChecked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */; }; 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */; }; - 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */; }; 1CF709B31CB803AA00C00FF4 /* AROnboardingHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */; }; 1CFA4EB61E5C4B6B00D44A5A /* full_logo_black_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */; }; 1CFA4EB71E5C4B6B00D44A5A /* full_logo_black_medium@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB41E5C4B6B00D44A5A /* full_logo_black_medium@2x.png */; }; @@ -111,7 +110,6 @@ 3CF144B818E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF144B718E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m */; }; 3CFB078B18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */; }; 3CFBE33618C5848900C781D0 /* ARFileUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */; }; - 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */; }; 491A4DE2168E4343003B2246 /* Gene.m in Sources */ = {isa = PBXBuildFile; fileRef = 491A4DE1168E4343003B2246 /* Gene.m */; }; 4938742917BD512700724795 /* ARSignUpSplashViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938742717BD512700724795 /* ARSignUpSplashViewController.m */; }; 4938743617BDB2CD00724795 /* ARCrossfadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938743517BDB2CD00724795 /* ARCrossfadingImageView.m */; }; @@ -137,7 +135,6 @@ 51B4BA451C6A24490014A394 /* AuctionInformationViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */; }; 51B4BA481C6A2B7B0014A394 /* AuctionSaleNetworkModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */; }; 51B4BA491C6A2B7F0014A394 /* AuctionBiddersNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C31C6A239E007148B7 /* AuctionBiddersNetworkModel.swift */; }; - 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */; }; 51D141B71AF0F14B000091CF /* ARTestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D141B61AF0F14B000091CF /* ARTestHelper.m */; }; 51DA12251B596035001B6F2A /* RefreshIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */; }; 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DCC6C71C60E26800455309 /* AuctionInformationViewController.swift */; }; @@ -251,7 +248,6 @@ 60026AF21BDE3EFB0040257C /* ARWebViewCacheHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 60026AF11BDE3EFB0040257C /* ARWebViewCacheHost.m */; }; 600415C917C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 600415C817C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m */; }; 600A734317DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m in Sources */ = {isa = PBXBuildFile; fileRef = 600A734217DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m */; }; - 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */ = {isa = PBXBuildFile; fileRef = 600B8B441C4FCEEC00776F84 /* CHANGELOG.yml */; }; 600EE29E16B3003F002E9F9A /* ARNavigationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 600EE29C16B3003F002E9F9A /* ARNavigationButton.m */; }; 60107F161CC7DC1D002F772E /* ARTestImageCachingFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60107F151CC7DC1D002F772E /* ARTestImageCachingFunctions.swift */; }; 6016120420B7446800FD54B0 /* ARVIRModalClose.png in Resources */ = {isa = PBXBuildFile; fileRef = 6016120120B7446700FD54B0 /* ARVIRModalClose.png */; }; @@ -359,7 +355,6 @@ 60C1C3181C5FA34400EC98EE /* ARSerifNavigationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */; }; 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */; }; 60CB547C1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */; }; - 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */; }; 60CE3CAB1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */; }; 60D312471EA6CFD000B13E59 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60D312461EA6CFD000B13E59 /* ReplayKit.framework */; }; 60D70DE41D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D70DE31D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift */; }; @@ -368,7 +363,6 @@ 60DCDAD71C6533DF00BB61D7 /* ARSerifNavigationViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */; }; 60E719FE1B4C6032008948FA /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 60E719FD1B4C6032008948FA /* Launch Screen.xib */; }; 60E71A011B4C60AC008948FA /* Artsy_Logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 60E71A001B4C60AC008948FA /* Artsy_Logo.png */; }; - 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */; }; 60ED311F1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */; }; 60ED31221C8F746A0071DD89 /* FakeSalesPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */; }; 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */; }; @@ -424,7 +418,6 @@ CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EC24F9684400ED2843 /* Range@2x.png */; }; CB6CE8F124F9684400ED2843 /* Thumb.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8ED24F9684400ED2843 /* Thumb.png */; }; CB6CE8F224F9684400ED2843 /* Track@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EE24F9684400ED2843 /* Track@2x.png */; }; - CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */; }; CB879D0C180746C900E2D8EC /* AuctionLot.m in Sources */ = {isa = PBXBuildFile; fileRef = CB879D0B180746C900E2D8EC /* AuctionLot.m */; }; CB9E244117CBC36F00773A9A /* ARAuthProviders.m in Sources */ = {isa = PBXBuildFile; fileRef = CB9E244017CBC36F00773A9A /* ARAuthProviders.m */; }; CBB469D0181F1F1200B5692B /* Bid.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB469CF181F1F1200B5692B /* Bid.m */; }; @@ -541,7 +534,6 @@ 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = followButtonChecked.png; sourceTree = ""; }; 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@2x.png"; sourceTree = ""; }; 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@3x.png"; sourceTree = ""; }; - 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARAppAnalyticsSpec.m; path = Analytics_Tests/ARAppAnalyticsSpec.m; sourceTree = ""; }; 1CF709B11CB803AA00C00FF4 /* AROnboardingHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AROnboardingHeaderView.h; sourceTree = ""; }; 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AROnboardingHeaderView.m; sourceTree = ""; }; 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "full_logo_black_large@2x.png"; sourceTree = ""; }; @@ -669,8 +661,6 @@ 3CFB078918EB417F00792024 /* ARSecureTextFieldWithPlaceholder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSecureTextFieldWithPlaceholder.h; sourceTree = ""; }; 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSecureTextFieldWithPlaceholder.m; sourceTree = ""; }; 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARFileUtilsTests.m; sourceTree = ""; }; - 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAnalyticsVisualizer.h; sourceTree = ""; }; - 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARAnalyticsVisualizer.m; sourceTree = ""; }; 482115D14BD4E126B81B3A2B /* libPods-Artsy Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Artsy Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 491A4DE0168E4343003B2246 /* Gene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gene.h; sourceTree = ""; }; 491A4DE1168E4343003B2246 /* Gene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Gene.m; sourceTree = ""; }; @@ -732,8 +722,6 @@ 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionSaleNetworkModelTests.swift; sourceTree = ""; }; 518B421D1B57CF7100210A02 /* AttentionIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AttentionIcon@2x.png"; sourceTree = ""; }; 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionInformationViewControllerTests.swift; sourceTree = ""; }; - 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ArtsyAPI+Sailthru.h"; sourceTree = ""; }; - 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ArtsyAPI+Sailthru.m"; sourceTree = ""; }; 51D141B51AF0F14B000091CF /* ARTestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARTestHelper.h; sourceTree = ""; }; 51D141B61AF0F14B000091CF /* ARTestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTestHelper.m; sourceTree = ""; }; 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RefreshIcon@2x.png"; sourceTree = ""; }; @@ -1046,8 +1034,6 @@ 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSerifNavigationViewController.m; sourceTree = ""; }; 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionToolbarView.swift; path = Live_Auctions/Views/LiveAuctionToolbarView.swift; sourceTree = ""; }; 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionViewControllerTests.swift; path = Live_Auction/LiveAuctionViewControllerTests.swift; sourceTree = ""; }; - 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSentryAnalyticsProvider.h; sourceTree = ""; }; - 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSentryAnalyticsProvider.m; sourceTree = ""; }; 60CE3CA91B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArtsyOHHTTPAPI.h; sourceTree = ""; }; 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArtsyOHHTTPAPI.m; sourceTree = ""; }; 60D312461EA6CFD000B13E59 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; @@ -1059,8 +1045,6 @@ 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARSerifNavigationViewControllerSpec.m; path = Components/ARSerifNavigationViewControllerSpec.m; sourceTree = ""; }; 60E719FD1B4C6032008948FA /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; 60E71A001B4C60AC008948FA /* Artsy_Logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Artsy_Logo.png; sourceTree = ""; }; - 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARStubbedAnalyticsProvider.h; sourceTree = ""; }; - 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARStubbedAnalyticsProvider.m; sourceTree = ""; }; 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewControllerTests.swift; path = Live_Auction/LiveAuctionLotViewControllerTests.swift; sourceTree = ""; }; 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FakeSalesPerson.swift; path = Live_Auction/FakeSalesPerson.swift; sourceTree = ""; }; 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewModel.swift; path = Live_Auctions/ViewModels/LiveAuctionLotViewModel.swift; sourceTree = ""; }; @@ -1147,8 +1131,6 @@ CB6CE8EC24F9684400ED2843 /* Range@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Range@2x.png"; sourceTree = ""; }; CB6CE8ED24F9684400ED2843 /* Thumb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Thumb.png; sourceTree = ""; }; CB6CE8EE24F9684400ED2843 /* Track@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Track@2x.png"; sourceTree = ""; }; - CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSegmentProvider.h; sourceTree = ""; }; - CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSegmentProvider.m; sourceTree = ""; }; CB879D0A180746C900E2D8EC /* AuctionLot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuctionLot.h; sourceTree = ""; }; CB879D0B180746C900E2D8EC /* AuctionLot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuctionLot.m; sourceTree = ""; }; CB9E243F17CBC36F00773A9A /* ARAuthProviders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAuthProviders.h; sourceTree = ""; }; @@ -1270,8 +1252,6 @@ 342F95F94C5759B9CA05AB59 /* Artwork+Extensions.h */, 3CE0DA3018A13604000E537A /* OHHTTPStubs+Artsy.h */, 3CE0DA3118A13604000E537A /* OHHTTPStubs+Artsy.m */, - 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */, - 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */, ); path = Stubs; sourceTree = ""; @@ -2532,16 +2512,10 @@ 60A0E9FB1C51070F002754A8 /* Analytics */ = { isa = PBXGroup; children = ( - CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */, - CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */, - 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */, - 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */, 5EFE2BE21910FC81003B5EEA /* ARAppDelegate+Analytics.h */, 5EFE2BE31910FC81003B5EEA /* ARAppDelegate+Analytics.m */, 6088B75217D1DBAC00E4BB67 /* ARAnalyticsConstants.h */, 6088B75317D1DBAC00E4BB67 /* ARAnalyticsConstants.m */, - 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */, - 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */, ); name = Analytics; sourceTree = ""; @@ -2633,8 +2607,6 @@ 3CB37D96192246B500089A1D /* ArtsyAPI+ErrorHandlers.m */, 608AABDA1B3884C600855A1C /* ARKeychainable.h */, 608AABDB1B3884C600855A1C /* ARKeychainable.m */, - 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */, - 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */, ); name = "API Modules"; path = API_Modules; @@ -2753,7 +2725,6 @@ 60E738721C64AC7C00AC381B /* Analytics Tests */ = { isa = PBXGroup; children = ( - 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */, ); name = "Analytics Tests"; sourceTree = ""; @@ -3112,7 +3083,6 @@ 5E80CA822093C29500BCFD82 /* CircleCheckGreen@3x.png in Resources */, 604E08232051E9E000785717 /* ARVIRPhone@2x.png in Resources */, CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */, - 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */, 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */, 608B707B17D4A1C80088A56C /* FooterBackground@2x.png in Resources */, 3C4AE99319094F96009C0E8B /* ViewInRoom_BaseNoBench@2x.png in Resources */, @@ -3271,7 +3241,10 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Artsy/Pods-Artsy-resources.sh", - "${PODS_ROOT}/Appboy-iOS-SDK/AppboyKit/Appboy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.ContentCards.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/Appboy.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.InAppMessage.bundle", + "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.NewsFeed.bundle", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Bold.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-BoldItalic.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Italic.otf", @@ -3299,7 +3272,10 @@ ); name = "[CP] Copy Pods Resources"; outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.ContentCards.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.InAppMessage.bundle", + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.NewsFeed.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Bold.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-BoldItalic.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Italic.otf", @@ -3427,7 +3403,6 @@ 60A4A63E1D05C924005946EF /* UIViewController+BlurredStatusView.swift in Sources */, 60A309AD1AC9A7C8000783C1 /* NSString+StringBetweenStrings.m in Sources */, 1CC9EB9A1CC12B5400A74E3C /* AROnboardingFollowableTableViewCell.m in Sources */, - 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */, 3C7880BC18B9081C00595E30 /* ARNotificationView.m in Sources */, 60863E471D0B49AE0053B51C /* ArtsyAPI+HEAD.m in Sources */, 5EBA3E831DFF4CCB005B4BEE /* ARTwoWayDictionaryTransformer.m in Sources */, @@ -3436,7 +3411,6 @@ 60B6F0F21662AADF007C9587 /* ARAppConstants.m in Sources */, 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */, 5EF8407E1CECDFFD006248D7 /* LiveAuctionLotCollectionViewLayoutAttributes.swift in Sources */, - 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */, 5EA0E74C1DCA3DD200CE9203 /* Interstellar+Artsy.swift in Sources */, 49EC62181778AF100020D648 /* PartnerShow.m in Sources */, 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */, @@ -3484,7 +3458,6 @@ 5E3816FA1CBEDDF900477B17 /* LotListCollectionViewCell.swift in Sources */, 491A4DE2168E4343003B2246 /* Gene.m in Sources */, 602BC089168E0C0E00069FDB /* ARReusableLoadingView.m in Sources */, - CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */, 5E830A521E969B1800A56C75 /* ArtsyEcho.m in Sources */, 6099F907178F24750004EF04 /* ARDefaultNavigationTransition.m in Sources */, 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */, @@ -3590,7 +3563,6 @@ 5EFEF1C81CEB7C5800E3AAB2 /* LiveAuctionLotCollectionViewDataSource.swift in Sources */, 60F9B08F1D83255800DBAC8C /* ARAdminNetworkModel.m in Sources */, 342F9D9296B47F66184FA760 /* NSDate+DateRange.m in Sources */, - 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */, 5E47F35B1C4444A900EC0751 /* SaleViewModel.swift in Sources */, 60BC92F31BBEC89B00D13E56 /* ARApplicationShortcutItemDelegate.m in Sources */, E667F12C18EC889F00503F50 /* ARLogFormatter.m in Sources */, @@ -3649,7 +3621,6 @@ 3CF144A918E4607900B1A764 /* SystemTimeTests.m in Sources */, E649708918D7762F009DB0C4 /* ARImageItemProviderTests.m in Sources */, E61E772619A5477300C55E14 /* ARExpectaExtensions.m in Sources */, - 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */, 5EF840801CED0C5F006248D7 /* LiveAuctionFancyLotCollectionViewLayoutTests.swift in Sources */, 3C3FEA8E1884346D00E1A16F /* ARUserManager+Stubs.m in Sources */, B30FEF5A181EEA47009E4EAD /* ARBidButtonTests.m in Sources */, @@ -3681,7 +3652,6 @@ 5E9A78231906BA3D00734E1B /* OCMArg+ClassChecker.m in Sources */, 5E088DB11C58145600C448D7 /* UIViewController+Tests.swift in Sources */, D3C8C2061B66D2FF004CAD7F /* ARImageTests.m in Sources */, - 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */, 3CE75A0B18B6367F00885355 /* ARValueTransformerTests.m in Sources */, 3CA1E820188465F0003C622D /* Sale+Extensions.m in Sources */, 5E1BF7491EEB239800A9ED63 /* SaleOnHoldOverlayViewTests.swift in Sources */, diff --git a/Artsy/App/ARAnalyticsVisualizer.h b/Artsy/App/ARAnalyticsVisualizer.h deleted file mode 100644 index ff4f8d1bf8b..00000000000 --- a/Artsy/App/ARAnalyticsVisualizer.h +++ /dev/null @@ -1,7 +0,0 @@ -#import -#import - - -@interface ARAnalyticsVisualizer : ARAnalyticalProvider - -@end diff --git a/Artsy/App/ARAnalyticsVisualizer.m b/Artsy/App/ARAnalyticsVisualizer.m deleted file mode 100644 index 32f17ce0e7c..00000000000 --- a/Artsy/App/ARAnalyticsVisualizer.m +++ /dev/null @@ -1,72 +0,0 @@ - - -#import "ARAnalyticsVisualizer.h" -#import "ARNotificationView.h" -#import "ARScreenPresenterModule.h" - -#import - - -@implementation ARAnalyticsVisualizer - -- (void)event:(NSString *)event withProperties:(NSDictionary *)properties -{ - dispatch_async(dispatch_get_main_queue(), ^{ - NSString *title = [self alertTitleForEvent:event withProperties:properties]; - - [ARNotificationView showNoticeInView:[self findVisibleWindow] title:title time:1.5 response:^{ - UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:[properties description] preferredStyle:UIAlertControllerStyleActionSheet]; - - [alert addAction:[UIAlertAction actionWithTitle:@"Copy Description" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - [[UIPasteboard generalPasteboard] setValue:[properties description]forPasteboardType:(NSString *)kUTTypePlainText]; - }]]; - - [alert addAction:[UIAlertAction actionWithTitle:@"Copy Stack Trace for Devs" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { - NSString *stack = [NSString stringWithFormat:@"%@", [NSThread callStackSymbols]]; - [[UIPasteboard generalPasteboard] setValue:stack forPasteboardType:(NSString *)kUTTypePlainText]; - }]]; - - [alert addAction:[UIAlertAction actionWithTitle:@"Great, continue." style:UIAlertActionStyleCancel handler:nil]]; - - // Sometimes the TopVC is being presented, e.g. for onboarding/ showing login, or the alerts - UIViewController *topVC = [ARScreenPresenterModule currentlyPresentedVC]; - - if (alert.popoverPresentationController) { - // Being presented on an iPad, so it needs some further configuration. - // See: https://stackoverflow.com/questions/31577140/uialertcontroller-is-crashed-ipad - alert.popoverPresentationController.sourceView = topVC.view; - alert.popoverPresentationController.sourceRect = topVC.view.bounds; - alert.popoverPresentationController.permittedArrowDirections = 0; - } - - [topVC presentViewController:alert animated:YES completion:nil]; - }]; - }); -} - -- (NSString *)alertTitleForEvent:(NSString *)event withProperties:(NSDictionary *)properties -{ - if ([event isEqualToString:@"Screen view"]) { - return [NSString stringWithFormat:@"Screen View: %@", properties[@"slug"] ?: properties[@"screen"]]; - } else { - if (properties.allKeys.count == 1) { - return [NSString stringWithFormat:@"%@: %@ - %@", event, properties.allKeys.firstObject, properties.allValues.firstObject]; - - } else { - return event; - } - } -} - -- (UIWindow *)findVisibleWindow -{ - NSArray *windows = [[UIApplication sharedApplication] windows]; - for (UIWindow *window in [windows reverseObjectEnumerator]) { - if (!window.hidden) { - return window; - } - } - return nil; -} - -@end diff --git a/Artsy/App/ARAppActivityContinuationDelegate.m b/Artsy/App/ARAppActivityContinuationDelegate.m index 29bf56e81ae..e34f4598eda 100644 --- a/Artsy/App/ARAppActivityContinuationDelegate.m +++ b/Artsy/App/ARAppActivityContinuationDelegate.m @@ -3,7 +3,6 @@ #import "ARAppDelegate+Analytics.h" #import "ARUserManager.h" #import "ArtsyAPI.h" -#import "ArtsyAPI+Sailthru.h" #import #import @@ -45,11 +44,8 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct static void DecodeURL(NSURL *URL, void (^callback)(NSURL *URL)) { - if ([URL.host isEqualToString:SailthruLinkDomain]) { - [ArtsyAPI getDecodedURLAndRegisterClick:URL completion:callback]; - } else { - callback(URL); - } + // TODO: Decode Braze url + callback(URL); } @end diff --git a/Artsy/App/ARAppDelegate+Analytics.h b/Artsy/App/ARAppDelegate+Analytics.h index 6db4da22d4e..df64da3704a 100644 --- a/Artsy/App/ARAppDelegate+Analytics.h +++ b/Artsy/App/ARAppDelegate+Analytics.h @@ -3,7 +3,6 @@ @interface ARAppDelegate (Analytics) -- (void)setupAnalytics; - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer; @end diff --git a/Artsy/App/ARAppDelegate+Analytics.m b/Artsy/App/ARAppDelegate+Analytics.m index de9ef0702e1..a720c042473 100644 --- a/Artsy/App/ARAppDelegate+Analytics.m +++ b/Artsy/App/ARAppDelegate+Analytics.m @@ -1,48 +1,8 @@ // MARK: Formatter Exempt #import "ARAppDelegate+Analytics.h" -#import #import "ARAnalyticsConstants.h" -#import -#import - -#import "AROptions.h" -#import "Artsy-Swift.h" - -#import "Artist.h" -#import "Artwork.h" -#import "ARDefaults.h" -#import "ARUserManager.h" -#import "Fair.h" -#import "FairOrganizer.h" -#import "Gene.h" -#import "Partner.h" -#import "PartnerShow.h" -#import "Profile.h" -#import "ARAnalyticsVisualizer.h" -#import "ARAppNotificationsDelegate.h" - -// View Controllers -#import "ARInternalMobileWebViewController.h" -#import "ARSignUpSplashViewController.h" -#import "ARPersonalizeViewController.h" -#import "AROnboardingPersonalizeTableViewController.h" -#import "ARPriceRangeViewController.h" -#import "ARViewInRoomViewController.h" -#import "ARSharingController.h" -#import "ARNavigationController.h" -#import "ARSentryAnalyticsProvider.h" -#import "ARSegmentProvider.h" -#import "ARAugmentedRealityConfig.h" -#import "ARAugmentedVIRSetupViewController.h" -#import "ARAugmentedFloorBasedVIRViewController.h" - - -// Views -#import "ARAppStatus.h" - -#import -#import +#import // Note the Eigen Schema: // https://docs.google.com/spreadsheets/u/1/d/1bLbeOgVFaWzLSjxLOBDNOKs757-zBGoLSM1lIz3OPiI/edit#gid=497747862 @@ -50,54 +10,11 @@ @implementation ARAppDelegate (Analytics) - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer { - [ARUserManager identifyAnalyticsUser]; NSString *concreteReferrer = referrer ? referrer : @"unknown"; - [ARAnalytics event:ARAnalyticsDeepLinkOpened withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsDeepLinkOpened traits:@{ @"link" : url.absoluteString, @"referrer": concreteReferrer, }]; } -- (void)setupAnalytics -{ - NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; - NSString *sentryEnv = [ReactNativeConfig envFor:@"SENTRY_DSN"]; - - if (ARAppStatus.isBetaOrDev) { - segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; - } - - if (ARAppStatus.isDev) { - sentryEnv = nil; - } - - // For OSS builds don't ship the sentry env - if (sentryEnv && ![sentryEnv isEqualToString:@"-"]) { - id sentry = [[ARSentryAnalyticsProvider alloc] initWithDSN:sentryEnv]; - [ARAnalytics setupProvider:sentry]; - } - - if ([AROptions boolForOption:AROptionsShowAnalyticsOnScreen]) { - ARAnalyticsVisualizer *visualizer = [ARAnalyticsVisualizer new]; - [ARAnalytics setupProvider:visualizer]; - } - - [ARAnalytics setupProvider:[[ARSegmentProvider alloc] initWithIdentifier:segmentWriteKey integrations:nil]]; - - [ARUserManager identifyAnalyticsUser]; - [ARAnalytics incrementUserProperty:ARAnalyticsAppUsageCountProperty byInt:1]; - - switch ([[[UIScreen mainScreen] traitCollection] userInterfaceStyle]) { - case UIUserInterfaceStyleUnspecified: - [ARAnalytics setUserProperty:@"user interface style" toValue:@"unspecified"]; - break; - case UIUserInterfaceStyleLight: - [ARAnalytics setUserProperty:@"user interface style" toValue:@"light"]; - break; - case UIUserInterfaceStyleDark: - [ARAnalytics setUserProperty:@"user interface style" toValue:@"dark"]; - break; - } -} - @end diff --git a/Artsy/App/ARAppDelegate+Emission.m b/Artsy/App/ARAppDelegate+Emission.m index 2fa0ac2b251..ae07e8f24ba 100644 --- a/Artsy/App/ARAppDelegate+Emission.m +++ b/Artsy/App/ARAppDelegate+Emission.m @@ -34,7 +34,6 @@ #import #import #import -#import #import "ARAdminNetworkModel.h" #import "Artsy-Swift.h" @@ -116,7 +115,7 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; [ARRouter setup]; if (launchCount == 1) { - [ARAnalytics event:ARAnalyticsFreshInstall]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsFreshInstall traits:@{}]; } if (launchCount == 3) { @@ -160,19 +159,18 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; if (info[@"action_type"]) { // Track event [properties removeObjectForKey:@"action_type"]; - [ARAnalytics event:info[@"action_type"] withProperties:[properties copy]]; + [[AREmission sharedInstance] sendEvent:info[@"action_type"] traits:[properties copy]]; } else if (info[@"action"]) { if ([info[@"action"] isEqualToString:@"screen"]) { // Screen event from cohesion - [ARAnalytics pageView:info[@"context_screen_owner_type"] withProperties:[properties copy]]; + [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen_owner_type"] traits:[properties copy]]; } else { // Track event - [ARAnalytics event:info[@"action"] withProperties:[properties copy]]; + [[AREmission sharedInstance] sendEvent:info[@"action"] traits:[properties copy]]; } } else { // Screen event - [properties removeObjectForKey:@"context_screen"]; - [ARAnalytics pageView:info[@"context_screen"] withProperties:[properties copy]]; + [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen"] traits:[properties copy]]; } }; } diff --git a/Artsy/App/ARAppDelegate.h b/Artsy/App/ARAppDelegate.h index e02adda2e71..1de76424f1c 100644 --- a/Artsy/App/ARAppDelegate.h +++ b/Artsy/App/ARAppDelegate.h @@ -1,8 +1,8 @@ #import #import "AROnboardingViewController.h" -#import +#import -@class ARWindow, SailthruMobile, ArtsyEcho; +@class ARWindow, ArtsyEcho; // This class, and infact the complete JSDecoupledAppDelegate class, is not used during testing. // The test app delegate class is ARTestHelper and is responsible for seting up the test env. @@ -11,7 +11,7 @@ // (`[JSDecoupledAppDelegate sharedAppDelegate]`) to perform your tests on. -@interface ARAppDelegate : UIResponder +@interface ARAppDelegate : UIResponder + (ARAppDelegate *)sharedInstance; @@ -21,9 +21,6 @@ @property (strong, nonatomic, readonly) NSString *referralURLRepresentation; @property (strong, nonatomic, readonly) NSString *landingURLRepresentation; -/// Shared Sailthru instance. -@property (strong, readonly) SailthruMobile *sailThru; - /// The Artsy echo instance for feature flags, and url routing etc @property (nonatomic, readwrite, strong) ArtsyEcho *echo; diff --git a/Artsy/App/ARAppDelegate.m b/Artsy/App/ARAppDelegate.m index 5b7ef6f67c1..ad524c96355 100644 --- a/Artsy/App/ARAppDelegate.m +++ b/Artsy/App/ARAppDelegate.m @@ -5,10 +5,11 @@ #import #import #import +#import "AppboyReactUtils.h" +#import +#import -#import #import "ARAnalyticsConstants.h" - #import "ARAppDelegate.h" #import "ARAppDelegate+Analytics.h" #import "ARAppDelegate+Emission.h" @@ -85,8 +86,6 @@ + (void)load // protocol, as it means we would have to implement `application:openURL:options:` which seems tricky if we still // have to implement `application:openURL:sourceApplication:annotation:` as well. [JSDecoupledAppDelegate sharedAppDelegate].URLResourceOpeningDelegate = (id)_sharedInstance; - - } + (ARAppDelegate *)sharedInstance @@ -132,11 +131,6 @@ - (void)setupForAppLaunch // Temp Fix for: https://github.com/artsy/eigen/issues/602 [self forceCacheCustomFonts]; - // This cannot be moved after the view setup code, as it - // relies on swizzling alloc on new objects, thus should be - // one of the first things that happen. - [self setupAnalytics]; - [JSDecoupledAppDelegate sharedAppDelegate].remoteNotificationsDelegate = [[ARAppNotificationsDelegate alloc] init]; self.window = [[ARWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; @@ -150,7 +144,7 @@ - (void)setupForAppLaunch [[ARLogger sharedLogger] startLogging]; [self setupEmission]; - self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Main" initialProperties:@{}]; + self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Artsy" initialProperties:@{}]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; @@ -159,7 +153,6 @@ - (void)setupForAppLaunch self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; } - [ARWebViewCacheHost startup]; [self registerNewSessionOpened]; } @@ -173,14 +166,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [self setupForAppLaunch]; - NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; - - NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary]; - appboyOptions[ABKAppboyEndpointDelegateKey] = self; - [Appboy startWithApiKey:brazeAppKey - inApplication:application - withLaunchOptions:launchOptions - withAppboyOptions:appboyOptions]; + [self setupAnalytics:application withLaunchOptions:launchOptions]; FBSDKApplicationDelegate *fbAppDelegate = [FBSDKApplicationDelegate sharedInstance]; [fbAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; @@ -190,13 +176,41 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( return YES; } -- (NSString *)getApiEndpoint:(NSString *)appboyApiEndpoint { - return @"sdk.iad-06.braze.com"; +- (void)setupAnalytics:(UIApplication *)application withLaunchOptions:(NSDictionary *)launchOptions +{ + UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; + center.delegate = [self remoteNotificationsDelegate]; + NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_STAGING_APP_KEY_IOS"]; + if (![ARAppStatus isDev]) { + brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; + } + + NSString *brazeSDKEndPoint = @"sdk.iad-06.braze.com"; + NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary]; + appboyOptions[ABKEndpointKey] = brazeSDKEndPoint; + [Appboy startWithApiKey:brazeAppKey + inApplication:application + withLaunchOptions:launchOptions + withAppboyOptions:appboyOptions]; + + NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; + if (![ARAppStatus isDev]) { + segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; + } + + SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:segmentWriteKey]; + configuration.trackApplicationLifecycleEvents = YES; + configuration.trackPushNotifications = YES; + configuration.trackDeepLinks = YES; + [SEGAnalytics setupWithConfiguration:configuration]; + [[SEGAppboyIntegrationFactory instance] saveLaunchOptions:launchOptions]; + [[AppboyReactUtils sharedInstance] populateInitialUrlFromLaunchOptions:launchOptions]; } - (void)registerNewSessionOpened { - [ARAnalytics startTimingEvent:ARAnalyticsTimePerSession]; + // TODO: Customise APPBOY Sessions + //A session is started when you call [[Appboy sharedInstance] startWithApiKey:inApplication:withLaunchOptions:withAppboyOptions] } /// This happens every time we come _back_ to the app from the background @@ -204,16 +218,22 @@ - (void)registerNewSessionOpened - (void)applicationWillEnterForeground:(UIApplication *)application { [self registerNewSessionOpened]; + + NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; + if (currentUserId) { + [[Appboy sharedInstance] changeUser: currentUserId]; + } } - (void)applicationDidEnterBackground:(UIApplication *)application { - [ARAnalytics finishTimingEvent:ARAnalyticsTimePerSession]; + // MANUALLY track lifecycle event. Segment already does this if + // trackLifecycleSessions: true } - (ARAppNotificationsDelegate *)remoteNotificationsDelegate; { - return [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; + return (ARAppNotificationsDelegate *)[[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; } - (void)forceCacheCustomFonts @@ -229,11 +249,6 @@ - (void)forceCacheCustomFonts - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:(BOOL)animated { - // We now have a proper Artsy user, not just a local temporary ID - // So we have to re-identify the analytics user - // to ensure we start sending the Gravity ID as well as the local temporary ID - [ARUserManager identifyAnalyticsUser]; - // And update emission's auth state [[AREmission sharedInstance] updateState:@{ [ARStateKey userID]: [[[ARUserManager sharedManager] currentUser] userID], @@ -241,13 +256,16 @@ - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:( [ARStateKey authenticationToken]: [[ARUserManager sharedManager] userAuthenticationToken], }]; + NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; + [[Appboy sharedInstance] changeUser: currentUserId]; + ar_dispatch_main_queue(^{ if ([User currentUser]) { [self setupAdminTools]; } if (!([[NSUserDefaults standardUserDefaults] integerForKey:AROnboardingUserProgressionStage] == AROnboardingStageOnboarding)) { - ARAppNotificationsDelegate *remoteNotificationsDelegate = [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; + ARAppNotificationsDelegate *remoteNotificationsDelegate = [self remoteNotificationsDelegate]; [remoteNotificationsDelegate registerForDeviceNotificationsWithContext:ARAppNotificationsRequestContextOnboarding]; } }); diff --git a/Artsy/App/ARAppNotificationsDelegate.h b/Artsy/App/ARAppNotificationsDelegate.h index b834f9ee588..9678d8a58a6 100644 --- a/Artsy/App/ARAppNotificationsDelegate.h +++ b/Artsy/App/ARAppNotificationsDelegate.h @@ -2,8 +2,9 @@ #import #import +#import -@interface ARAppNotificationsDelegate : NSObject +@interface ARAppNotificationsDelegate : NSObject typedef NS_ENUM(NSInteger, ARAppNotificationsRequestContext) { ARAppNotificationsRequestContextLaunch, diff --git a/Artsy/App/ARAppNotificationsDelegate.m b/Artsy/App/ARAppNotificationsDelegate.m index 106351d42f7..e5e9e9bfb8a 100644 --- a/Artsy/App/ARAppNotificationsDelegate.m +++ b/Artsy/App/ARAppNotificationsDelegate.m @@ -3,6 +3,8 @@ #import "ArtsyAPI+Notifications.h" #import "ArtsyAPI+DeviceTokens.h" #import "ArtsyAPI+CurrentUserFunctions.h" +#import +#import #import "ARAppDelegate.h" #import "ARAppConstants.h" @@ -17,7 +19,6 @@ #import #import -#import #import #import "Appboy-iOS-SDK/AppboyKit.h" @@ -93,7 +94,7 @@ - (void)registerUserInterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext, @@ -117,12 +118,11 @@ - (void)registerUserDisinterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext }]; - [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:ARPushNotificationsDialogueLastSeenDate]; } @@ -167,7 +167,7 @@ - (void)registerForDeviceNotificationsWithApple UNAuthorizationOptions authOptions = (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert); [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { NSString *grantedString = granted ? @"YES" : @"NO"; - [ARAnalytics event:ARAnalyticsPushNotificationsRequested withProperties:@{@"granted" : grantedString}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationsRequested traits:@{@"granted" : grantedString}]; [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted]; }]; @@ -189,7 +189,7 @@ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotif analyticsContext = @"Launch"; } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext @@ -212,7 +212,7 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext @@ -231,12 +231,11 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio // Save device token purely for the admin settings view. [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:ARAPNSDeviceTokenKey]; - [[Appboy sharedInstance] registerPushToken:deviceToken]; + [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsEnabledNotificationsProperty: @1}]; + [[Appboy sharedInstance] registerDeviceToken:deviceTokenData]; // We only record device tokens on the Artsy service in case of Beta or App Store builds. #ifndef DEBUG - [ARAnalytics setUserProperty:ARAnalyticsEnabledNotificationsProperty toValue:@"true"]; - // Apple says to always save the device token, as it may change. In addition, since we allow a device to register // for notifications even if the user has not signed-in, we must be sure to always update this to ensure the Artsy // service always has an up-to-date record of devices and associated users. @@ -258,10 +257,17 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler; { - [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; + [[Appboy sharedInstance] registerApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler]; + + if ([Appboy sharedInstance] == nil) { + [[SEGAppboyIntegrationFactory instance] saveRemoteNotification:userInfo]; + } + + [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; + handler(UIBackgroundFetchResultNoData); } @@ -308,12 +314,13 @@ - (void)applicationDidReceiveRemoteNotification:(NSDictionary *)userInfo inAppli - (void)receivedNotification:(NSDictionary *)notificationInfo; { - [ARAnalytics event:ARAnalyticsNotificationReceived withProperties:notificationInfo]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationReceived traits:notificationInfo]; + [[SEGAnalytics sharedAnalytics] receivedRemoteNotification:notificationInfo]; } - (void)tappedNotification:(NSDictionary *)notificationInfo url:(NSString *)url; { - [ARAnalytics event:ARAnalyticsNotificationTapped withProperties:notificationInfo]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationTapped traits:notificationInfo]; NSDictionary *props = [self filteredProps:notificationInfo]; [[AREmission sharedInstance] navigate:url withProps:props]; @@ -353,4 +360,22 @@ - (BOOL)tokensAreTheSame:(NSString *)newToken previousToken:(NSString * _Nullabl } } +#pragma mark - UNUserNotificationCenterDelegate + +- (void)userNotificationCenter:(UNUserNotificationCenter *)center + willPresentNotification:(UNNotification *)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { + if (@available(iOS 14.0, *)) { + completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner); + } else { + completionHandler(UNNotificationPresentationOptionAlert); + } +} + +- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { + [[Appboy sharedInstance] userNotificationCenter:center + didReceiveNotificationResponse:response + withCompletionHandler:completionHandler]; +} + @end diff --git a/Artsy/App/AROptions.h b/Artsy/App/AROptions.h index 55b836c4d5a..8bef7417fba 100644 --- a/Artsy/App/AROptions.h +++ b/Artsy/App/AROptions.h @@ -3,7 +3,6 @@ // All the options as consts extern NSString *const AROptionsDebugARVIR; extern NSString *const AROptionsDisableNativeLiveAuctions; -extern NSString *const AROptionsShowAnalyticsOnScreen; extern NSString *const AROptionsShowMartsyOnScreen; @interface AROptions : NSObject diff --git a/Artsy/App/AROptions.m b/Artsy/App/AROptions.m index e48bf6ba96e..d857255acf9 100644 --- a/Artsy/App/AROptions.m +++ b/Artsy/App/AROptions.m @@ -7,7 +7,6 @@ // Up here is the NSUserDefault set, and sent into Emission // UI Tweaks -NSString *const AROptionsShowAnalyticsOnScreen = @"AROptionsShowAnalyticsOnScreen"; NSString *const AROptionsShowMartsyOnScreen = @"AROptionsShowMartsyOnScreen"; // UX changes diff --git a/Artsy/App/ARScreenPresenterModule.m b/Artsy/App/ARScreenPresenterModule.m index 96b71252798..ca47415dab1 100644 --- a/Artsy/App/ARScreenPresenterModule.m +++ b/Artsy/App/ARScreenPresenterModule.m @@ -105,12 +105,12 @@ - (dispatch_queue_t)methodQueue; ARModalViewController *modal = [[ARModalViewController alloc] initWithStack:stack]; modal.modalPresentationStyle = modalPresentationStyle; - + UIViewController *topVC = [self.class currentlyPresentedVC]; UIViewController *parentVC = [topVC presentingViewController]; - + BOOL shouldReplaceTopVC = [viewDescriptor[@"replace"] boolValue]; - + if (shouldReplaceTopVC) { [parentVC dismissViewControllerAnimated:NO completion:^{ [parentVC presentViewController:modal animated:YES completion:^{ @@ -347,28 +347,31 @@ - (void)presentNativeEmailComposer:(nonnull NSString *)toAddress subject:(nonnul // But in case there is severe RAM or disk pressure, the image might already be evicted from the cache. // In the rare occurence that a cache lookup fails, download the image into the cache first. SDWebImageManager *manager = [SDWebImageManager sharedManager]; - if ([manager cachedImageExistsForURL:url]) { - NSString *key = [manager cacheKeyForURL:url]; - UIImage *image = [manager.imageCache imageFromDiskCacheForKey:key]; - // TODO: Verify that this _does_ actually get a cache hit most often. - gotImageBlock(image); - } else { - [manager downloadImageWithURL:url options:(SDWebImageHighPriority) progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { - if (finished && !error) { + NSString *key = [manager cacheKeyForURL:url]; + [manager.imageCache containsImageForKey:key cacheType:SDImageCacheTypeAll completion:^(SDImageCacheType containsCacheType) { + if (containsCacheType != SDImageCacheTypeNone) { + [manager.imageCache queryImageForKey:key options:0 context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { + // TODO: Verify that this _does_ actually get a cache hit most often. gotImageBlock(image); - } else { - // Errors are unlikely to happen, but we should handle them just in case. - // This represents both an image cache-miss _and_ a failure to - // download the image on its own. Very unlikely. - NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; - [alert addAction:defaultAction]; - [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; - } - }]; - } - }]; + }]; + } else { + [manager loadImageWithURL:url options:SDWebImageHighPriority progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { + if (finished && !error) { + gotImageBlock(image); + } else { + // Errors are unlikely to happen, but we should handle them just in case. + // This represents both an image cache-miss _and_ a failure to + // download the image on its own. Very unlikely. + NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; + [alert addAction:defaultAction]; + [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; + } + }]; + } + }]; + }]; } #pragma mark - MFMailComposeViewControllerDelegate diff --git a/Artsy/App/ARSegmentProvider.h b/Artsy/App/ARSegmentProvider.h deleted file mode 100644 index 6dd9cfb0c1d..00000000000 --- a/Artsy/App/ARSegmentProvider.h +++ /dev/null @@ -1,9 +0,0 @@ -#import -#import "SegmentioProvider.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ARSegmentProvider : SegmentioProvider -@end - -NS_ASSUME_NONNULL_END diff --git a/Artsy/App/ARSegmentProvider.m b/Artsy/App/ARSegmentProvider.m deleted file mode 100644 index 60e2a17ca74..00000000000 --- a/Artsy/App/ARSegmentProvider.m +++ /dev/null @@ -1,36 +0,0 @@ -#import "ARSegmentProvider.h" -#import "ARAnalyticsProviders.h" -#import "SEGAnalytics.h" - -@interface ARSegmentProvider () -@property (nonatomic, copy) NSDictionary *traits; -@end - -@implementation ARSegmentProvider - -/* - * Overrides initializer to disable tracking the idfa in the Segment config - * the rest of the provider's functionality should be the same - */ -- (instancetype)initWithIdentifier:(NSString *)identifier integrations:(NSArray *)integrations { - if ((self = [super init])) { - SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWithWriteKey:identifier]; - config.enableAdvertisingTracking = NO; - for (id integration in integrations) { - [config use:integration]; - } - [SEGAnalytics setupWithConfiguration:config]; - _traits = @{}; - } - return self; -} - -/* - * Overrides identify call to not pass emails to Segment - */ -- (void)identifyUserWithID:(NSString *)userID anonymousID:(NSString *)anonymousID andEmailAddress:(NSString *)email { - [super identifyUserWithID:userID anonymousID:anonymousID andEmailAddress:nil]; -} - -@end - diff --git a/Artsy/App/ARSentryAnalyticsProvider.h b/Artsy/App/ARSentryAnalyticsProvider.h deleted file mode 100644 index 428c71ba1b1..00000000000 --- a/Artsy/App/ARSentryAnalyticsProvider.h +++ /dev/null @@ -1,6 +0,0 @@ -#import -#import - -@interface ARSentryAnalyticsProvider : ARAnalyticalProvider -- (id)initWithDSN:(NSString *)DSN; -@end diff --git a/Artsy/App/ARSentryAnalyticsProvider.m b/Artsy/App/ARSentryAnalyticsProvider.m deleted file mode 100644 index c8530d62e4e..00000000000 --- a/Artsy/App/ARSentryAnalyticsProvider.m +++ /dev/null @@ -1,44 +0,0 @@ -#import "ARSentryAnalyticsProvider.h" -#import -#import -#import -#import -#import - -@implementation ARSentryAnalyticsProvider - -- (id)initWithDSN:(NSString *)DSN -{ - self = [super init]; - if (!self) { return nil; } - - [SentrySDK startWithConfigureOptions:^(SentryOptions *options) { - options.dsn = DSN; - }]; - - return self; -} - -- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email -{ - if (userID) { - NSParameterAssert(email); - SentryUser *user = [[SentryUser alloc] initWithUserId:userID]; - user.email = email; - user.username = email; - [SentrySDK setUser:user]; - } -} - -// An event in Sentry terms is a crash, so in this case we're sending along events from analytics as breadcrumbs - -- (void)event:(NSString *)event withProperties:(NSDictionary *)properties -{ - SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:kSentryLevelDebug category:event]; - breadcrumb.data = properties; - breadcrumb.timestamp = [NSDate new]; - [SentrySDK addBreadcrumb:breadcrumb]; -} - -@end - diff --git a/Artsy/App_Resources/Artsy-Info.plist b/Artsy/App_Resources/Artsy-Info.plist index 07569efc426..cd670a6b684 100644 --- a/Artsy/App_Resources/Artsy-Info.plist +++ b/Artsy/App_Resources/Artsy-Info.plist @@ -2,6 +2,11 @@ + Braze + + LogLevel + 0 + AppIdentifierPrefix $(AppIdentifierPrefix) CFBundleDevelopmentRegion diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h index eae013afd81..79ddaeeed23 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h @@ -7,7 +7,7 @@ - (void)ar_setImageWithURL:(NSURL *)url; -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completed; +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completed; - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m index 0ce27b13fa3..a44f1c19fb0 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m @@ -1,4 +1,5 @@ #import +#import #import #import "ARAppConstants.h" @@ -11,7 +12,7 @@ @implementation UIImageView (AsyncImageLoading) - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder - completed:(SDWebImageCompletionBlock)completionBlock + completed:(SDExternalCompletionBlock)completionBlock { if (!placeholder) { placeholder = [UIImage imageFromColor:[UIColor artsyGrayRegular]]; @@ -19,13 +20,19 @@ - (void)ar_setImageWithURL:(NSURL *)url // In testing provide the ability to do a synchronous fast image cache call if (!ARPerformWorkAsynchronously) { - SDWebImageManager *manager = [SDWebImageManager sharedManager]; - if ([manager cachedImageExistsForURL:url]) { - NSString *key = [manager cacheKeyForURL:url]; - self.image = [manager.imageCache imageFromDiskCacheForKey:key]; - if (completionBlock) { completionBlock(self.image, nil, SDImageCacheTypeDisk, url); } - return; - } + SDImageCache *imageCache = [SDImageCache sharedImageCache]; + NSString *key = url.absoluteString; + [imageCache containsImageForKey:key cacheType:SDImageCacheTypeMemory completion:^(SDImageCacheType containsCacheType) { + if (containsCacheType != SDImageCacheTypeNone) { + [imageCache queryImageForKey:key options:SDWebImageQueryMemoryDataSync context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { + self.image = image; + if (completionBlock != nil) { + completionBlock(self.image, nil, containsCacheType, url); + } + }]; + return; + } + }]; } if ([ARLogger shouldLogNetworkRequests]) { @@ -62,7 +69,7 @@ - (void)ar_setImageWithURL:(NSURL *)url if (completionBlock) { completionBlock(image, error, cacheType, imageURL); } - }]; + }]; } else { [self sd_setImageWithURL:url placeholderImage:placeholder completed:completionBlock]; } @@ -78,8 +85,7 @@ - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder [self ar_setImageWithURL:url placeholderImage:placeholder completed:nil]; } -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completionBlock -{ +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completionBlock{ [self ar_setImageWithURL:url placeholderImage:nil completed:completionBlock]; } diff --git a/Artsy/Networking/API_Modules/ARUserManager.h b/Artsy/Networking/API_Modules/ARUserManager.h index e9ce64210bd..ab69e65ee3a 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.h +++ b/Artsy/Networking/API_Modules/ARUserManager.h @@ -14,8 +14,6 @@ extern NSString *const ARUserSessionStartedNotification; + (BOOL)didCreateAccountThisSession; -+ (void)identifyAnalyticsUser; - - (User *)currentUser; - (void)storeUserData; diff --git a/Artsy/Networking/API_Modules/ARUserManager.m b/Artsy/Networking/API_Modules/ARUserManager.m index 04ee172335e..c479b565210 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.m +++ b/Artsy/Networking/API_Modules/ARUserManager.m @@ -23,7 +23,6 @@ #import "ARDispatchManager.h" #import "ARScreenPresenterModule.h" -#import #import #import @@ -62,15 +61,6 @@ + (BOOL)didCreateAccountThisSession return self.sharedManager.didCreateAccountThisSession; } -+ (void)identifyAnalyticsUser -{ - User *user = [User currentUser]; - NSString *anonymousID = self.sharedManager.localTemporaryUserUUID; - - [ARAnalytics setUserProperty:@"is_temporary_user" toValue:@(user == nil)]; - [ARAnalytics identifyUserWithID:user.userID anonymousID:anonymousID andEmailAddress:user.email]; -} - - (instancetype)init { self = [super init]; @@ -338,7 +328,7 @@ - (void)createUserWithName:(NSString *)name if (success) success(user); - [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"email"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"email"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { ARActionLog(@"Creating a new user account failed. Error: %@,\nJSON: %@", error.localizedDescription, JSON); failure(error, JSON); @@ -369,7 +359,7 @@ - (void)createUserViaFacebookWithToken:(NSString *)token email:(NSString *)email if (success) { success(user); } - [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"facebook"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"facebook"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -403,7 +393,7 @@ - (void)createUserViaAppleWithUID:(NSString *)appleUID if (success) { success(user); } - [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"apple"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"apple"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -480,7 +470,7 @@ - (void)sendPasswordResetForEmail:(NSString *)email success:(void (^)(void))succ AFHTTPRequestOperation *op = [AFHTTPRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { if (success) { - [ARAnalytics event:ARAnalyticsOnboardingForgotPasswordSent]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPasswordSent traits:@{}]; success(); } } @@ -503,8 +493,6 @@ - (void)storeUserData [NSKeyedArchiver archiveRootObject:self.currentUser toFile:userDataPath]; #pragma clang diagnostic pop - [ARUserManager identifyAnalyticsUser]; - [[NSUserDefaults standardUserDefaults] setObject:self.currentUser.userID forKey:ARUserIdentifierDefault]; [[NSUserDefaults standardUserDefaults] synchronize]; } @@ -736,7 +724,7 @@ - (void)tryLoginWithSharedWebCredentials:(void (^)(NSError *error))completion; } else { NSDictionary *account = [(__bridge NSArray *)credentials firstObject]; if (account) { - [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"safari keychain"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"safari keychain"}]; [[ARUserManager sharedManager] loginWithUsername:account[(__bridge NSString *)kSecAttrAccount] password:account[(__bridge NSString *)kSecSharedPassword] diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h deleted file mode 100644 index f87949c3dbb..00000000000 --- a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h +++ /dev/null @@ -1,11 +0,0 @@ -#import "ArtsyAPI.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface ArtsyAPI (Sailthru) - -+ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m deleted file mode 100644 index 8dff80332d5..00000000000 --- a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m +++ /dev/null @@ -1,35 +0,0 @@ -#import "ArtsyAPI+Sailthru.h" -#import "ARRouter.h" - -#import -#import - -@implementation ArtsyAPI (Sailthru) - -+ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; -{ - [[[AREmission sharedInstance] notificationsManagerModule] afterBootstrap:^{ - [ARRouter setup]; - [ArtsyAPI _getDecodedURLAndRegisterClick:encodedURL completion:completion]; - }]; -} - -+ (void)_getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; -{ - NSURLRequest *request = [ARRouter newSailthruRegisterClickAndDecodeURLRequest:encodedURL]; - AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; - [operation setRedirectResponseBlock:^NSURLRequest *(id _, NSURLRequest *request, NSURLResponse *response) { - if (response == nil) { - return request; - } else { - NSURL *decodedURL = [NSURL URLWithString:[(NSHTTPURLResponse *)response allHeaderFields][@"Location"]]; - dispatch_async(dispatch_get_main_queue(), ^{ - completion(decodedURL); - }); - return nil; - } - }]; - [[NSOperationQueue mainQueue] addOperation:operation]; -} - -@end diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m index 36cb9cdd556..fcc5a3d21c1 100644 --- a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m @@ -7,7 +7,6 @@ #import "MTLModel+JSON.h" #import -#import @implementation ArtsyAPI (Sales) diff --git a/Artsy/Networking/ARAuthProviders.m b/Artsy/Networking/ARAuthProviders.m index 0762cad409a..9cfd5f99805 100644 --- a/Artsy/Networking/ARAuthProviders.m +++ b/Artsy/Networking/ARAuthProviders.m @@ -7,7 +7,7 @@ #import #import -#import +#import #import "ARAnalyticsConstants.h" #import @@ -29,7 +29,7 @@ + (void)getTokenForFacebook:(void (^)(NSString *token, NSString *email, NSString } else if (!error && !result.token) { NSString *description = error ? [error description] : @"token was nil"; - [ARAnalytics event:ARAnalyticsErrorFailedToGetFacebookCredentials withProperties:@{ @"error" : description }]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsErrorFailedToGetFacebookCredentials traits:@{ @"error" : description }]; ARErrorLog(@"Couldn't get Facebook credentials"); failure(error); diff --git a/Artsy/Networking/ARRouter.h b/Artsy/Networking/ARRouter.h index 801321978e4..175abcbc9e7 100644 --- a/Artsy/Networking/ARRouter.h +++ b/Artsy/Networking/ARRouter.h @@ -128,6 +128,5 @@ #pragma mark - Misc + (NSURLRequest *)newHEADRequestForPath:(NSString *)path; -+ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; @end diff --git a/Artsy/Networking/ARRouter.m b/Artsy/Networking/ARRouter.m index 64e2998052a..16e90e0d161 100644 --- a/Artsy/Networking/ARRouter.m +++ b/Artsy/Networking/ARRouter.m @@ -746,9 +746,4 @@ + (NSURLRequest *)newHEADRequestForPath:(NSString *)path return [self requestWithMethod:@"HEAD" URLString:fullPath parameters:nil]; } -+ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; -{ - return [self requestWithMethod:@"HEAD" URLString:encodedURL.absoluteString parameters:nil]; -} - @end diff --git a/Artsy/Networking/ArtsyAPI.m b/Artsy/Networking/ArtsyAPI.m index a4cfeba7a87..7b41bed2fbf 100644 --- a/Artsy/Networking/ArtsyAPI.m +++ b/Artsy/Networking/ArtsyAPI.m @@ -15,7 +15,6 @@ #import #import #import -#import #import #import @@ -50,7 +49,7 @@ + (AFHTTPRequestOperation *)performGraphQLRequest:(NSURLRequest *)request succes if (errors) { // GraphQL queries that fail will return 200s but indicate failures with the "errors" key. We need to check them. NSLog(@"Failure fetching GraphQL query: %@", errors); - [ARAnalytics event:ARAnalyticsGraphQLResponseError withProperties:json]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsGraphQLResponseError traits:json]; if (failure) { failure([NSError errorWithDomain:@"GraphQL" code:0 userInfo:json]); } @@ -270,7 +269,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAClass:( id object = nil; if (key && [jsonDictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[jsonDictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:jsonDictionary error:nil]; } @@ -343,7 +342,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO if (key && [dictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[dictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:dictionary error:nil]; } @@ -352,7 +351,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO [returnArray addObject:object]; } } - + ar_dispatch_main_queue(^{ success(returnArray); }); diff --git a/Artsy/Resources/Artsy-Bridging-Header.h b/Artsy/Resources/Artsy-Bridging-Header.h index 0c6ea08df08..1cf4c789df2 100644 --- a/Artsy/Resources/Artsy-Bridging-Header.h +++ b/Artsy/Resources/Artsy-Bridging-Header.h @@ -90,7 +90,6 @@ #import #import #import -#import #import #import #import diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m index 2512ee80eea..a539758c858 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m @@ -10,7 +10,7 @@ #import "ARAppConstants.h" #import "ARDefaults.h" #import -#import +#import #import #import #import @@ -283,7 +283,7 @@ - (void)dismissInformationalView:(BOOL)animated - (void)hasRegisteredPlanes { - [ARAnalytics event:@"success" withProperties:@{ + [[AREmission sharedInstance] sendEvent:@"success" traits:@{ @"action_name" : @"arDetectedPlanes", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @@ -317,12 +317,13 @@ - (void)isShowingGhostWall:(BOOL)showing - (void)hasPlacedArtwork { - [ARAnalytics event:@"success" withProperties:@{ + [[AREmission sharedInstance] sendEvent:@"success" traits:@{ @"action_name" : @"arPlacedArtwork", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @"owner_slug": self.config.artworkSlug ?: @"unknown", }]; + ar_dispatch_main_queue(^{ [self.informationView next]; }); @@ -341,7 +342,7 @@ - (void)hasPlacedWall - (void)exitARContext { - [ARAnalytics event:@"ar_view_in_room_time" withProperties:@{ + [[AREmission sharedInstance] sendEvent:@"ar_view_in_room_time" traits:@{ @"length" : @([self timeInAR]) }]; // Ensure we jump past the SetupVC @@ -423,7 +424,7 @@ - (void)viewDidAppear:(BOOL)animated; { [super viewDidAppear:animated]; - [ARAnalytics pageView:@"AR View in Room"]; + [[AREmission sharedInstance] sendScreenEvent:@"AR View in Room" traits:@{}]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self presentInformationalInterface:animated]; diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m index 1f5d66af2ba..c01a8831721 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m @@ -6,7 +6,7 @@ #import #import #import -#import +#import #import "ARAppConstants.h" #import "ARDefaults.h" @@ -199,7 +199,7 @@ - (void)viewDidLoad - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - [ARAnalytics pageView:@"AR Allow Camera Access"]; + [[AREmission sharedInstance] sendEvent:@"AR Allow Camera Access" traits:@{}]; } - (void)restartVideo:(NSNotification *)notification diff --git a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m index ad5d60ca30a..91fdd2621df 100644 --- a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m +++ b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m @@ -69,7 +69,6 @@ - (void)viewDidLoad [tableViewData addSectionData:labsSection]; ARSectionData *toggleSections = [[ARSectionData alloc] initWithCellDataArray:@[ - [self generateOnScreenAnalytics], [self generateOnScreenMartsy] ]]; toggleSections.headerTitle = @"Options"; @@ -168,18 +167,6 @@ - (ARCellData *)showConsignmentsFlow }]; } -- (ARCellData *)generateOnScreenAnalytics -{ - NSString *message = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen] ? @"Stop" : @"Start"; - NSString * title = NSStringWithFormat(@"%@ on Screen Analytics", message); - - return [self tappableCellDataWithTitle:title selection:^{ - BOOL current = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen]; - [AROptions setBool:!current forOption:AROptionsShowAnalyticsOnScreen]; - exit(YES); - }]; -} - - (ARCellData *)generateOnScreenMartsy { NSString *message = [AROptions boolForOption:AROptionsShowMartsyOnScreen] ? @"Hide" : @"Show"; diff --git a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift index b9e3e77473a..10019129990 100644 --- a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift +++ b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift @@ -49,7 +49,7 @@ class AuctionInformationViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if navigationController?.topViewController == self { - ARAnalytics.pageView("Sale Information", withProperties: [ + AREmission.sharedInstance().sendScreenEvent("Sale Information", traits: [ "auction_slug": saleViewModel.saleID, "slug": NSString(format: "/auction/%@/info", saleViewModel.saleID) ]) @@ -178,7 +178,7 @@ class AuctionInformationViewController: UIViewController { } func showContact(_ animated: Bool) { - ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ + AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ "auction_slug": saleViewModel.saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" @@ -199,7 +199,7 @@ class AuctionInformationViewController: UIViewController { func showBuyersPremium(_ animated: Bool) { let saleID = saleViewModel.saleID - ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ + AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ "auction_slug": saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" diff --git a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift index a6022dc9f6b..3552c4a4adb 100644 --- a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift +++ b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift @@ -128,10 +128,10 @@ class RefinementAnalyticsOption: NSObject { } func sendAsEvent() { - ARAnalytics.event(name, withProperties: properties) + AREmission.sharedInstance().sendEvent(name, traits: properties) } func sendAsPageView() { - ARAnalytics.pageView(name, withProperties: properties) + AREmission.sharedInstance().sendScreenEvent(name, traits: properties) } } diff --git a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m index c510a44cb10..3293ca1db54 100644 --- a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m +++ b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m @@ -1,6 +1,6 @@ #import "ARViewInRoomViewController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artwork.h" @@ -99,7 +99,7 @@ - (BOOL)prefersStatusBarHidden - (void)viewDidAppear:(BOOL)animated { - [ARAnalytics event:ARAnalyticsArtworkViewInRoom withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsArtworkViewInRoom traits:@{ @"interaction_type": self.popOnRotation ? @"rotation" : @"button", @"artwork_slug": self.artwork.artworkID ?: @"", @"artist_slug": self.artwork.artist.artistID ?: @"", diff --git a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift index f5b73b8fc73..16d00001f83 100644 --- a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift +++ b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift @@ -7,8 +7,7 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { static let CellClass = LiveAuctionLotImageCollectionViewCell.self let salesPerson: LiveAuctionsSalesPersonType - let imagePrefetcher = SDWebImagePrefetcher.shared() - + let imagePrefetcher = SDWebImagePrefetcher.shared; init(salesPerson: LiveAuctionsSalesPersonType) { self.salesPerson = salesPerson super.init() @@ -20,7 +19,7 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { func beginThumbnailPrecache() { let thumbnailURLs = (1.. Int { diff --git a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m index 889cf800d05..2605d738f06 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m @@ -19,7 +19,6 @@ #import "ARParallaxEffect.h" #import "ArtsyAPI+Private.h" -#import #import "ARAnalyticsConstants.h" #import "ARDispatchManager.h" #import "ARFollowable.h" @@ -95,7 +94,7 @@ - (instancetype)init - (void)viewDidLoad { [super viewDidLoad]; - + self.view.backgroundColor = [UIColor whiteColor]; self.view.tintColor = [UIColor artsyPurpleRegular]; @@ -395,7 +394,7 @@ - (void)personalizePasswordDone:(NSString *)password - (void)personalizeLoginWithPasswordDone:(NSString *)password { [self loginUserWithEmail:self.email password:password withSuccess:^{ - [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"email"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"email"}]; [self finishAccountCreation]; }]; } @@ -477,7 +476,7 @@ - (void)conditionsOfSaleLinkTapped - (void)setPriceRangeDone:(NSInteger)range { NSString *stringRange = [NSString stringWithFormat:@"%@", @(range)]; - [ARAnalytics event:ARAnalyticsOnboardingBudgetSelected withProperties:@{ @"budget" : stringRange }]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingBudgetSelected traits:@{ @"budget" : stringRange }]; self.budgetRange = range; } @@ -557,7 +556,7 @@ - (void)sendPasswordResetEmail:(NSString *)email sender:(id)sender } failure:^(NSError *error) { ARErrorLog(@"Password reset failed for %@. Error: %@", email, error.localizedDescription); [(ARPersonalizeViewController *)sender passwordResetError:@"Couldn’t send reset password link. Please try again, or contact support@artsy.net"]; - [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : @"Couldn’t send reset password link."}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : @"Couldn’t send reset password link."}]; }]; } @@ -566,7 +565,7 @@ - (void)applyPersonalizationToUser { if (self.budgetRange && self.followedItemsDuringOnboarding) { NSString *stringRange = [NSString stringWithFormat:@"%@", @(self.budgetRange)]; - [ARAnalytics setUserProperty:ARAnalyticsPriceRangeProperty toValue:stringRange]; + [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsPriceRangeProperty: stringRange}]; User *user = [User currentUser]; user.priceRange = stringRange; @@ -676,8 +675,8 @@ - (void)loginWithFacebookCredentialToken:(NSString *)token // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"facebook"}]; - [sself finishAccountCreation]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"facebook"}]; + [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; } @@ -817,7 +816,7 @@ - (void)loginWithAppleUID:(NSString *)appleUID idToken:(NSString *)idToken { // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"apple"}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"apple"}]; [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; @@ -855,7 +854,7 @@ - (void)displayError:(NSString *)errorMessage } } [(ARPersonalizeViewController *)self.topViewController showErrorWithMessage:errorMessage]; - [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : errorMessage}]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : errorMessage}]; } - (void)displayNetworkFailureError diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m index 5421067ed8b..42c2136af2b 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m @@ -19,7 +19,7 @@ #import #import #import -#import +#import @interface ARSignUpSplashTextViewController : UIViewController @@ -88,7 +88,7 @@ - (void)viewWillAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated { - [ARAnalytics pageView:@"Onboarding start"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding start" traits:@{}]; void(^removeSpinners)(void) = ^ { if (!self.spinnerView) { return; @@ -191,7 +191,7 @@ - (void)showBackgroundViews // Business as usual [self.spinnerView alignToView:self.view]; } - + [self.spinnerView startAnimating]; NSArray *images = [self.pages map:^id(NSDictionary *object) { @@ -215,7 +215,7 @@ - (void)setupControls; [self.getStartedButton setBackgroundColor:[UIColor blackColor] forState:UIControlStateHighlighted]; [self.getStartedButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; } - + self.descriptionLabel = [[ARSerifLineHeightLabel alloc] initWithLineSpacing:6]; self.descriptionLabel.backgroundColor = [UIColor clearColor]; self.descriptionLabel.opaque = NO; @@ -224,10 +224,10 @@ - (void)setupControls; self.descriptionLabel.textAlignment = NSTextAlignmentCenter; self.descriptionLabel.numberOfLines = 0; self.descriptionLabel.text = self.pages[0][@"copy"]; - + ARTermsAndConditionsView *label = [[ARTermsAndConditionsView alloc] init]; label.hidden = YES; - + [self.view addSubview:self.descriptionLabel]; [self.view addSubview:self.getStartedButton]; [self.view addSubview:label]; @@ -235,11 +235,11 @@ - (void)setupControls; [self.descriptionLabel constrainWidth:self.useLargeLayout ? @"500" : @"280" height:self.useLargeLayout ? @"160" : @"120"]; [self.descriptionLabel alignCenterXWithView:self.view predicate:@"0"]; self.spaceDescription = [self.descriptionLabel constrainBottomSpaceToView:self.getStartedButton predicate:self.useLargeLayout ? @"-190" : @"-25"]; - + [self.getStartedButton alignBottomEdgeWithView:label predicate:self.useLargeLayout ? @"-170" : @"-80"]; [self.getStartedButton alignCenterXWithView:self.view predicate:@"0"]; [self.getStartedButton constrainWidth:self.useLargeLayout ? @"340" : @"300" height:@"50"]; - + [label constrainWidth:@"280" height:@"40"]; [label alignCenterXWithView:self.view predicate:@"0"]; @@ -288,7 +288,7 @@ - (UIImage *)backgroundImage - (void)startOnboarding:(id)sender { - [ARAnalytics event:ARAnalyticsOnboardingGetStarted]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingGetStarted traits:@{}]; [self.delegate splashDone:self]; } diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m index fda9627d05b..2a091908d26 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m @@ -24,6 +24,7 @@ #import #import #import +#import // maxim's sneaky last comment in Eigen (for a dummy commit). This can be removed when you find it ;). @@ -101,19 +102,19 @@ - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.state == AROnboardingStagePersonalizeEmail) { - [ARAnalytics pageView:@"Onboarding enter your email"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your email" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizeLogin) { - [ARAnalytics pageView:@"Onboarding enter your password"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your password" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizePassword) { - [ARAnalytics pageView:@"Onboarding create a password"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding create a password" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizeName) { - [ARAnalytics pageView:@"Onboarding enter your full name"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your full name" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizeArtists) { - [ARAnalytics pageView:@"Onboarding follow artists"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow artists" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizeCategories) { - [ARAnalytics pageView:@"Onboarding follow categories"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow categories" traits:@{}]; } else if (self.state == AROnboardingStagePersonalizeBudget) { - [ARAnalytics pageView:@"Onboarding select budget"]; + [[AREmission sharedInstance] sendScreenEvent:@"Onboarding select budget" traits:@{}]; } } @@ -642,7 +643,7 @@ - (void)showErrorWithMessage:(NSString *)errorMessage - (void)forgotPassword:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [ARAnalytics event:ARAnalyticsOnboardingForgotPassword]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPassword traits:@{}]; } UIAlertController *forgotPasswordAlert = [UIAlertController alertControllerWithTitle:@"Forgot Password" message:@"Please enter your email address and we’ll send you a reset link." @@ -759,7 +760,7 @@ - (void)searchStarted }; } - [ARAnalytics event:ARAnalyticsOnboardingTappedSearch withProperties:context]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingTappedSearch traits:context]; } [self.headerView searchStarted]; } @@ -830,7 +831,7 @@ - (void)artistFollowed:(Artist *)artist sourceScreen = @"onboarding recommended"; } - [ARAnalytics event:ARAnalyticsArtistFollow withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsArtistFollow traits:@{ @"artist_slug" : artist.artistID ?: @"", @"artist_id" : artist.artistID ?: @"", @"source_screen" : sourceScreen @@ -879,7 +880,7 @@ - (void)categoryFollowed:(Gene *)category } else if (self.searchResultsTable.contentDisplayMode == ARTableViewContentDisplayModeRelatedResults) { sourceScreen = @"onboarding recommended"; } - [ARAnalytics event:ARAnalyticsGeneFollow withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsGeneFollow traits:@{ @"gene_id" : category.geneID ?: @"", @"source_screen" : sourceScreen }]; @@ -989,7 +990,7 @@ - (void)nextTapped:(id)sender - (void)backTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [ARAnalytics event:ARAnalyticsOnboardingAlreadyAccountBack]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingAlreadyAccountBack traits:@{}]; } self.comingBack = YES; [self.delegate backTapped]; @@ -998,7 +999,7 @@ - (void)backTapped:(id)sender - (void)facebookSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [ARAnalytics event:ARAnalyticsOnboardingConnectWithFacebook]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithFacebook traits:@{}]; } self.comingBack = YES; [self.delegate personalizeFacebookSignInTapped]; @@ -1007,7 +1008,7 @@ - (void)facebookSignInTapped:(id)sender - (void)appleSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [ARAnalytics event:ARAnalyticsOnboardingConnectWithApple]; + [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithApple traits:@{}]; } self.comingBack = YES; [self.delegate personalizeAppleSignInTapped]; diff --git a/Artsy/View_Controllers/Util/ARFeedImageLoader.m b/Artsy/View_Controllers/Util/ARFeedImageLoader.m index 8af4c5ea199..30804969304 100644 --- a/Artsy/View_Controllers/Util/ARFeedImageLoader.m +++ b/Artsy/View_Controllers/Util/ARFeedImageLoader.m @@ -4,7 +4,7 @@ #import "UIImage+ImageFromColor.h" #import "UIImageView+AsyncImageLoading.h" - +#import // From the gravity source //version :small, if: :is_processing_delayed? do diff --git a/Artsy/View_Controllers/Util/ARNavigationController.m b/Artsy/View_Controllers/Util/ARNavigationController.m index 8a49270d079..ad42f88f71a 100644 --- a/Artsy/View_Controllers/Util/ARNavigationController.m +++ b/Artsy/View_Controllers/Util/ARNavigationController.m @@ -27,7 +27,6 @@ #import #import #import -#import static void *ARNavigationControllerButtonStateContext = &ARNavigationControllerButtonStateContext; static void *ARNavigationControllerScrollingChiefContext = &ARNavigationControllerScrollingChiefContext; diff --git a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m index c38eee69b36..3ad49a27dc3 100644 --- a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m +++ b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m @@ -2,9 +2,9 @@ #import "ARCustomEigenLabels.h" #import "ARScreenPresenterModule.h" -#import #import #import +#import @interface ARNetworkErrorManager () @property (nonatomic, strong) UILabel *activeModalView; @@ -30,7 +30,7 @@ + (void)presentActiveError:(NSError *)error; + (void)presentActiveError:(NSError *)error withMessage:(NSString *)message; { - [ARAnalytics error:error withMessage:message]; + [SentrySDK captureError:error]; ARNetworkErrorManager *manager = [self sharedManager]; if (manager.activeModalView == nil) { diff --git a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m index b039fa3eec3..eafa1ce1a54 100644 --- a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m +++ b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m @@ -1,6 +1,6 @@ #import "ARSharingController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artist.h" @@ -80,7 +80,7 @@ - (void)presentActivityViewControllerFromView:(UIView *)view frame:(CGRect)frame - (void)handleActivityCompletion:(NSString *)activityType completed:(BOOL)completed { if (completed) { - [ARAnalytics event:ARAnalyticsShare withProperties:@{ + [[AREmission sharedInstance] sendEvent:ARAnalyticsShare traits:@{ @"object_type" : NSStringFromClass(self.object.class) ?: @"", @"service" : activityType ?: @"" }]; diff --git a/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m b/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m deleted file mode 100644 index 590bdbca953..00000000000 --- a/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m +++ /dev/null @@ -1,40 +0,0 @@ -#import "ARAppDelegate.h" -#import "ARAppDelegate+Analytics.h" -#import "ARStubbedAnalyticsProvider.h" -#import -#import "ARAnalyticsConstants.h" - -/// Depending on how this spec turns out, it may be worth migrating it into it's own target -/// as, in theory, this spec can leak into all the others due to the triggering of analytics. - -/// Imports for the VC/Views - -// #import "ARArtistViewController.h" - -/// ZZ to make it go last, thanks to XCTest implmentation details -SpecBegin(ZZAppAnalytics); - -// This should only get run once, as it does all the swizzling -// calling that multiple times looks to me like it could -// end up with unexpected behavior - -beforeAll(^{ - ARAppDelegate *delegate = [[ARAppDelegate alloc] init]; - [delegate setupAnalytics]; -}); - -__block ARStubbedAnalyticsProvider *analytics; - -/// Kill off all existing providers, then replace with our easily introspected provider: - -beforeEach(^{ - analytics = [[ARStubbedAnalyticsProvider alloc] initWithIdentifier:@""]; - [[ARAnalytics currentProviders].copy each:^(id provider) { - [ARAnalytics removeProvider:provider]; - }]; - - [ARAnalytics setupProvider:analytics]; -}); - - -SpecEnd diff --git a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m index a4e5b1b30cc..bf8e4822b92 100644 --- a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m @@ -1,7 +1,6 @@ #import "ARAppActivityContinuationDelegate.h" #import "ARUserManager.h" #import "ARAppDelegate+Analytics.h" -#import "ArtsyAPI+Sailthru.h" #import #import @@ -88,21 +87,6 @@ continueUserActivity:activity restorationHandler:^(NSArray *_) {}]).to.beTruthy(); }); - - it(@"requests a decoded URL from Sailthru and then routes the WebBrowsing link to the appropriate view controller and shows it", ^{ - NSURL *sailthruURL = [NSURL URLWithString:@"https://link.artsy.net/click/some-opaque-ID"]; - - NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; - activity.webpageURL = sailthruURL; - - [[apiMock expect] getDecodedURLAndRegisterClick:sailthruURL - completion:[OCMArg checkWithBlock:^(void (^callback)(NSURL *URL)) { - callback(URL); - return YES; - }]]; - [delegate application:app continueUserActivity:activity restorationHandler:^(NSArray *_) {}]; - [apiMock verify]; - }); }); SpecEnd; diff --git a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m index c0611ffb424..9c7a3c2d15e 100644 --- a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m @@ -1,10 +1,10 @@ #import "ARAppNotificationsDelegate.h" -#import #import "ARAnalyticsConstants.h" #import "ARNotificationView.h" #import "ARSerifNavigationViewController.h" #import "UIApplicationStateEnum.h" #import +#import static NSDictionary * DictionaryWithAppState(NSDictionary *input, UIApplicationState appState) @@ -29,27 +29,33 @@ - (UIViewController *)getGlobalTopViewController; __block UIApplication *app = nil; __block ARAppNotificationsDelegate *delegate = nil; __block UIApplicationState appState = -1; - __block id mockAnalytics = nil; + __block id mockEmissionSharedInstance = nil; + __block id mockSegmentSharedInstance = nil; beforeEach(^{ app = [UIApplication sharedApplication]; delegate = [[ARAppNotificationsDelegate alloc] init]; - mockAnalytics = [OCMockObject mockForClass:[ARAnalytics class]]; + mockEmissionSharedInstance = [OCMockObject partialMockForObject:AREmission.sharedInstance];; + + // Setup a segment shared instance otherwise the tests will crash + SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"GARBAGE"]; + [SEGAnalytics setupWithConfiguration:configuration]; }); afterEach(^{ - [mockAnalytics stopMocking]; + [mockEmissionSharedInstance stopMocking]; + [mockSegmentSharedInstance stopMocking]; }); sharedExamplesFor(@"when receiving a notification", ^(id _) { it(@"triggers an analytics event for receiving a notification", ^{ - [[mockAnalytics expect] event:ARAnalyticsNotificationReceived withProperties:DictionaryWithAppState(notification, appState)]; - [[mockAnalytics reject] event:ARAnalyticsNotificationTapped withProperties:OCMOCK_ANY]; + [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationReceived traits:DictionaryWithAppState(notification, appState)]; + [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationTapped traits:OCMOCK_ANY]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockAnalytics verify]; + [mockEmissionSharedInstance verify]; }); }); @@ -68,21 +74,19 @@ - (UIViewController *)getGlobalTopViewController; describe(@"with stubbed top menu VC", ^{ it(@"navigates to the url provided", ^{ - id mock = [OCMockObject partialMockForObject:AREmission.sharedInstance]; - [[mock expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; + [[mockEmissionSharedInstance expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mock verify]; - [mock stopMocking]; + [mockEmissionSharedInstance verify]; }); it(@"triggers an analytics event when a notification has been tapped", ^{ - [[mockAnalytics reject] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; - [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; + [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; + [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockAnalytics verify]; + [mockEmissionSharedInstance verify]; }); it(@"does not display the message in aps/alert", ^{ @@ -122,12 +126,12 @@ - (UIViewController *)getGlobalTopViewController; return YES; }]]; - [[mockAnalytics stub] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; - [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; + [[mockEmissionSharedInstance stub] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; + [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockAnalytics verify]; + [mockEmissionSharedInstance verify]; [mockNotificationView stopMocking]; }); diff --git a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift index 2bde6852c9b..64c35891322 100644 --- a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift +++ b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift @@ -4,5 +4,5 @@ func cacheColoredImageForURL(_ url: URL?, color: UIColor = UIColor.debugColourPu precondition(url != nil) let image = UIImage(from: color, with: CGSize(width: 500, height: 500)) - SDWebImageManager.shared().saveImage(toCache: image, for: url!) + SDWebImageManager.shared.imageCache.store(image, imageData:nil, forKey: url!.absoluteString, cacheType: .memory, completion: nil) } diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h deleted file mode 100644 index ff48f6b4e63..00000000000 --- a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h +++ /dev/null @@ -1,28 +0,0 @@ -#import -#import - - -@interface ARStubbedAnalyticsProvider : ARAnalyticalProvider - -@property (readonly, nonatomic, copy) NSString *lastProviderIdentifier; - -@property (readonly, nonatomic, copy) NSString *lastEventName; -@property (readonly, nonatomic, copy) NSDictionary *lastEventProperties; - -@property (readonly, nonatomic, copy) NSMutableArray *eventNames; - -@property (readonly, nonatomic, copy) NSString *lastUserPropertyValue; -@property (readonly, nonatomic, copy) NSString *lastUserPropertyKey; -@property (readonly, nonatomic, assign) NSInteger lastUserPropertyCount; - -@property (readonly, nonatomic, copy) NSString *email; -@property (readonly, nonatomic, copy) NSString *identifier; - -@property (readonly, nonatomic, strong) NSError *lastError; -@property (readonly, nonatomic, copy) NSString *lastErrorMessage; - -@property (readonly, nonatomic, strong) UINavigationController *lastMonitoredNavigationController; - -@property (readonly, nonatomic, copy) NSString *lastRemoteLog; - -@end diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m deleted file mode 100644 index 6ca65fdab5a..00000000000 --- a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m +++ /dev/null @@ -1,73 +0,0 @@ -#import "ARStubbedAnalyticsProvider.h" - - -@implementation ARStubbedAnalyticsProvider - -- (id)initWithIdentifier:(NSString *)identifier -{ - self = [super initWithIdentifier:identifier]; - if (!self) return nil; - - _lastProviderIdentifier = identifier; - _eventNames = [NSMutableArray array]; - - return self; -} - -- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email -{ - _identifier = userID; - _email = email; -} - -- (void)setUserProperty:(NSString *)property toValue:(NSString *)value -{ - _lastUserPropertyKey = property; - _lastUserPropertyValue = value; -} - -- (void)event:(NSString *)event withProperties:(NSDictionary *)properties; -{ - _lastEventName = event; - _lastEventProperties = properties; - [_eventNames addObject:event]; -} - -- (void)incrementUserProperty:(NSString *)counterName byInt:(NSNumber *)amount -{ - _lastUserPropertyKey = counterName; - _lastUserPropertyCount += amount.integerValue; -} - -- (void)error:(NSError *)error withMessage:(NSString *)message -{ - _lastError = error; - _lastErrorMessage = message; -} - -- (void)monitorNavigationViewController:(UINavigationController *)controller -{ - _lastMonitoredNavigationController = controller; - [super monitorNavigationViewController:controller]; -} - - -- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval -{ - _lastEventName = event; -} - -- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval properties:(NSDictionary *)properties -{ - [super logTimingEvent:event withInterval:interval properties:properties]; - - _lastEventName = event; - _lastEventProperties = properties; -} - -- (void)remoteLog:(NSString *)parsedString -{ - _lastRemoteLog = parsedString; -} - -@end diff --git a/Artsy_Tests/Supporting_Files/ARTestHelper.m b/Artsy_Tests/Supporting_Files/ARTestHelper.m index 5ac3a0b7a2a..a1a796a6b46 100644 --- a/Artsy_Tests/Supporting_Files/ARTestHelper.m +++ b/Artsy_Tests/Supporting_Files/ARTestHelper.m @@ -5,6 +5,7 @@ #import "ARUserManager.h" #import +#import #import "ARFonts.h" #import diff --git a/CHANGELOG.yml b/CHANGELOG.legacy.yml similarity index 96% rename from CHANGELOG.yml rename to CHANGELOG.legacy.yml index 07e0d0d52b9..7a8abafecb2 100644 --- a/CHANGELOG.yml +++ b/CHANGELOG.legacy.yml @@ -1,7 +1,10 @@ +# We are no longer using this changelog, see this RFC: https://github.com/artsy/eigen/issues/4499 + upcoming: - version: 6.10.0 + version: 6.10.1 date: TBD dev: + - Add new adress form - Add apple authentication - dzmitry - Add google authentication - dzmitry - Add new onboarding feature flag on ios - dzmitry @@ -20,37 +23,62 @@ upcoming: - Add tracking to "Unable To Load" screen - mounir - Adjust auction results for you tracking - ole - Make Home Auction Results By Followed Artists ready for release - mounir + - Replace ios native analytics with segment analytics - kizito + - user_facing: - - Prevent facebook auth for users without email - dzmitry - - Fix unfollowing categories - katsiaryna alshannikava - - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak - - Fix locations menu redirection - katsiaryna alshannikava - - Implement share button for articles - katsiaryna alshannikava, mounir - - Allow screen rotations on android tablets - kizito - - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava - - Connect auction results for you to metaphysics endpoint - yauheni - - Fix opening artist page after passing new onboarding on ios - dzmitry - - Polish Auction Results for you screen and home rail (behind feature flag) - ole - - Fix crash when opening app from background on android - brian - - Change error handling middleware & include optionalField graphql directive to home screen - ole - - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava - - Prevent users from submitting consignments for non target supply artists - ole - - Fix empty search for consignment submissions - dzmitry - - Release order history view - sweir - - Add Saved Addresses screen (behind feature flag) - ozzie - - Fix visual bug on auction result list item on artist insights screen - ole - - Fix auction result home rail loading spinner issue - ole - - Fix share button on BNMO Flow - ole, mounir, sam, george - - Annotate home screen queries with optionalField directive - ole - - Fix collection home rail loading spinner issue - ole - - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak - - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole - - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava - - Fix auction results for you description text scroll issue - ole - - Fix facebook login failing after signing up for a new account - stanislau hanchar - Add keyword search to artist auction reults - ole releases: + - version: 6.10.0 + - date: July 12, 2021 + - dev: + - Add apple authentication - dzmitry + - Add google authentication - dzmitry + - Add new onboarding feature flag on ios - dzmitry + - Add optionalField for Order History and Order Details - Serge0n + - Add specs for deleteSavedSearch and createSavedSearch mutations - dzmitry tratsiak + - Add toggledSavedSearch analytics tracking - devon blandin + - Allow custom attributes from a push notification payload to be passed through to React Native scenes - devon blandin + - Add diagnose script - mounir + - Pass size filter parameters to a saved search criteria - dzmitry tratsiak + - Update open simulator command in getting started docs - ole + - Fix follow artist button on ios - dzmitry + - Add analytics for AuctionResultsForYou and AuctionResultsRail components - yauheni + - Add a feature flag for Saved Addresses - ozzie + - Initial Push Notification Setup on android - kizito + - Replace deleteSavedSearch mutation on disableSavedSearch - dzmitry tratsiak + - Add tracking to "Unable To Load" screen - mounir + - Adjust auction results for you tracking - ole + - Make Home Auction Results By Followed Artists ready for release - mounir + - user_facing: + - Prevent facebook auth for users without email - dzmitry + - Fix unfollowing categories - katsiaryna alshannikava + - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak + - Fix locations menu redirection - katsiaryna alshannikava + - Implement share button for articles - katsiaryna alshannikava, mounir + - Allow screen rotations on android tablets - kizito + - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava + - Connect auction results for you to metaphysics endpoint - yauheni + - Fix opening artist page after passing new onboarding on ios - dzmitry + - Polish Auction Results for you screen and home rail (behind feature flag) - ole + - Fix crash when opening app from background on android - brian + - Change error handling middleware & include optionalField graphql directive to home screen - ole + - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava + - Prevent users from submitting consignments for non target supply artists - ole + - Fix empty search for consignment submissions - dzmitry + - Release order history view - sweir + - Add Saved Addresses screen (behind feature flag) - ozzie + - Fix visual bug on auction result list item on artist insights screen - ole + - Fix auction result home rail loading spinner issue - ole + - Fix share button on BNMO Flow - ole, mounir, sam, george + - Annotate home screen queries with optionalField directive - ole + - Fix collection home rail loading spinner issue - ole + - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak + - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole + - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava + - Fix auction results for you description text scroll issue - ole + - Fix facebook login failing after signing up for a new account - stanislau hanchar + - version: 6.9.5 - date: June 24, 2021 - dev: diff --git a/Gemfile.lock b/Gemfile.lock index a1f8818bab0..4687db560d7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,7 +7,7 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - addressable (2.7.0) + addressable (2.8.0) public_suffix (>= 2.0.2, < 5.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) @@ -15,20 +15,20 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.1.1) - aws-partitions (1.451.0) - aws-sdk-core (3.114.0) + aws-partitions (1.479.0) + aws-sdk-core (3.117.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.43.0) + aws-sdk-kms (1.44.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.94.1) + aws-sdk-s3 (1.96.2) aws-sdk-core (~> 3, >= 3.112.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.3) + aws-sigv4 (1.2.4) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) celluloid (0.18.0) @@ -113,27 +113,35 @@ GEM escape (0.0.4) ethon (0.14.0) ffi (>= 1.15.0) - excon (0.81.0) - faraday (1.4.1) + excon (0.85.0) + faraday (1.5.1) + faraday-em_http (~> 1.0) + faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) + faraday-httpclient (~> 1.0.1) faraday-net_http (~> 1.0) faraday-net_http_persistent (~> 1.1) + faraday-patron (~> 1.0) multipart-post (>= 1.2, < 3) ruby2_keywords (>= 0.0.4) faraday-cookie_jar (0.0.7) faraday (>= 0.8.0) http-cookie (~> 1.0.0) + faraday-em_http (1.0.0) + faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-http-cache (2.2.0) faraday (>= 0.8) + faraday-httpclient (1.0.1) faraday-net_http (1.0.1) - faraday-net_http_persistent (1.1.0) + faraday-net_http_persistent (1.2.0) + faraday-patron (1.0.0) faraday_middleware (1.0.0) faraday (~> 1.0) - fastimage (2.2.3) - fastlane (2.182.0) + fastimage (2.2.4) + fastlane (2.188.0) CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.3, < 3.0.0) + addressable (>= 2.8, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) @@ -148,8 +156,9 @@ GEM faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-api-client (>= 0.37.0, < 0.39.0) - google-cloud-storage (>= 1.15.0, < 2.0.0) + google-apis-androidpublisher_v3 (~> 0.1) + google-apis-playcustomapp_v1 (~> 0.1) + google-cloud-storage (~> 1.31) highline (~> 2.0) json (< 3.0.0) jwt (>= 2.1.0, < 3) @@ -168,48 +177,43 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - fastlane-plugin-sentry (1.8.1) + fastlane-plugin-sentry (1.8.3) ffi (1.15.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) git (1.8.1) rchardet (~> 1.8) - google-api-client (0.38.0) + google-apis-androidpublisher_v3 (0.8.0) + google-apis-core (>= 0.4, < 2.a) + google-apis-core (0.4.1) addressable (~> 2.5, >= 2.5.1) - googleauth (~> 0.9) - httpclient (>= 2.8.1, < 3.0) + googleauth (>= 0.16.2, < 2.a) + httpclient (>= 2.8.1, < 3.a) mini_mime (~> 1.0) representable (~> 3.0) - retriable (>= 2.0, < 4.0) - signet (~> 0.12) - google-apis-core (0.3.0) - addressable (~> 2.5, >= 2.5.1) - googleauth (~> 0.14) - httpclient (>= 2.8.1, < 3.0) - mini_mime (~> 1.0) - representable (~> 3.0) - retriable (>= 2.0, < 4.0) + retriable (>= 2.0, < 4.a) rexml - signet (~> 0.14) webrick - google-apis-iamcredentials_v1 (0.3.0) - google-apis-core (~> 0.1) - google-apis-storage_v1 (0.3.0) - google-apis-core (~> 0.1) + google-apis-iamcredentials_v1 (0.6.0) + google-apis-core (>= 0.4, < 2.a) + google-apis-playcustomapp_v1 (0.5.0) + google-apis-core (>= 0.4, < 2.a) + google-apis-storage_v1 (0.6.0) + google-apis-core (>= 0.4, < 2.a) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) google-cloud-env (1.5.0) faraday (>= 0.17.3, < 2.0) google-cloud-errors (1.1.0) - google-cloud-storage (1.31.0) + google-cloud-storage (1.34.1) addressable (~> 2.5) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) google-apis-storage_v1 (~> 0.1) - google-cloud-core (~> 1.2) - googleauth (~> 0.9) + google-cloud-core (~> 1.6) + googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) googleauth (0.16.2) faraday (>= 0.17.3, < 2.0) @@ -220,14 +224,14 @@ GEM signet (~> 0.14) highline (2.0.3) http-2 (0.11.0) - http-cookie (1.0.3) + http-cookie (1.0.4) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.8.10) concurrent-ruby (~> 1.0) jmespath (1.4.0) json (2.5.1) - jwt (2.2.2) + jwt (2.2.3) kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) @@ -256,7 +260,7 @@ GEM plist (3.6.0) psych (3.3.0) public_suffix (4.0.6) - rake (13.0.3) + rake (13.0.6) rchardet (1.8.0) representable (3.1.1) declarative (< 0.1.0) @@ -266,8 +270,8 @@ GEM rexml (3.2.5) rouge (2.0.7) ruby-macho (1.4.0) - ruby2_keywords (0.0.4) - rubyzip (2.3.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) @@ -304,12 +308,13 @@ GEM xcode-install (2.6.8) claide (>= 0.9.1, < 1.1.0) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.19.0) + xcodeproj (1.20.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) + rexml (~> 3.2.4) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) diff --git a/HACKS.md b/HACKS.md index b30d9f2f8d4..47f7fc82ef9 100644 --- a/HACKS.md +++ b/HACKS.md @@ -198,27 +198,27 @@ As you can see in the PR and issue, android doesn't use ellipsis on the placehol We added a workaround on Input, to accept an array of placeholders, from longest to shortest, so that android can measure which one fits in the TextInput as placeholder, and it uses that. When android can handle a long placeholder and use ellipsis or if we don't use long placeholders anymore, this can go. -# `@segment/analytics-react-native` and `@segment/analytics-react-native-appboy` patch +# `react-native-screens` fragment crash on open from background on Android #### When can we remove this: -Once we work on [CX-1421](https://artsyproduct.atlassian.net/browse/CX-1421?atlOrigin=eyJpIjoiYjJiMWY4MThlOTY2NDc3ZGJiMTljZTJjM2FmMmVkZjQiLCJwIjoiaiJ9) to replace the native ios analytics with the TS analytics we use for android already. +Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. #### Explanation/Context: -Basically these patches remove the podspecs of these two deps. They confuse and break ios, and we don't use them there yet anyway. +There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be +added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. -Once we start working on replacing the native analytics with TS ones, then we remove these two patches too. +This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. -# `react-native-screens` fragment crash on open from background on Android +# `react-native-push-notification` Requiring unknown module on ios #### When can we remove this: -Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. +Once we want to use react-native-push-notification on iOS #### Explanation/Context: -There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be -added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. - -This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. +This is happening because react-native-push-notification requires @react-native-community/push-notification-ios. We are not +adding this dependency at this time because it is unnecessary and we do not use react-native-push-notification on iOS. Also, +we do not want unnecessary conflicts between our native push notification implementation and @react-native-community/push-notification-ios's. diff --git a/Podfile b/Podfile index 6d7db46e6d2..8baa7629712 100644 --- a/Podfile +++ b/Podfile @@ -53,11 +53,8 @@ end def remove_mapbox_creds if $user_already_had_netrc_file contents = File.read($netrc_path) - matches = contents.to_enum(:scan, /machine api\.mapbox\.com.*\n.*\n.*\n/).map { Regexp.last_match } - return if matches == nil or matches.length == 0 - last_match = matches.last + cleaned = contents.gsub(/machine api\.mapbox\.com\nlogin mapbox\npassword #{ENV['MAPBOX_DOWNLOAD_TOKEN']}\n/, "") File.open($netrc_path, 'w') { |f| - cleaned = last_match.pre_match + last_match.post_match f.write(cleaned) } else @@ -82,7 +79,7 @@ target 'Artsy' do pod 'AFNetworking', '~> 2.5', subspecs: %w[Reachability Serialization Security NSURLSession NSURLConnection] pod 'AFOAuth1Client', git: 'https://github.com/artsy/AFOAuth1Client.git', tag: '0.4.0-subspec-fix' pod 'AFNetworkActivityLogger' - pod 'SDWebImage', '>= 3.7.2' # 3.7.2 contains a fix that allows you to not force decoding each image, which uses lots of memory + pod 'SDWebImage', '5.8.3' # Core pod 'ARGenericTableViewController', git: 'https://github.com/artsy/ARGenericTableViewController.git' @@ -130,9 +127,7 @@ target 'Artsy' do pod 'Firebase/Auth' # Analytics - pod 'Analytics' - pod 'ARAnalytics', subspecs: %w[Segmentio] - pod 'Appboy-iOS-SDK' + pod 'Segment-Appboy' # Developer Pods pod 'DHCShakeNotifier' @@ -228,7 +223,6 @@ post_install do |installer| # * Send PRs for the rest %w[ Pods/ORStackView/Classes/ios/ORStackView.h - Pods/ARAnalytics/ARAnalytics.h Pods/NAMapKit/NAMapKit/*.h ].flat_map { |x| Dir.glob(x) }.each do |header| addition = "#import \n" diff --git a/Podfile.lock b/Podfile.lock index 07479a64d19..497a5e6d924 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,18 +19,29 @@ PODS: - AFNetworking/NSURLConnection (~> 2.5) - AFNetworking/NSURLSession (~> 2.5) - AFNetworking/Serialization (~> 2.5) - - Analytics (3.6.9) + - Analytics (4.1.5) - AppAuth (1.4.0): - AppAuth/Core (= 1.4.0) - AppAuth/ExternalUserAgent (= 1.4.0) - AppAuth/Core (1.4.0) - AppAuth/ExternalUserAgent (1.4.0) - - Appboy-iOS-SDK (2.25.0): - - SDWebImage (~> 3.7) - - ARAnalytics/CoreIOS (5.0.1) - - ARAnalytics/Segmentio (5.0.1): - - Analytics (>= 3) - - ARAnalytics/CoreIOS + - Appboy-iOS-SDK (4.3.1): + - Appboy-iOS-SDK/UI (= 4.3.1) + - Appboy-iOS-SDK/ContentCards (4.3.1): + - Appboy-iOS-SDK/Core + - SDWebImage (< 6, >= 5.8.2) + - Appboy-iOS-SDK/Core (4.3.1) + - Appboy-iOS-SDK/InAppMessage (4.3.1): + - Appboy-iOS-SDK/Core + - SDWebImage (< 6, >= 5.8.2) + - Appboy-iOS-SDK/NewsFeed (4.3.1): + - Appboy-iOS-SDK/Core + - SDWebImage (< 6, >= 5.8.2) + - Appboy-iOS-SDK/UI (4.3.1): + - Appboy-iOS-SDK/ContentCards + - Appboy-iOS-SDK/Core + - Appboy-iOS-SDK/InAppMessage + - Appboy-iOS-SDK/NewsFeed - ARGenericTableViewController (1.0.2) - "Artsy+UIColors (3.1.0)" - "Artsy+UIFonts (3.3.3)" @@ -80,7 +91,7 @@ PODS: - React-RCTText (= 0.63.3) - RNSentry (= 2.2.1) - RNSVG (= 9.13.3) - - SDWebImage (< 4, >= 3.7.2) + - SDWebImage (= 5.8.3) - tipsi-stripe (= 7.5.0) - Expecta (1.0.6) - "Expecta+Snapshots (3.1.1)": @@ -462,6 +473,9 @@ PODS: - React-cxxreact (= 0.63.3) - React-jsi (= 0.63.3) - React-jsinspector (0.63.3) + - react-native-appboy-sdk (1.30.0): + - Appboy-iOS-SDK (~> 4.3.0) + - React - react-native-cameraroll (1.3.0): - React - react-native-config (1.3.3): @@ -574,6 +588,14 @@ PODS: - React-jsi (= 0.63.3) - rn-fetch-blob (0.12.0): - React-Core + - RNAnalytics (1.5.0): + - Analytics + - React-Core + - RNAnalyticsIntegration-Appboy (1.5.0): + - Analytics + - React-Core + - RNAnalytics + - Segment-Appboy - RNAppleAuthentication (2.1.2): - React-Core - RNBootSplash (3.2.0): @@ -616,9 +638,15 @@ PODS: - React-Core - RNSVG (9.13.3): - React - - SDWebImage (3.7.3): - - SDWebImage/Core (= 3.7.3) - - SDWebImage/Core (3.7.3) + - SDWebImage (5.8.3): + - SDWebImage/Core (= 5.8.3) + - SDWebImage/Core (5.8.3) + - Segment-Appboy (4.2.0): + - Analytics + - Segment-Appboy/Full-SDK (= 4.2.0) + - Segment-Appboy/Full-SDK (4.2.0): + - Analytics + - Appboy-iOS-SDK (~> 4.3.0) - Sentry (6.1.4): - Sentry/Core (= 6.1.4) - Sentry/Core (6.1.4) @@ -648,9 +676,6 @@ DEPENDENCIES: - AFNetworking/Security (~> 2.5) - AFNetworking/Serialization (~> 2.5) - AFOAuth1Client (from `https://github.com/artsy/AFOAuth1Client.git`, tag `0.4.0-subspec-fix`) - - Analytics - - Appboy-iOS-SDK - - ARAnalytics/Segmentio - ARGenericTableViewController (from `https://github.com/artsy/ARGenericTableViewController.git`) - "Artsy+UIColors" - "Artsy+UIFonts" @@ -727,6 +752,7 @@ DEPENDENCIES: - React-jsi (from `./node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `./node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `./node_modules/react-native/ReactCommon/jsinspector`) + - react-native-appboy-sdk (from `node_modules/react-native-appboy-sdk`) - "react-native-cameraroll (from `node_modules/@react-native-community/cameraroll`)" - react-native-config (from `node_modules/react-native-config`) - "react-native-cookies (from `node_modules/@react-native-cookies/cookies`)" @@ -750,6 +776,8 @@ DEPENDENCIES: - React-RCTVibration (from `./node_modules/react-native/Libraries/Vibration`) - ReactCommon/turbomodule/core (from `./node_modules/react-native/ReactCommon`) - rn-fetch-blob (from `node_modules/rn-fetch-blob`) + - "RNAnalytics (from `node_modules/@segment/analytics-react-native`)" + - "RNAnalyticsIntegration-Appboy (from `node_modules/@segment/analytics-react-native-appboy`)" - "RNAppleAuthentication (from `node_modules/@invertase/react-native-apple-authentication`)" - RNBootSplash (from `node_modules/react-native-bootsplash`) - "RNCAsyncStorage (from `node_modules/@react-native-community/async-storage`)" @@ -766,7 +794,8 @@ DEPENDENCIES: - "RNSentry (from `node_modules/@sentry/react-native`)" - RNShare (from `node_modules/react-native-share`) - RNSVG (from `node_modules/react-native-svg`) - - SDWebImage (>= 3.7.2) + - SDWebImage (= 5.8.3) + - Segment-Appboy - Specta - Starscream - SwiftyJSON @@ -784,7 +813,6 @@ SPEC REPOS: - Analytics - AppAuth - Appboy-iOS-SDK - - ARAnalytics - boost-for-react-native - CocoaAsyncSocket - CocoaLumberjack @@ -837,6 +865,7 @@ SPEC REPOS: - PromisesObjC - Quick - SDWebImage + - Segment-Appboy - Sentry - Specta - Starscream @@ -909,6 +938,8 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "./node_modules/react-native/ReactCommon/jsinspector" + react-native-appboy-sdk: + :path: node_modules/react-native-appboy-sdk react-native-cameraroll: :path: "node_modules/@react-native-community/cameraroll" react-native-config: @@ -955,6 +986,10 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon" rn-fetch-blob: :path: node_modules/rn-fetch-blob + RNAnalytics: + :path: "node_modules/@segment/analytics-react-native" + RNAnalyticsIntegration-Appboy: + :path: "node_modules/@segment/analytics-react-native-appboy" RNAppleAuthentication: :path: "node_modules/@invertase/react-native-apple-authentication" RNBootSplash: @@ -1020,10 +1055,9 @@ SPEC CHECKSUMS: AFNetworkActivityLogger: 121486778117d53b3ab1c61d264b88081d0c3eee AFNetworking: 8dd5f9b9691e09186393069a12cc3b5ed7c8b511 AFOAuth1Client: 155a6237e57987cac18dac2ccd17cea5d324ad1a - Analytics: 6541ce337e99d9f7a2240a8b3953940a7be5f998 + Analytics: 084a3edda6517e308007c1a7810b8f1e8f2925aa AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 - Appboy-iOS-SDK: 720819acf77bcb7bdad658d26c064278a39639d9 - ARAnalytics: 896e530551168721fbb8852e044b8afb9baffdde + Appboy-iOS-SDK: 33b31d5ade91a7d0718534798f4ab1146e7b0681 ARGenericTableViewController: 61a0897ba66c35111b5d1cc3b44884282bd3c1a5 "Artsy+UIColors": 31c03c4146f5e6618a9b950f37dfe02dd9ac09a6 "Artsy+UIFonts": 597c44f264aead6bdc21898b690addd90e14edbd @@ -1036,7 +1070,7 @@ SPEC CHECKSUMS: DHCShakeNotifier: 64048427ecaa763f2472d0032f58bf7a10074eee DoubleConversion: cde416483dac037923206447da6e1454df403714 EDColor: c83f9a61f9f9b3c23d541f1feb561558e29cb088 - Emission: 9ede96bbbc777ebfc06e0e633599c4d09f72978d + Emission: d1ca04d191776a641ee1224cd26da9eeec5d52ff Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5 "Expecta+Snapshots": dcff217eef506dabd6dfdc7864ea2da321fafbb8 Extraction: 2be993a17f8f8c4fac988ebecaed93a409181faf @@ -1103,6 +1137,7 @@ SPEC CHECKSUMS: React-jsi: df07aa95b39c5be3e41199921509bfa929ed2b9d React-jsiexecutor: b56c03e61c0dd5f5801255f2160a815f4a53d451 React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2 + react-native-appboy-sdk: dd0f7fb390666c6cfea7e177dcf22c3391e9cc39 react-native-cameraroll: 463aff54e37cff27ea76eb792e6f1fa43b876320 react-native-config: 47fd4132d931f84aca9c31f302c3c867a8560b11 react-native-cookies: 3b5b182d008b714fefc337df15b787f00385a598 @@ -1126,6 +1161,8 @@ SPEC CHECKSUMS: React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba + RNAnalytics: a6dc48511d5d99b1ecaaf7157d8b5c618d15337e + RNAnalyticsIntegration-Appboy: 6940f54ff28e6be80f1e3b78c996b1f0945b4113 RNAppleAuthentication: e95bcfbd044013667f35c5ca20ae17d39500c009 RNBootSplash: 24175aa28fe203b10c48dc34e78d946fd33c77af RNCAsyncStorage: 3c304d1adfaea02ec732ac218801cb13897aa8c0 @@ -1142,7 +1179,8 @@ SPEC CHECKSUMS: RNSentry: 7104cdfc1072ccb86015d9c8f210d81ae76806c1 RNShare: fed99fd743f80ca255903c1da46fc9a6430efab6 RNSVG: f6177f8d7c095fada7cfee2e4bb7388ba426064c - SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 + SDWebImage: 112503ec94a5a2a41869503844a15e8d8f1ead5c + Segment-Appboy: 5688916eb8fb104b638116ba251cee5d4d8bd266 Sentry: 9d055e2de30a77685e86b219acf02e59b82091fc Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 Starscream: f5da93fe6984c77b694366bf7299b7dc63a76f26 @@ -1157,6 +1195,6 @@ SPEC CHECKSUMS: Yoga: 7d13633d129fd179e01b8953d38d47be90db185a YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 01b096a826c973467c7cd9b46fdd107f7d1d5f71 +PODFILE CHECKSUM: 4f9596015bfbf77634835ff623b13cb3bef9ed05 COCOAPODS: 1.10.1 diff --git a/app.json b/app.json index b1f5f525879..401e4cc6fbb 100644 --- a/app.json +++ b/app.json @@ -1,4 +1,4 @@ { - "version": "6.10.0", + "version": "6.10.2", "sentryReleaseName": "" } diff --git a/dangerfile.ts b/dangerfile.ts index 49f6445ce11..0e042971d08 100644 --- a/dangerfile.ts +++ b/dangerfile.ts @@ -3,7 +3,6 @@ import { danger, fail, markdown, warn } from "danger" // so the node API gives us errors: import * as fs from "fs" import { pickBy } from "lodash" -import * as yaml from "yaml" import { ParseResult } from "./scripts/changelog/changelog-types" import { changelogTemplateSections } from "./scripts/changelog/generateChangelogSectionTemplate" import { parsePRDescription } from "./scripts/changelog/parsePRDescription" @@ -89,32 +88,6 @@ const verifyRemainingDevWork = () => { } } -// Ensure the CHANGELOG is set up like we need -const validateChangelogYMLFile = async () => { - try { - // Ensure it is valid yaml - const changelogYML = fs.readFileSync("CHANGELOG.yml").toString() - const loadedDictionary = yaml.parse(changelogYML) - - // So that we don't accidentally copy & paste oour upcoming section wrong - const upcoming = loadedDictionary?.upcoming - if (upcoming) { - if (Array.isArray(upcoming)) { - fail("Upcoming an array in the CHANGELOG") - } - - // Deployments rely on this to send info to reviewers - else if (typeof upcoming === "object") { - if (!upcoming.user_facing) { - fail("There must be a `user_facing` section in the upcoming section of the CHANGELOG") - } - } - } - } catch (e) { - fail("The CHANGELOG is not valid YML:\n" + e.stack) - } -} - // Require changelog on Eigen PRs to be valid // See Eigen RFC: https://github.com/artsy/eigen/issues/4499 export const validatePRChangelog = () => { @@ -162,6 +135,5 @@ export const validatePRChangelog = () => { preventUsingEnzyme() preventUsingRenderRelayTree() verifyRemainingDevWork() - await validateChangelogYMLFile() validatePRChangelog() })() diff --git a/data/schema.graphql b/data/schema.graphql index ee35aeef701..0e28f833b68 100644 --- a/data/schema.graphql +++ b/data/schema.graphql @@ -3935,7 +3935,33 @@ type CommerceShipment { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String! + deliveryEnd( + format: String + + # A tz database time zone, otherwise falls back to `X-TIMEZONE` header + timezone: String + ): String + deliveryStart( + format: String + + # A tz database time zone, otherwise falls back to `X-TIMEZONE` header + timezone: String + ): String + deliveryWindowModifier: String id: ID! + pickupEnd( + format: String + + # A tz database time zone, otherwise falls back to `X-TIMEZONE` header + timezone: String + ): String + pickupStart( + format: String + + # A tz database time zone, otherwise falls back to `X-TIMEZONE` header + timezone: String + ): String + pickupWindowModifier: String priceCents: Int! priceCurrency: String! status: String @@ -5168,6 +5194,9 @@ type ConversationInitiator { type ConversationItem { item: ConversationItemType + + # The actual, non-snapshotted artwork + liveArtwork: ConversationItemType permalink: String title: String } @@ -6001,7 +6030,16 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String - articlesConnection(after: String, before: String, first: Int, last: Int, sort: ArticleSorts): ArticleConnection + articlesConnection( + after: String + before: String + first: Int + + # Articles that are ready to be publicly viewed in the feed by everyone. + inEditorialFeed: Boolean + last: Int + sort: ArticleSorts + ): ArticleConnection artistsConnection( after: String before: String @@ -6123,6 +6161,7 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { before: String first: Int last: Int + page: Int # Number of artworks to return section: String @@ -8568,6 +8607,9 @@ type Partner implements Node { after: String before: String first: Int + + # Articles that are ready to be publicly viewed in the feed by everyone. + inEditorialFeed: Boolean last: Int page: Int sort: ArticleSorts diff --git a/docs/README.md b/docs/README.md index a8b27edc5c1..3bbec7db36a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,7 @@ ## Meandering Around - [General Overview](overview.md) +- [Storybook / UI Components](storybook.md) ## Specific Problems diff --git a/docs/deploy_to_app_store.md b/docs/deploy_to_app_store.md index 40e9e2a82d8..939a2189de7 100644 --- a/docs/deploy_to_app_store.md +++ b/docs/deploy_to_app_store.md @@ -35,7 +35,6 @@ Our App Store releases are done manually, instead of automatically once Apple ap 1. Create a new version of the app in AppStoreConnect (if you don't do this, beta deployments will fail). - Go to "My Apps", click Eigen ("Artsy: Buy & Sell Original Art"), click "+ version or platform", click "iOS", and enter version number. 1. Run `./scripts/next`. This prompts for the next version number. **Use the same version as the previous step**. -1. Move the release from `upcoming` to `releases` in `CHANGELOG.yml` and add a new, empty entry under `upcoming`. Make sure the `date` is accurate. [Here is a previous commit](https://github.com/artsy/eigen/commit/4c9708b7082057de15f1dba51c057d8efacee0b5#diff-f5c8d85e3311e0af3edc9c70c7d01c10f03bba1d56d05a25820f5e4265e3df0d). 1. Add and commit the changed files, typically with `-m "Preparing for development, version X.Y.Z."`. 1. Run `./scripts/deploy-ios` to trigger a new beta. (When we add a new version, the first beta goes through additional TestFlight review by Apple. By trigger the beta now, we go through that review early, and avoid delaying future QA sessions.) 1. PR your changes back into the `master` branch. diff --git a/docs/palette_v3_migration_guide.md b/docs/palette_v3_migration_guide.md new file mode 100644 index 00000000000..1ae9c3351ea --- /dev/null +++ b/docs/palette_v3_migration_guide.md @@ -0,0 +1,75 @@ +# Palette v3 migration guide + +- Use `ThemeV2` and `ThemeV3`. + Currently `Theme` is pointing to `ThemeV2`, and later it will point to `ThemeV3`. During the v2 -> v3 migration, the more explicit we are, the better. + +- Use `useTheme` to get access to `color` and `space`. + We used to use `color` and `space` imported from `palette` directly. Unforunately, this is not theme-aware, so we need to change our ways. Always use `const { color, space } = useTheme()` or `const color = useColor()` or `const space = useSpace()`, to get the theme-aware functionality we need. + +- Use `themeGet` for styled-components, but try to avoid styled-components. + If you need to access anything from the theme within a styled-component, you should use `themeGet` like: + +```tsx +import { themeGet } from "@styled-system/theme-get" + +const TheComp = styled(Flex)` + background-color: ${themeGet("colors.black100")}; + margin-left: ${themeGet("space.2")}px; + border-width: 3; +` +``` + +One limitation here is that you cannot use `0.5` or any other value of `space` that has a dot in the name. Prefer to use simple components instead, like: + +```tsx +const TheComp = (props) => { + const { color, space } = useTheme() + return ( + + ) +} +``` + +- Use `useThemeConfig` to make components behave correctly in both palette versions. + When a component has to be presented in both palette versions but use different styling in the two versions, we can use `useThemeConfig`. + For example, if we have a view that needs to have a `red` border in `v2` and a `blue` border in `v3`, we do: + +```tsx +const TheView = () => { + const theBorderColor = useThemeConfig({ + v2: "red", + v3: "blue", + }) + + return +} +``` + +- Use `ClassTheme` for class components. + `ClassTheme` exposes the hooks of the theme, so you can use it like: + +```tsx +import { ClassTheme } from "palette" + +class TheComp extends React.Component { + render() { + return ( + + {({color, space, theme}) => ( + + )} + + ) + } +} +``` diff --git a/docs/pull_request_template.md b/docs/pull_request_template.md index 9963aa9f9ce..a23c4f5b3fd 100644 --- a/docs/pull_request_template.md +++ b/docs/pull_request_template.md @@ -21,7 +21,7 @@ This PR resolves [] - [ ] I have added a feature flag, or my changes don't require a feature flag. ([How do I add one?](https://github.com/artsy/eigen/blob/master/docs/developing_a_feature.md)) - [ ] I have documented any follow-up work that this PR will require, or it does not require any. - [ ] I have added an app state migration, or my changes do not require one. ([What are migrations?](https://github.com/artsy/eigen/blob/master/docs/adding_state_migrations.md)) -- [ ] I have added a CHANGELOG.yml entry below or my changes do not require one. +- [ ] I have added a changelog entry below or my changes do not require one.

Changelog updates diff --git a/docs/storybook.md b/docs/storybook.md new file mode 100644 index 00000000000..e1ebb553ce8 --- /dev/null +++ b/docs/storybook.md @@ -0,0 +1,42 @@ +### Storybook + +We use [Storybook](https://storybook.js.org/tutorials/intro-to-storybook/react-native/en/get-started/) to build and display our UI components in isolation. + +**Run Storybook server** + +Opens a web server and browser UI that runs alongside the simulator. + +``` +yarn storybook-server +``` + +**Run Storybook as standalone app** + +Opens Storybook without loading the entire app (instead of `yarn start`). + +``` +yarn start-storybook +``` + +The screen can also be opened from the admin menu. + +**Run Storybook** + +Opens storybook as a screen in the app. + +``` +yarn storybook-ios +yarn storybook-android +``` + +**Adding new storybook stories** + +Make a file next to the file you want to make stories for, for example, if you want to make stories for `Checkbox.tsx`, make a file called `Checkbox.stories.tsx` next to it. + +You can look for other stories files for reference, but the main structure is: + +```tsx +storiesOf("Checkbox", module) + .add("A Story Name", () => ) + .add("Another Story Name", () => ) +``` diff --git a/emission/Emission.podspec b/emission/Emission.podspec index 2587fb6af40..4ba227c39e3 100644 --- a/emission/Emission.podspec +++ b/emission/Emission.podspec @@ -39,7 +39,7 @@ podspec = Pod::Spec.new do |s| s.dependency 'ISO8601DateFormatter' # To ensure a consistent image cache between app/lib - s.dependency 'SDWebImage', '>= 3.7.2', '< 4' + s.dependency 'SDWebImage', '5.8.3' # For custom animations in DeepZoomOverlay s.dependency 'INTUAnimationEngine' diff --git a/emission/Pod/Classes/Core/AREmission.h b/emission/Pod/Classes/Core/AREmission.h index 073c1718575..aea2c8d2118 100644 --- a/emission/Pod/Classes/Core/AREmission.h +++ b/emission/Pod/Classes/Core/AREmission.h @@ -29,6 +29,9 @@ extern NSString *const AREnvTest; - (instancetype)initWithState:(NSDictionary *)state packagerURL:(nullable NSURL *)packagerURL NS_DESIGNATED_INITIALIZER; - (void)updateState:(NSDictionary *)state; +- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits; +- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits; +- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSString *)stateStringForKey:(NSString *)stateKey; - (NSString *)reactStateStringForKey:(NSString *)stateKey; - (BOOL)reactStateBoolForKey:(NSString *)stateKey; diff --git a/emission/Pod/Classes/Core/AREmission.m b/emission/Pod/Classes/Core/AREmission.m index 10150367787..290508ed931 100644 --- a/emission/Pod/Classes/Core/AREmission.m +++ b/emission/Pod/Classes/Core/AREmission.m @@ -87,6 +87,25 @@ - (void)updateState:(NSDictionary *)state [self.notificationsManagerModule updateState:state]; } +- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits +{ + NSMutableDictionary *eventTraits = [traits mutableCopy]; + [eventTraits addEntriesFromDictionary:@{@"event_name": name }]; + [self.notificationsManagerModule sendEvent:eventTraits]; +} + +- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits +{ + NSMutableDictionary *screenTraits = [traits mutableCopy]; + [screenTraits addEntriesFromDictionary:@{@"screen_name": screenName }]; + [self.notificationsManagerModule sendEvent:screenTraits]; +} + +- (void)sendIdentifyEvent:(NSDictionary *)traits +{ + [self.notificationsManagerModule sendIdentifyEvent:traits]; +} + - (NSString *)stateStringForKey:(NSString *)stateKey { NSString *result = [self.notificationsManagerModule.state valueForKey:stateKey]; diff --git a/emission/Pod/Classes/Core/AREventsModule.m b/emission/Pod/Classes/Core/AREventsModule.m index f53cdd5d1ca..5f4e8be7b55 100644 --- a/emission/Pod/Classes/Core/AREventsModule.m +++ b/emission/Pod/Classes/Core/AREventsModule.m @@ -13,11 +13,6 @@ @implementation AREventsModule RCT_EXPORT_MODULE(); -RCT_EXPORT_METHOD(postEvent:(nonnull NSDictionary *)info) -{ - self.eventOccurred(info); -} - RCT_EXPORT_METHOD(requestAppStoreRating) { [SKStoreReviewController requestReview]; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h index 89b21785dde..5b578ff9d4d 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h @@ -28,6 +28,8 @@ - (instancetype)initWithState:(NSDictionary *)state; - (void)updateState:(NSDictionary *)state; +- (void)sendEvent:(NSDictionary *)traits; +- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSDictionary *)state; - (NSDictionary *)reactState; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m index 824ba3dc12f..d3b1c6d5d1c 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m @@ -49,6 +49,8 @@ @interface ARNotificationsManager () static const NSString *stateChanged = @"STATE_CHANGED"; static const NSString *reactStateChanged = @"STATE_CHANGED"; static const NSString *requestNavigation = @"REQUEST_NAVIGATION"; +static const NSString *eventTracking = @"EVENT_TRACKING"; +static const NSString *identifyTracking = @"IDENTIFY_TRACKING"; @implementation ARNotificationsManager @@ -109,6 +111,22 @@ - (void)updateState:(NSDictionary *)state } } +- (void)sendEvent:(NSDictionary *)traits +{ + @synchronized(self) + { + [self dispatch:eventTracking data:traits]; + } +} + +- (void)sendIdentifyEvent:(NSDictionary *)traits +{ + @synchronized(self) + { + [self dispatch:identifyTracking data:traits]; + } +} + - (void)notificationReceived { [self dispatch:notificationReceived data:@{}]; @@ -130,6 +148,7 @@ - (void)requestNavigation:(NSString *)route withProps:(NSDictionary *)props [self afterBootstrap:^{ __strong typeof(self) sself = wself; if (!sself) return; + if (!route) return; [sself dispatch:requestNavigation data:@{@"route": route, @"props": props}]; }]; } diff --git a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m index b158c2aa382..2152067b1a6 100644 --- a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m +++ b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m @@ -88,17 +88,19 @@ - (void)setImageURL:(NSURL *)imageURL; return; } - // TODO: Setting decompress to NO, because Eigen sets it to YES. - // We need to send a PR to SDWebImage to disable decoding - // with an option to the download method. - // SDWebImageManager *manager = [SDWebImageManager sharedManager]; - - manager.imageCache.shouldDecompressImages = NO; - manager.imageDownloader.shouldDecompressImages = NO; - + SDImageCache *imageCache = [SDImageCache sharedImageCache]; + + // Applying a global disabling of the decode feature + manager.optionsProcessor = [SDWebImageOptionsProcessor optionsProcessorWithBlock:^SDWebImageOptionsResult * _Nullable(NSURL * _Nullable url, SDWebImageOptions options, SDWebImageContext * _Nullable context) { + // Global disable force decode feature + options |= SDWebImageAvoidDecodeImage; + + return [[SDWebImageOptionsResult alloc] initWithOptions:options context:context]; + }]; + __weak typeof(self) weakSelf = self; - [manager cachedImageExistsForURL:self.imageURL completion:^(BOOL isInCache) { + [imageCache diskImageExistsWithKey:self.imageURL.absoluteString completion:^(BOOL isInCache) { if (!isInCache) { self.backgroundColor = self.placeholderBackgroundColor; } @@ -108,10 +110,11 @@ - (void)setImageURL:(NSURL *)imageURL; options = options | (self.retryFailedURLs ? SDWebImageRetryFailed : 0); options = options | (self.highPriority ? SDWebImageHighPriority : 0); - self.downloadOperation = [manager downloadImageWithURL:self.imageURL + self.downloadOperation = [manager loadImageWithURL:self.imageURL options:options progress:nil completed:^(UIImage *image, + NSData* _Nullable _, NSError *error, SDImageCacheType __, BOOL completed, diff --git a/fastlane/Fastfile b/fastlane/Fastfile index f2ff6d28a2a..a79642d4270 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -27,24 +27,17 @@ lane :ship_beta_ios do api_key = app_store_connect_api_key( key_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ID'], issuer_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ISSUER_ID'], - key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT'], + key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT_BASE64'], + is_key_content_base64: true, in_house: false, ) set_build_version_ios - changelog_yaml = File.read('../CHANGELOG.yml') - changelog_data = YAML.safe_load(changelog_yaml) - - latest_version = changelog_data['upcoming']['version'] + latest_version = app_json['version'] - upcoming = changelog_data['upcoming'] - commit = `git log -n1 --format='%h'`.strip - notes = upcoming['user_facing'] || [] - beta_readme = "## #{upcoming['version']} - #{commit} \n\n - #{notes.join "\n - "} \n\n" - - # Make sure the stickers app is up to date in it's plist - `/usr/libexec/PlistBuddy -c "Set CFBundleVersion #{latest_version}" Artsy\ Stickers/Info.plist` + # TODO: Once changelog infra is nailed down we should get release notes from there + beta_readme = "Thanks for using the Artsy beta!" # Builds the app sync_code_signing(app_identifier: ['net.artsy.artsy', 'net.artsy.artsy.Artsy-Stickers'], type: 'appstore') @@ -103,9 +96,9 @@ end date_str = DateTime.now.strftime("%Y.%m.%d.%H") lane :set_build_version_ios do system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{sticker_plist}") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" \"#{sticker_plist}\"") system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{sticker_plist}") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" \"#{sticker_plist}\"") end build_gradle = "../android/app/build.gradle" @@ -160,7 +153,6 @@ lane :ship_beta_android do vname, vcode = set_build_version_android tag_and_push(tag: "android-#{vname}-#{vcode}") - sentry_release_name = "android-#{vname}-#{vcode}" update_sentry_release_name(sentry_release_name: sentry_release_name) diff --git a/index.android.js b/index.android.js index 4fb01033f09..c08f6923123 100644 --- a/index.android.js +++ b/index.android.js @@ -1,8 +1,22 @@ global.__TEST__ = false -require("react-native-gesture-handler") -require("react-native-screens").enableScreens() -require("./src/lib/utils/PushNotification").configure() -const { AppRegistry } = require('react-native') -const {App} = require('./src/lib/AndroidApp') -AppRegistry.registerComponent("Artsy", () => App) +// start storybook depending on content of storybook.json +let startStorybook = false + +if (__DEV__) { + try { + const fileContent = require("./storybook.json") + startStorybook = fileContent.startStorybook + } catch {} +} + +if (startStorybook) { + require("./src/storybook") +} else { + require("react-native-gesture-handler") + require("react-native-screens").enableScreens() + require("./src/lib/utils/PushNotification").configure() + const { AppRegistry } = require("react-native") + const { App } = require("./src/lib/AndroidApp") + AppRegistry.registerComponent("Artsy", () => App) +} diff --git a/index.ios.js b/index.ios.js index 9c87cf941ac..72d525ff8df 100644 --- a/index.ios.js +++ b/index.ios.js @@ -1,5 +1,20 @@ global.__TEST__ = false -require("react-native-gesture-handler") -require("react-native-screens").enableScreens() -require("./src/lib/ErrorReporting") -require("./src/lib/AppRegistry") + +// start storybook depending on content of storybook.json +let startStorybook = false + +if (__DEV__) { + try { + const fileContent = require("./storybook.json") + startStorybook = fileContent.startStorybook + } catch {} +} + +if (startStorybook) { + require("./src/storybook") +} else { + require("react-native-gesture-handler") + require("react-native-screens").enableScreens() + require("./src/lib/ErrorReporting") + require("./src/lib/AppRegistry") +} diff --git a/index.tests.ios.js b/index.tests.ios.js index b6426dd1505..242b6a476ec 100644 --- a/index.tests.ios.js +++ b/index.tests.ios.js @@ -1,2 +1 @@ import "./index.ios" - diff --git a/jest.config.js b/jest.config.js index 8488f3e0d1b..0d700502df6 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,6 +5,8 @@ module.exports = { "^lib/(.*)": "/src/lib/$1", "^palette$": "/src/palette", "^palette/(.*)": "/src/palette/$1", + "^storybook$": "/src/storybook", + "^storybook/(.*)": "/src/storybook/$1", "@images/(.*)": "/images/$1", "@relay/(.*)": "/src/lib/relay/$1", }, diff --git a/package.json b/package.json index 139bf926e7e..3c4cb93b6e0 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "generate-cities-objc": "node scripts/generate-cities-objc.js", "generate-graphql-query-map": "node scripts/generate-graphql-query-map.js > emission/Pod/Classes/GraphQL/ARGraphQLQueryMap.generated.objc", "ios": "node node_modules/react-native/local-cli/cli.js run-ios", - "android": "react-native run-android", + "android": "./scripts/set-storybook-environment.js && react-native run-android", "clean-ios": "yarn rimraf ~/Library/Developer/Xcode/DerivedData", "clean-android": "cd android; ./gradlew clean cleanBuildCache; cd -", "clean": "yarn clean-ios; yarn clean-android", @@ -41,7 +41,6 @@ "start-packager-after-relay": "yarn relay && yarn start-packager", "start-servers": "concurrently --kill-others 'yarn start-packager-after-relay' 'yarn relay --watch'", "start": "yarn start-servers", - "stylelint-project": " stylelint -- 'src/**/*.{ts,tsx}'", "sync-cities": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/src/schema/city/cityDataSortedByDisplayPreference.json -o data/cityDataSortedByDisplayPreference.json", "sync-schema": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/_schemaV2.graphql -o data/schema.graphql; yarn prettier --write --parser graphql data/schema.graphql", "sync-schema:localhost": "cd ../metaphysics && yarn dump-schema v2 ../eigen/data/", @@ -51,6 +50,13 @@ "type-check:offence-ranking": "yarn -s type-check:offence 'TS\\d+' -o | sort | uniq -c | sort -r", "type-check:offence": "tsc --pretty false | grep -v __generated__ | grep -E", "type-check": "tsc", + "storybook-ios": "npx artsy open -i storybook", + "storybook-android": "npx artsy open -a storybook", + "prestorybook-server": "rnstl", + "storybook-server": "start-storybook -p 7007", + "build-storybook": "build-storybook", + "start-storybook": "STORYBOOK=1 yarn start", + "detect-secrets": "detect-secrets-launcher", "update-metaphysics": "node scripts/update-metaphysics.js" }, "repository": { @@ -78,8 +84,8 @@ "cheerio": "0.22.0" }, "dependencies": { - "@artsy/cohesion": "2.7.0", - "@artsy/palette-tokens": "^1.3.1", + "@artsy/cohesion": "2.13.0", + "@artsy/palette-tokens": "2.1.2", "@expo/react-native-action-sheet": "^3.8.0", "@invertase/react-native-apple-authentication": "^2.1.2", "@ptomasroos/react-native-multi-slider": "^2.2.2", @@ -96,9 +102,10 @@ "@react-navigation/bottom-tabs": "^5.11.7", "@react-navigation/native": "^5.9.2", "@react-navigation/stack": "^5.14.2", - "@segment/analytics-react-native": "^1.4.4", - "@segment/analytics-react-native-appboy": "^1.4.8", + "@segment/analytics-react-native": "^1.5.0", + "@segment/analytics-react-native-appboy": "^1.5.0", "@sentry/react-native": "2.2.1", + "@styled-system/theme-get": "^5.1.2", "easy-peasy": "3.3.0", "events": "3.1.0", "formik": "2.1.4", @@ -111,7 +118,7 @@ "query-string": "4.3.4", "react": "16.13.1", "react-native": "0.63.3", - "react-native-appboy-sdk": "^1.29.1", + "react-native-appboy-sdk": "^1.30.0", "react-native-bootsplash": "^3.2.0", "react-native-config": "https://github.com/artsy/react-native-config.git", "react-native-credit-card-input": "^0.4.1", @@ -142,16 +149,16 @@ "rn-fetch-blob": "0.12.0", "semver": "^7.3.4", "simple-markdown": "0.7.2", - "styled-components": "4.2.0", + "styled-components": "4.2.1", "styled-system": "5.1.5", "supercluster": "6.0.1", "tipsi-stripe": "https://github.com/artsy/tipsi-stripe.git#fix-infinite-loop", "url": "^0.11.0", - "yup": "0.29.1" + "yup": "0.29.1", + "zustand": "^3.5.7" }, "devDependencies": { - "@artsy/auto-config": "1.0.2", - "@artsy/update-repo": "0.2.0", + "@artsy/update-repo": "0.2.1", "@babel/core": "^7.12.9", "@babel/plugin-proposal-class-properties": "7.10.4", "@babel/plugin-proposal-decorators": "7.10.5", @@ -164,11 +171,14 @@ "@react-native-community/cli-platform-ios": "3.0.0", "@testing-library/jest-native": "^4.0.1", "@testing-library/react-native": "7.1.0", + "@storybook/addon-actions": "^5.3", + "@storybook/react-native": "^5.3.25", + "@storybook/react-native-server": "^5.3.23", "@types/argparse": "^2.0.8", "@types/chalk": "2.2.0", "@types/dedent": "0.7.0", "@types/jest": "25.1.5", - "@types/lodash": "4.14.170", + "@types/lodash": "4.14.149", "@types/luxon": "1.15.2", "@types/moment-timezone": "0.5.4", "@types/node": "12.7.5", @@ -185,14 +195,16 @@ "@types/relay-test-utils": "6.0.1", "@types/remove-markdown": "0.1.1", "@types/semver": "^7.3.4", - "@types/styled-components": "4.0.2", - "@types/styled-system": "5.1.9", + "@types/styled-components": "4.0.3", + "@types/styled-system": "5.1.12", + "@types/styled-system__theme-get": "^5.0.1", "@types/supercluster": "5.0.0", "@types/yup": "0.29.3", "argparse": "^2.0.1", "auto": "7.12.3", "awesome-typescript-loader": "3.4.1", "babel-jest": "25.2.6", + "babel-loader": "^8.2.2", "babel-plugin-import-graphql": "2.7.0", "babel-plugin-relay": "10.1.3", "chalk": "2.4.2", @@ -202,6 +214,7 @@ "danger": "^10.6.4", "danger-plugin-jest": "^1.3.0", "dedent": "0.7.0", + "detect-secrets": "^1.0.6", "dotenv": "8.2.0", "enzyme": "3.9.0", "enzyme-adapter-react-16": "1.13.0", @@ -212,7 +225,6 @@ "jest": "25.2.7", "jest-fetch-mock": "^3.0.3", "jest-raw-loader": "1.0.1", - "jest-styled-components": "7.0.0-2", "jest-watch-typeahead": "^0.6.1", "jetifier": "^1.6.6", "json5": "2.1.0", @@ -229,6 +241,7 @@ "puppeteer": "^7.1.0", "react-dom": "16.8.3", "react-native-flipper": "^0.94.1", + "react-native-storybook-loader": "^2.0.4", "react-relay-network-modern": "^6.0.0", "react-test-renderer": "16.13.1", "recursive-readdir-sync": "1.0.6", @@ -240,20 +253,21 @@ "relay-test-utils": "^10.0.1", "rimraf": "^3.0.2", "snapshot-diff": "0.2.2", - "stylelint": "9.8.0", - "stylelint-config-standard": "18.2.0", - "stylelint-config-styled-components": "0.1.1", - "stylelint-processor-styled-components": "1.5.1", "tmp": "0.1.0", "ts-node": "8.4.1", "tslint": "5.14.0", "tslint-config-prettier": "1.18.0", "tslint-plugin-relay": "0.0.2", - "typescript": "^4.1.2", - "typescript-styled-plugin": "0.13.0", - "vscode-apollo-relay": "1.5.0", - "yaml": "1.9.2", - "yaml-lint": "^1.2.4" + "typescript": "4.3.5", + "typescript-styled-plugin": "0.18.0", + "vscode-apollo-relay": "1.5.1" + }, + "config": { + "react-native-storybook-loader": { + "searchDir": ["./src"], + "pattern": "**/*.stories.tsx", + "outputFile": "./src/storybook/storyLoader.js" + } }, "lint-staged": { "*.@(ts|tsx)": [ @@ -264,8 +278,8 @@ "*.@(json|md)": [ "yarn prettier-write" ], - "*.@(yml)": [ - "yarn yamllint" + "**/!(package.json)": [ + "detect-secrets-launcher --baseline .secrets.baseline" ] }, "prettier": { diff --git a/patches/@segment+analytics-react-native+1.4.4.patch b/patches/@segment+analytics-react-native+1.4.4.patch deleted file mode 100644 index afe72953da0..00000000000 --- a/patches/@segment+analytics-react-native+1.4.4.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec b/node_modules/@segment/analytics-react-native/RNAnalytics.podspec -deleted file mode 100644 -index 22dd268..0000000 ---- a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec -+++ /dev/null -@@ -1,26 +0,0 @@ --require 'json' --package = JSON.parse(File.read('./package.json')) -- --Pod::Spec.new do |s| -- s.name = 'RNAnalytics' -- s.version = package['version'] -- s.summary = package['description'] -- s.description = <<-DESC -- Analytics for iOS provides a single API that lets you -- integrate with over 100s of tools. -- DESC -- -- s.homepage = 'http://segment.com/' -- s.social_media_url = 'https://twitter.com/segment' -- s.license = { :type => 'MIT' } -- s.author = { 'Segment' => 'friends@segment.com' } -- s.source = { :git => 'https://github.com/segmentio/analytics-react-native.git', :tag => s.version.to_s } -- -- s.platform = :ios, '10.0' -- s.source_files = 'ios/**/*.{m,h}' -- s.static_framework = true -- -- s.dependency 'Analytics' -- s.dependency 'React-Core' --end -- diff --git a/patches/@segment+analytics-react-native-appboy+1.4.8.patch b/patches/@segment+analytics-react-native-appboy+1.4.8.patch deleted file mode 100644 index 6d1d6e0776b..00000000000 --- a/patches/@segment+analytics-react-native-appboy+1.4.8.patch +++ /dev/null @@ -1,35 +0,0 @@ -diff --git a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec b/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec -deleted file mode 100644 -index a9eeb16..0000000 ---- a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec -+++ /dev/null -@@ -1,29 +0,0 @@ --require 'json' --package = JSON.parse(File.read('./package.json')) -- --Pod::Spec.new do |s| -- s.name = "RNAnalyticsIntegration-Appboy" -- s.version = package["version"] -- s.summary = package["description"] -- s.description = <<-DESC -- Analytics for React-Native provides a single API that lets you -- integrate with over 100s of tools. -- -- This is the Appboy integration for the React-Native library. -- DESC -- -- s.homepage = "http://segment.com/" -- s.license = { :type => 'MIT' } -- s.author = { "Segment" => "friends@segment.com" } -- s.source = { :git => "https://github.com/segmentio/analytics-react-native.git", :tag => s.version.to_s } -- s.social_media_url = 'https://twitter.com/segment' -- -- s.platform = :ios, "11.0" -- s.source_files = 'ios/main.m' -- s.static_framework = true -- -- s.dependency 'Segment-Appboy' -- s.dependency 'Analytics' -- s.dependency 'React-Core' -- s.dependency 'RNAnalytics' --end diff --git a/patches/react-native-appboy-sdk+1.29.1.patch b/patches/react-native-appboy-sdk+1.29.1.patch deleted file mode 100644 index 53863b7ae01..00000000000 --- a/patches/react-native-appboy-sdk+1.29.1.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff --git a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec b/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec -deleted file mode 100644 -index 4e69ac8..0000000 ---- a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec -+++ /dev/null -@@ -1,23 +0,0 @@ --require 'json' -- --package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) -- --Pod::Spec.new do |s| -- s.name = package['name'] -- s.version = package['version'] -- s.summary = package['description'] -- s.description = package['description'] -- s.license = package['license'] -- s.author = package['author'] -- s.homepage = package['homepage'] -- s.source = { :git => 'git+https://github.com/Appboy/appboy-react-sdk.git', :tag => s.version } -- -- s.requires_arc = true -- s.platform = :ios, '9.0' -- -- s.preserve_paths = 'LICENSE.md', 'README.md', 'package.json', 'index.js' -- s.source_files = 'iOS/**/*.{h,m}' -- -- s.dependency 'Appboy-iOS-SDK', '~> 4.2.0' -- s.dependency 'React' --end diff --git a/patches/react-native-push-notification+7.4.0.patch b/patches/react-native-push-notification+7.4.0.patch new file mode 100644 index 00000000000..79a09fc8264 --- /dev/null +++ b/patches/react-native-push-notification+7.4.0.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/react-native-push-notification/component/index.ios.js b/node_modules/react-native-push-notification/component/index.ios.js +deleted file mode 100644 +index 82eee6a..0000000 +--- a/node_modules/react-native-push-notification/component/index.ios.js ++++ /dev/null +@@ -1,7 +0,0 @@ +-"use strict"; +- +-import PushNotificationIOS from "@react-native-community/push-notification-ios"; +- +-module.exports = { +- component: PushNotificationIOS +-}; diff --git a/scripts/set-storybook-environment.js b/scripts/set-storybook-environment.js new file mode 100755 index 00000000000..07f6ae93c8c --- /dev/null +++ b/scripts/set-storybook-environment.js @@ -0,0 +1,23 @@ +#!/usr/bin/env node + +// Create or change `storybook.json` depending on STORYBOOK env variable +// to read the file content later in `index.ios.js` and `index.android.js` +// and either start the app or Storybook. + +const fs = require("fs") + +const startStorybook = process.env.STORYBOOK === "1" + +let fileContent + +try { + fileContent = require("../storybook.json") +} catch (e) { + fileContent = {} +} + +if (startStorybook) console.log("Starting storybook...") + +fileContent.startStorybook = !!startStorybook + +fs.writeFileSync("./storybook.json", JSON.stringify(fileContent, undefined, 2)) diff --git a/scripts/start_packager.sh b/scripts/start_packager.sh index 92f5722739e..ecc8a340ae3 100755 --- a/scripts/start_packager.sh +++ b/scripts/start_packager.sh @@ -1,5 +1,9 @@ +# Set storybook environment depending on STORYBOOK env variable +./scripts/set-storybook-environment.js + # if the user has the React Native Debugger app installed, then use that # otherwise, at time of writing, it opens chrome + if [ -d '/Applications/React Native Debugger.app' ] then export REACT_DEBUGGER="open 'rndebugger://set-debugger-loc?host=localhost&port=8081' --args" diff --git a/src/__generated__/FairArticlesQuery.graphql.ts b/src/__generated__/FairArticlesQuery.graphql.ts index d1397367feb..258058db7dc 100644 --- a/src/__generated__/FairArticlesQuery.graphql.ts +++ b/src/__generated__/FairArticlesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash a2c7eaafc326ca86ccb365fc75f03310 */ +/* @relayHash 87d2388264c700fee7dfa6e461a57302 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -36,7 +36,7 @@ query FairArticlesQuery( fragment FairArticles_fair_2HEEH6 on Fair { slug - articlesConnection(first: $first, after: $after) { + articlesConnection(first: $first, after: $after, inEditorialFeed: true) { totalCount edges { node { @@ -88,19 +88,26 @@ v3 = [ "variableName": "id" } ], -v4 = [ - { - "kind": "Variable", - "name": "after", - "variableName": "after" - }, +v4 = { + "kind": "Variable", + "name": "after", + "variableName": "after" +}, +v5 = { + "kind": "Variable", + "name": "first", + "variableName": "first" +}, +v6 = [ + (v4/*: any*/), + (v5/*: any*/), { - "kind": "Variable", - "name": "first", - "variableName": "first" + "kind": "Literal", + "name": "inEditorialFeed", + "value": true } ], -v5 = { +v7 = { "alias": null, "args": null, "kind": "ScalarField", @@ -127,7 +134,10 @@ return { "plural": false, "selections": [ { - "args": (v4/*: any*/), + "args": [ + (v4/*: any*/), + (v5/*: any*/) + ], "kind": "FragmentSpread", "name": "FairArticles_fair" } @@ -165,7 +175,7 @@ return { }, { "alias": null, - "args": (v4/*: any*/), + "args": (v6/*: any*/), "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "articlesConnection", @@ -230,7 +240,7 @@ return { "name": "name", "storageKey": null }, - (v5/*: any*/) + (v7/*: any*/) ], "storageKey": null }, @@ -272,7 +282,7 @@ return { ], "storageKey": null }, - (v5/*: any*/), + (v7/*: any*/), { "alias": null, "args": null, @@ -323,21 +333,23 @@ return { }, { "alias": null, - "args": (v4/*: any*/), - "filters": null, + "args": (v6/*: any*/), + "filters": [ + "inEditorialFeed" + ], "handle": "connection", "key": "FairArticlesQuery_articlesConnection", "kind": "LinkedHandle", "name": "articlesConnection" }, - (v5/*: any*/) + (v7/*: any*/) ], "storageKey": null } ] }, "params": { - "id": "a2c7eaafc326ca86ccb365fc75f03310", + "id": "87d2388264c700fee7dfa6e461a57302", "metadata": {}, "name": "FairArticlesQuery", "operationKind": "query", diff --git a/src/__generated__/FairArticles_fair.graphql.ts b/src/__generated__/FairArticles_fair.graphql.ts index 1955d3f4c71..0c829507c8d 100644 --- a/src/__generated__/FairArticles_fair.graphql.ts +++ b/src/__generated__/FairArticles_fair.graphql.ts @@ -71,7 +71,13 @@ const node: ReaderFragment = { }, { "alias": "articlesConnection", - "args": null, + "args": [ + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + } + ], "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "__FairArticlesQuery_articlesConnection_connection", @@ -223,11 +229,11 @@ const node: ReaderFragment = { "storageKey": null } ], - "storageKey": null + "storageKey": "__FairArticlesQuery_articlesConnection_connection(inEditorialFeed:true)" } ], "type": "Fair", "abstractKey": null }; -(node as any).hash = '3617b56cd5e1da3507007fb0522a6f3d'; +(node as any).hash = '105ebb5748a1592e87cc71d635c7f7bd'; export default node; diff --git a/src/__generated__/FairEditorialTestsQuery.graphql.ts b/src/__generated__/FairEditorialTestsQuery.graphql.ts index f6fd36389cd..d3dde9334c8 100644 --- a/src/__generated__/FairEditorialTestsQuery.graphql.ts +++ b/src/__generated__/FairEditorialTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash a4c687c8474c93af12b5b7a720ca053f */ +/* @relayHash 614002b1fde84c246282a59cd05691c5 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -33,7 +33,7 @@ query FairEditorialTestsQuery( fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { totalCount edges { node { @@ -151,6 +151,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -240,7 +245,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" }, (v4/*: any*/) ], @@ -249,7 +254,7 @@ return { ] }, "params": { - "id": "a4c687c8474c93af12b5b7a720ca053f", + "id": "614002b1fde84c246282a59cd05691c5", "metadata": { "relayTestingSelectionTypeInfo": { "fair": { diff --git a/src/__generated__/FairEditorial_fair.graphql.ts b/src/__generated__/FairEditorial_fair.graphql.ts index a749e74fdc7..91d74be8ef6 100644 --- a/src/__generated__/FairEditorial_fair.graphql.ts +++ b/src/__generated__/FairEditorial_fair.graphql.ts @@ -64,6 +64,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -159,12 +164,12 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" } ], "type": "Fair", "abstractKey": null }; })(); -(node as any).hash = 'c0894b9c1c2e69bc13dde5f5bca3b311'; +(node as any).hash = 'dcc9e4ac75c08f9729d5731f13fc97fe'; export default node; diff --git a/src/__generated__/FairQuery.graphql.ts b/src/__generated__/FairQuery.graphql.ts index 0dcfa393589..c47cbb7d066 100644 --- a/src/__generated__/FairQuery.graphql.ts +++ b/src/__generated__/FairQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash b65aad4342ad2178d42f518b2e9e3afb */ +/* @relayHash 910bf946214c349eef3acdd70ed8d3e2 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { edges { __typename } @@ -691,6 +691,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -769,7 +774,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1610,7 +1615,7 @@ return { ] }, "params": { - "id": "b65aad4342ad2178d42f518b2e9e3afb", + "id": "910bf946214c349eef3acdd70ed8d3e2", "metadata": {}, "name": "FairQuery", "operationKind": "query", diff --git a/src/__generated__/FairTestsQuery.graphql.ts b/src/__generated__/FairTestsQuery.graphql.ts index cd86e1d8a45..f2c817630e0 100644 --- a/src/__generated__/FairTestsQuery.graphql.ts +++ b/src/__generated__/FairTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 7f0e66ce05b6fcc822099c410bcdc410 */ +/* @relayHash 7c2b278a37c9553cf44bbe2b1b21d68d */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { edges { __typename } @@ -805,6 +805,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -883,7 +888,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1724,7 +1729,7 @@ return { ] }, "params": { - "id": "7f0e66ce05b6fcc822099c410bcdc410", + "id": "7c2b278a37c9553cf44bbe2b1b21d68d", "metadata": { "relayTestingSelectionTypeInfo": { "fair": (v30/*: any*/), diff --git a/src/__generated__/Fair_fair.graphql.ts b/src/__generated__/Fair_fair.graphql.ts index 9cf12925133..f6e241a78a3 100644 --- a/src/__generated__/Fair_fair.graphql.ts +++ b/src/__generated__/Fair_fair.graphql.ts @@ -81,6 +81,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -103,7 +108,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -229,5 +234,5 @@ return { "abstractKey": null }; })(); -(node as any).hash = '6c991142cc4d3ed85f992de42519c078'; +(node as any).hash = '727444e516cba760bf7d87ed5e868d2d'; export default node; diff --git a/src/__generated__/SavedAddressesFormQuery.graphql.ts b/src/__generated__/SavedAddressesFormQuery.graphql.ts new file mode 100644 index 00000000000..0ac47e9cd7d --- /dev/null +++ b/src/__generated__/SavedAddressesFormQuery.graphql.ts @@ -0,0 +1,234 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 4882c50bcdba5ef0707c728f8c12da46 */ + +import { ConcreteRequest } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SavedAddressesFormQueryVariables = {}; +export type SavedAddressesFormQueryResponse = { + readonly me: { + readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; + } | null; +}; +export type SavedAddressesFormQuery = { + readonly response: SavedAddressesFormQueryResponse; + readonly variables: SavedAddressesFormQueryVariables; +}; + + + +/* +query SavedAddressesFormQuery { + me { + ...SavedAddressesForm_me + id + } +} + +fragment SavedAddressesForm_me on Me { + id + phone + addressConnection(first: 3) { + edges { + node { + internalID + name + addressLine1 + addressLine2 + addressLine3 + country + city + region + postalCode + isDefault + id + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}; +return { + "fragment": { + "argumentDefinitions": [], + "kind": "Fragment", + "metadata": null, + "name": "SavedAddressesFormQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "args": null, + "kind": "FragmentSpread", + "name": "SavedAddressesForm_me" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [], + "kind": "Operation", + "name": "SavedAddressesFormQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + (v0/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phone", + "storageKey": null + }, + { + "alias": null, + "args": [ + { + "kind": "Literal", + "name": "first", + "value": 3 + } + ], + "concreteType": "UserAddressConnection", + "kind": "LinkedField", + "name": "addressConnection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddressEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddress", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine3", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + }, + (v0/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": "addressConnection(first:3)" + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "4882c50bcdba5ef0707c728f8c12da46", + "metadata": {}, + "name": "SavedAddressesFormQuery", + "operationKind": "query", + "text": null + } +}; +})(); +(node as any).hash = 'b7e7515520a71dc3fbc77471605aae6b'; +export default node; diff --git a/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts b/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts new file mode 100644 index 00000000000..7922e555860 --- /dev/null +++ b/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts @@ -0,0 +1,234 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash c1731f4f53b8c1a40f580d23f8235ef4 */ + +import { ConcreteRequest } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SavedAddressesFormTestsQueryVariables = {}; +export type SavedAddressesFormTestsQueryResponse = { + readonly me: { + readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; + } | null; +}; +export type SavedAddressesFormTestsQuery = { + readonly response: SavedAddressesFormTestsQueryResponse; + readonly variables: SavedAddressesFormTestsQueryVariables; +}; + + + +/* +query SavedAddressesFormTestsQuery { + me { + ...SavedAddressesForm_me + id + } +} + +fragment SavedAddressesForm_me on Me { + id + phone + addressConnection(first: 3) { + edges { + node { + internalID + name + addressLine1 + addressLine2 + addressLine3 + country + city + region + postalCode + isDefault + id + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null +}; +return { + "fragment": { + "argumentDefinitions": [], + "kind": "Fragment", + "metadata": null, + "name": "SavedAddressesFormTestsQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "args": null, + "kind": "FragmentSpread", + "name": "SavedAddressesForm_me" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": [], + "kind": "Operation", + "name": "SavedAddressesFormTestsQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + (v0/*: any*/), + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phone", + "storageKey": null + }, + { + "alias": null, + "args": [ + { + "kind": "Literal", + "name": "first", + "value": 3 + } + ], + "concreteType": "UserAddressConnection", + "kind": "LinkedField", + "name": "addressConnection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddressEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddress", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine3", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + }, + (v0/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": "addressConnection(first:3)" + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "c1731f4f53b8c1a40f580d23f8235ef4", + "metadata": {}, + "name": "SavedAddressesFormTestsQuery", + "operationKind": "query", + "text": null + } +}; +})(); +(node as any).hash = 'c4a3bd662f05db60bd228c93d4e271fd'; +export default node; diff --git a/src/__generated__/SavedAddressesForm_me.graphql.ts b/src/__generated__/SavedAddressesForm_me.graphql.ts new file mode 100644 index 00000000000..73e46156056 --- /dev/null +++ b/src/__generated__/SavedAddressesForm_me.graphql.ts @@ -0,0 +1,170 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck + +import { ReaderFragment } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SavedAddressesForm_me = { + readonly id: string; + readonly phone: string | null; + readonly addressConnection: { + readonly edges: ReadonlyArray<{ + readonly node: { + readonly internalID: string; + readonly name: string | null; + readonly addressLine1: string; + readonly addressLine2: string | null; + readonly addressLine3: string | null; + readonly country: string; + readonly city: string; + readonly region: string | null; + readonly postalCode: string | null; + readonly isDefault: boolean; + } | null; + } | null> | null; + } | null; + readonly " $refType": "SavedAddressesForm_me"; +}; +export type SavedAddressesForm_me$data = SavedAddressesForm_me; +export type SavedAddressesForm_me$key = { + readonly " $data"?: SavedAddressesForm_me$data; + readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; +}; + + + +const node: ReaderFragment = { + "argumentDefinitions": [], + "kind": "Fragment", + "metadata": null, + "name": "SavedAddressesForm_me", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phone", + "storageKey": null + }, + { + "alias": null, + "args": [ + { + "kind": "Literal", + "name": "first", + "value": 3 + } + ], + "concreteType": "UserAddressConnection", + "kind": "LinkedField", + "name": "addressConnection", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddressEdge", + "kind": "LinkedField", + "name": "edges", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "UserAddress", + "kind": "LinkedField", + "name": "node", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine3", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "storageKey": "addressConnection(first:3)" + } + ], + "type": "Me", + "abstractKey": null +}; +(node as any).hash = 'b8dc20f08a969820d3a2cd8dc6b674ba'; +export default node; diff --git a/src/__generated__/SavedAddressesQuery.graphql.ts b/src/__generated__/SavedAddressesQuery.graphql.ts index d8259d16f2a..736b2e5be3e 100644 --- a/src/__generated__/SavedAddressesQuery.graphql.ts +++ b/src/__generated__/SavedAddressesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 307a22f71e0c5528a8308ab10c0a1713 */ +/* @relayHash 3498416c797ab2cba48a0de89b8851a7 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 3) { + addressConnection(first: 10) { edges { node { id @@ -37,10 +37,12 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 + country city region postalCode phoneNumber + isDefault } } } @@ -110,7 +112,7 @@ return { { "kind": "Literal", "name": "first", - "value": 3 + "value": 10 } ], "concreteType": "UserAddressConnection", @@ -164,6 +166,13 @@ return { "name": "addressLine3", "storageKey": null }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, { "alias": null, "args": null, @@ -191,6 +200,13 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null } ], "storageKey": null @@ -199,7 +215,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:3)" + "storageKey": "addressConnection(first:10)" }, (v1/*: any*/) ], @@ -208,7 +224,7 @@ return { ] }, "params": { - "id": "307a22f71e0c5528a8308ab10c0a1713", + "id": "3498416c797ab2cba48a0de89b8851a7", "metadata": {}, "name": "SavedAddressesQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts index 5f8b534b496..55b9b28a7fc 100644 --- a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts +++ b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 7740bab0af31b45dd30e299ce12294a9 */ +/* @relayHash c60103022967beb3a553190cabbfaf38 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesRefetchQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 3) { + addressConnection(first: 10) { edges { node { id @@ -37,10 +37,12 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 + country city region postalCode phoneNumber + isDefault } } } @@ -110,7 +112,7 @@ return { { "kind": "Literal", "name": "first", - "value": 3 + "value": 10 } ], "concreteType": "UserAddressConnection", @@ -164,6 +166,13 @@ return { "name": "addressLine3", "storageKey": null }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, { "alias": null, "args": null, @@ -191,6 +200,13 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null } ], "storageKey": null @@ -199,7 +215,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:3)" + "storageKey": "addressConnection(first:10)" }, (v1/*: any*/) ], @@ -208,7 +224,7 @@ return { ] }, "params": { - "id": "7740bab0af31b45dd30e299ce12294a9", + "id": "c60103022967beb3a553190cabbfaf38", "metadata": {}, "name": "SavedAddressesRefetchQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesTestsQuery.graphql.ts b/src/__generated__/SavedAddressesTestsQuery.graphql.ts index e81acb0924f..437331f9b13 100644 --- a/src/__generated__/SavedAddressesTestsQuery.graphql.ts +++ b/src/__generated__/SavedAddressesTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 4bd30d9d1cbd59daf65fbe033e8bf414 */ +/* @relayHash 236ca6785dec6683afd20e3dc47b6819 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesTestsQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 3) { + addressConnection(first: 10) { edges { node { id @@ -37,10 +37,12 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 + country city region postalCode phoneNumber + isDefault } } } @@ -110,7 +112,7 @@ return { { "kind": "Literal", "name": "first", - "value": 3 + "value": 10 } ], "concreteType": "UserAddressConnection", @@ -164,6 +166,13 @@ return { "name": "addressLine3", "storageKey": null }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, { "alias": null, "args": null, @@ -191,6 +200,13 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null } ], "storageKey": null @@ -199,7 +215,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:3)" + "storageKey": "addressConnection(first:10)" }, (v1/*: any*/) ], @@ -208,7 +224,7 @@ return { ] }, "params": { - "id": "4bd30d9d1cbd59daf65fbe033e8bf414", + "id": "236ca6785dec6683afd20e3dc47b6819", "metadata": {}, "name": "SavedAddressesTestsQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddresses_me.graphql.ts b/src/__generated__/SavedAddresses_me.graphql.ts index 0b57bf06cb7..8a2368e2e99 100644 --- a/src/__generated__/SavedAddresses_me.graphql.ts +++ b/src/__generated__/SavedAddresses_me.graphql.ts @@ -15,10 +15,12 @@ export type SavedAddresses_me = { readonly addressLine1: string; readonly addressLine2: string | null; readonly addressLine3: string | null; + readonly country: string; readonly city: string; readonly region: string | null; readonly postalCode: string | null; readonly phoneNumber: string | null; + readonly isDefault: boolean; } | null; } | null> | null; } | null; @@ -53,7 +55,7 @@ return { { "kind": "Literal", "name": "first", - "value": 3 + "value": 10 } ], "concreteType": "UserAddressConnection", @@ -113,6 +115,13 @@ return { "name": "addressLine3", "storageKey": null }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, { "alias": null, "args": null, @@ -140,6 +149,13 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null } ], "storageKey": null @@ -148,12 +164,12 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:3)" + "storageKey": "addressConnection(first:10)" } ], "type": "Me", "abstractKey": null }; })(); -(node as any).hash = '30a29267ac711583ee688cb2cfc22a60'; +(node as any).hash = 'f043741b2994f3b2d418f14b69de0cb2'; export default node; diff --git a/src/__generated__/SavedSearchButtonQuery.graphql.ts b/src/__generated__/SavedSearchButtonQuery.graphql.ts new file mode 100644 index 00000000000..57c3ad5d82a --- /dev/null +++ b/src/__generated__/SavedSearchButtonQuery.graphql.ts @@ -0,0 +1,154 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 28d5a3a40691a84f69881d0cf92d2132 */ + +import { ConcreteRequest } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SearchCriteriaAttributes = { + acquireable?: boolean | null; + additionalGeneIDs?: Array | null; + artistID?: string | null; + atAuction?: boolean | null; + attributionClass?: Array | null; + colors?: Array | null; + dimensionRange?: string | null; + height?: string | null; + inquireableOnly?: boolean | null; + locationCities?: Array | null; + majorPeriods?: Array | null; + materialsTerms?: Array | null; + offerable?: boolean | null; + partnerIDs?: Array | null; + priceRange?: string | null; + width?: string | null; +}; +export type SavedSearchButtonQueryVariables = { + criteria: SearchCriteriaAttributes; +}; +export type SavedSearchButtonQueryResponse = { + readonly me: { + readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; + } | null; +}; +export type SavedSearchButtonQuery = { + readonly response: SavedSearchButtonQueryResponse; + readonly variables: SavedSearchButtonQueryVariables; +}; + + + +/* +query SavedSearchButtonQuery( + $criteria: SearchCriteriaAttributes! +) { + me { + ...SavedSearchButton_me_1ff8oJ + id + } +} + +fragment SavedSearchButton_me_1ff8oJ on Me { + savedSearch(criteria: $criteria) { + internalID + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "criteria" + } +], +v1 = [ + { + "kind": "Variable", + "name": "criteria", + "variableName": "criteria" + } +]; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "SavedSearchButtonQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "args": (v1/*: any*/), + "kind": "FragmentSpread", + "name": "SavedSearchButton_me" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "SavedSearchButtonQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "SearchCriteria", + "kind": "LinkedField", + "name": "savedSearch", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + } + ], + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "28d5a3a40691a84f69881d0cf92d2132", + "metadata": {}, + "name": "SavedSearchButtonQuery", + "operationKind": "query", + "text": null + } +}; +})(); +(node as any).hash = '449e4412d84929d7c547ad86d3657c1b'; +export default node; diff --git a/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts b/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts new file mode 100644 index 00000000000..7005594f488 --- /dev/null +++ b/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts @@ -0,0 +1,177 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 12121ce84504f77f46b0c4522e5bab66 */ + +import { ConcreteRequest } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SearchCriteriaAttributes = { + acquireable?: boolean | null; + additionalGeneIDs?: Array | null; + artistID?: string | null; + atAuction?: boolean | null; + attributionClass?: Array | null; + colors?: Array | null; + dimensionRange?: string | null; + height?: string | null; + inquireableOnly?: boolean | null; + locationCities?: Array | null; + majorPeriods?: Array | null; + materialsTerms?: Array | null; + offerable?: boolean | null; + partnerIDs?: Array | null; + priceRange?: string | null; + width?: string | null; +}; +export type SavedSearchButtonTestsQueryVariables = { + criteria: SearchCriteriaAttributes; +}; +export type SavedSearchButtonTestsQueryResponse = { + readonly me: { + readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; + } | null; +}; +export type SavedSearchButtonTestsQuery = { + readonly response: SavedSearchButtonTestsQueryResponse; + readonly variables: SavedSearchButtonTestsQueryVariables; +}; + + + +/* +query SavedSearchButtonTestsQuery( + $criteria: SearchCriteriaAttributes! +) { + me { + ...SavedSearchButton_me_1ff8oJ + id + } +} + +fragment SavedSearchButton_me_1ff8oJ on Me { + savedSearch(criteria: $criteria) { + internalID + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "criteria" + } +], +v1 = [ + { + "kind": "Variable", + "name": "criteria", + "variableName": "criteria" + } +], +v2 = { + "enumValues": null, + "nullable": false, + "plural": false, + "type": "ID" +}; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "SavedSearchButtonTestsQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "args": (v1/*: any*/), + "kind": "FragmentSpread", + "name": "SavedSearchButton_me" + } + ], + "storageKey": null + } + ], + "type": "Query", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "SavedSearchButtonTestsQuery", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Me", + "kind": "LinkedField", + "name": "me", + "plural": false, + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "SearchCriteria", + "kind": "LinkedField", + "name": "savedSearch", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + } + ], + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "12121ce84504f77f46b0c4522e5bab66", + "metadata": { + "relayTestingSelectionTypeInfo": { + "me": { + "enumValues": null, + "nullable": true, + "plural": false, + "type": "Me" + }, + "me.id": (v2/*: any*/), + "me.savedSearch": { + "enumValues": null, + "nullable": true, + "plural": false, + "type": "SearchCriteria" + }, + "me.savedSearch.internalID": (v2/*: any*/) + } + }, + "name": "SavedSearchButtonTestsQuery", + "operationKind": "query", + "text": null + } +}; +})(); +(node as any).hash = 'd369f95a141fe0bd2f24bf5249e083ba'; +export default node; diff --git a/src/__generated__/SavedSearchButton_me.graphql.ts b/src/__generated__/SavedSearchButton_me.graphql.ts new file mode 100644 index 00000000000..e8974bb17a1 --- /dev/null +++ b/src/__generated__/SavedSearchButton_me.graphql.ts @@ -0,0 +1,62 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck + +import { ReaderFragment } from "relay-runtime"; +import { FragmentRefs } from "relay-runtime"; +export type SavedSearchButton_me = { + readonly savedSearch: { + readonly internalID: string; + } | null; + readonly " $refType": "SavedSearchButton_me"; +}; +export type SavedSearchButton_me$data = SavedSearchButton_me; +export type SavedSearchButton_me$key = { + readonly " $data"?: SavedSearchButton_me$data; + readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; +}; + + + +const node: ReaderFragment = { + "argumentDefinitions": [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "criteria" + } + ], + "kind": "Fragment", + "metadata": null, + "name": "SavedSearchButton_me", + "selections": [ + { + "alias": null, + "args": [ + { + "kind": "Variable", + "name": "criteria", + "variableName": "criteria" + } + ], + "concreteType": "SearchCriteria", + "kind": "LinkedField", + "name": "savedSearch", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Me", + "abstractKey": null +}; +(node as any).hash = '47929e285b919e81f21a8625678edd09'; +export default node; diff --git a/src/__generated__/VanityURLEntityQuery.graphql.ts b/src/__generated__/VanityURLEntityQuery.graphql.ts index 65922465c3c..37baaf2bba8 100644 --- a/src/__generated__/VanityURLEntityQuery.graphql.ts +++ b/src/__generated__/VanityURLEntityQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 15e3966a65b4152669828e6221f47660 */ +/* @relayHash d459e8eee18b24b81d8e36de3bd3b46e */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -153,7 +153,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { totalCount edges { node { @@ -339,7 +339,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { edges { __typename } @@ -1274,6 +1274,11 @@ return { "name": "first", "value": 5 }, + { + "kind": "Literal", + "name": "inEditorialFeed", + "value": true + }, { "kind": "Literal", "name": "sort", @@ -1346,7 +1351,7 @@ return { }, (v8/*: any*/) ], - "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -2383,7 +2388,7 @@ return { ] }, "params": { - "id": "15e3966a65b4152669828e6221f47660", + "id": "d459e8eee18b24b81d8e36de3bd3b46e", "metadata": {}, "name": "VanityURLEntityQuery", "operationKind": "query", diff --git a/src/__generated__/addNewAddressMutation.graphql.ts b/src/__generated__/addNewAddressMutation.graphql.ts new file mode 100644 index 00000000000..702b617c60c --- /dev/null +++ b/src/__generated__/addNewAddressMutation.graphql.ts @@ -0,0 +1,290 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 48f9985b022e04924a8464b308ce2ee4 */ + +import { ConcreteRequest } from "relay-runtime"; +export type CreateUserAddressInput = { + attributes: UserAddressAttributes; + clientMutationId?: string | null; +}; +export type UserAddressAttributes = { + addressLine1: string; + addressLine2?: string | null; + addressLine3?: string | null; + city: string; + country: string; + name: string; + phoneNumber?: string | null; + postalCode?: string | null; + region?: string | null; +}; +export type addNewAddressMutationVariables = { + input: CreateUserAddressInput; +}; +export type addNewAddressMutationResponse = { + readonly createUserAddress: { + readonly userAddressOrErrors: { + readonly id?: string; + readonly internalID?: string; + readonly addressLine1?: string; + readonly addressLine2?: string | null; + readonly city?: string; + readonly country?: string; + readonly isDefault?: boolean; + readonly name?: string | null; + readonly phoneNumber?: string | null; + readonly postalCode?: string | null; + readonly region?: string | null; + readonly errors?: ReadonlyArray<{ + readonly message: string; + }>; + }; + } | null; +}; +export type addNewAddressMutation = { + readonly response: addNewAddressMutationResponse; + readonly variables: addNewAddressMutationVariables; +}; + + + +/* +mutation addNewAddressMutation( + $input: CreateUserAddressInput! +) { + createUserAddress(input: $input) { + userAddressOrErrors { + __typename + ... on UserAddress { + id + internalID + addressLine1 + addressLine2 + city + country + isDefault + name + phoneNumber + postalCode + region + } + ... on Errors { + errors { + message + } + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "input" + } +], +v1 = [ + { + "kind": "Variable", + "name": "input", + "variableName": "input" + } +], +v2 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phoneNumber", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + } + ], + "type": "UserAddress", + "abstractKey": null +}, +v3 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Error", + "kind": "LinkedField", + "name": "errors", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "message", + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Errors", + "abstractKey": null +}; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "addNewAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "CreateUserAddressPayload", + "kind": "LinkedField", + "name": "createUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Mutation", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "addNewAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "CreateUserAddressPayload", + "kind": "LinkedField", + "name": "createUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + }, + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "48f9985b022e04924a8464b308ce2ee4", + "metadata": {}, + "name": "addNewAddressMutation", + "operationKind": "mutation", + "text": null + } +}; +})(); +(node as any).hash = '98ac48306b7d0e1a4ad2ecb4ea70e78b'; +export default node; diff --git a/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts b/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts new file mode 100644 index 00000000000..01049a54e0f --- /dev/null +++ b/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts @@ -0,0 +1,288 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash c575d1e45a866f470dcf45a28beeb522 */ + +import { ConcreteRequest } from "relay-runtime"; +export type DeleteUserAddressInput = { + clientMutationId?: string | null; + userAddressID: string; +}; +export type deleteSavedAddressDeleteUserAddressMutationVariables = { + input: DeleteUserAddressInput; +}; +export type deleteSavedAddressDeleteUserAddressMutationResponse = { + readonly deleteUserAddress: { + readonly userAddressOrErrors: { + readonly id?: string; + readonly internalID?: string; + readonly name?: string | null; + readonly addressLine1?: string; + readonly addressLine2?: string | null; + readonly addressLine3?: string | null; + readonly city?: string; + readonly region?: string | null; + readonly postalCode?: string | null; + readonly phoneNumber?: string | null; + readonly isDefault?: boolean; + readonly errors?: ReadonlyArray<{ + readonly code: string; + readonly message: string; + }>; + }; + } | null; +}; +export type deleteSavedAddressDeleteUserAddressMutation = { + readonly response: deleteSavedAddressDeleteUserAddressMutationResponse; + readonly variables: deleteSavedAddressDeleteUserAddressMutationVariables; +}; + + + +/* +mutation deleteSavedAddressDeleteUserAddressMutation( + $input: DeleteUserAddressInput! +) { + deleteUserAddress(input: $input) { + userAddressOrErrors { + __typename + ... on UserAddress { + id + internalID + name + addressLine1 + addressLine2 + addressLine3 + city + region + postalCode + phoneNumber + isDefault + } + ... on Errors { + errors { + code + message + } + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "input" + } +], +v1 = [ + { + "kind": "Variable", + "name": "input", + "variableName": "input" + } +], +v2 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine3", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phoneNumber", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + } + ], + "type": "UserAddress", + "abstractKey": null +}, +v3 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Error", + "kind": "LinkedField", + "name": "errors", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "code", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "message", + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Errors", + "abstractKey": null +}; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "deleteSavedAddressDeleteUserAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "DeleteUserAddressPayload", + "kind": "LinkedField", + "name": "deleteUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Mutation", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "deleteSavedAddressDeleteUserAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "DeleteUserAddressPayload", + "kind": "LinkedField", + "name": "deleteUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + }, + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "c575d1e45a866f470dcf45a28beeb522", + "metadata": {}, + "name": "deleteSavedAddressDeleteUserAddressMutation", + "operationKind": "mutation", + "text": null + } +}; +})(); +(node as any).hash = '919ab63c8176f0ebdd4002b0055c6826'; +export default node; diff --git a/src/__generated__/setAsDefaultAddressMutation.graphql.ts b/src/__generated__/setAsDefaultAddressMutation.graphql.ts new file mode 100644 index 00000000000..b48928d51ff --- /dev/null +++ b/src/__generated__/setAsDefaultAddressMutation.graphql.ts @@ -0,0 +1,207 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 1b9e47d6d72070bbc2212342174e93d4 */ + +import { ConcreteRequest } from "relay-runtime"; +export type UpdateUserDefaultAddressInput = { + clientMutationId?: string | null; + userAddressID: string; +}; +export type setAsDefaultAddressMutationVariables = { + input: UpdateUserDefaultAddressInput; +}; +export type setAsDefaultAddressMutationResponse = { + readonly updateUserDefaultAddress: { + readonly userAddressOrErrors: { + readonly id?: string; + readonly internalID?: string; + readonly isDefault?: boolean; + readonly errors?: ReadonlyArray<{ + readonly message: string; + }>; + }; + } | null; +}; +export type setAsDefaultAddressMutation = { + readonly response: setAsDefaultAddressMutationResponse; + readonly variables: setAsDefaultAddressMutationVariables; +}; + + + +/* +mutation setAsDefaultAddressMutation( + $input: UpdateUserDefaultAddressInput! +) { + updateUserDefaultAddress(input: $input) { + userAddressOrErrors { + __typename + ... on UserAddress { + id + internalID + isDefault + } + ... on Errors { + errors { + message + } + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "input" + } +], +v1 = [ + { + "kind": "Variable", + "name": "input", + "variableName": "input" + } +], +v2 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + } + ], + "type": "UserAddress", + "abstractKey": null +}, +v3 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Error", + "kind": "LinkedField", + "name": "errors", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "message", + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Errors", + "abstractKey": null +}; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "setAsDefaultAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "UpdateUserDefaultAddressPayload", + "kind": "LinkedField", + "name": "updateUserDefaultAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Mutation", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "setAsDefaultAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "UpdateUserDefaultAddressPayload", + "kind": "LinkedField", + "name": "updateUserDefaultAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + }, + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "1b9e47d6d72070bbc2212342174e93d4", + "metadata": {}, + "name": "setAsDefaultAddressMutation", + "operationKind": "mutation", + "text": null + } +}; +})(); +(node as any).hash = 'fcb01f6b87f7b3d7148540e9ecda229f'; +export default node; diff --git a/src/__generated__/updateUserAddressMutation.graphql.ts b/src/__generated__/updateUserAddressMutation.graphql.ts new file mode 100644 index 00000000000..4377a950136 --- /dev/null +++ b/src/__generated__/updateUserAddressMutation.graphql.ts @@ -0,0 +1,300 @@ +/* tslint:disable */ +/* eslint-disable */ +// @ts-nocheck +/* @relayHash 42186652b7be904f8449c97721e3f30b */ + +import { ConcreteRequest } from "relay-runtime"; +export type UpdateUserAddressInput = { + attributes: UserAddressAttributes; + clientMutationId?: string | null; + userAddressID: string; +}; +export type UserAddressAttributes = { + addressLine1: string; + addressLine2?: string | null; + addressLine3?: string | null; + city: string; + country: string; + name: string; + phoneNumber?: string | null; + postalCode?: string | null; + region?: string | null; +}; +export type updateUserAddressMutationVariables = { + input: UpdateUserAddressInput; +}; +export type updateUserAddressMutationResponse = { + readonly updateUserAddress: { + readonly userAddressOrErrors: { + readonly id?: string; + readonly internalID?: string; + readonly name?: string | null; + readonly addressLine1?: string; + readonly addressLine2?: string | null; + readonly isDefault?: boolean; + readonly phoneNumber?: string | null; + readonly city?: string; + readonly region?: string | null; + readonly postalCode?: string | null; + readonly country?: string; + readonly errors?: ReadonlyArray<{ + readonly code: string; + readonly message: string; + }>; + }; + } | null; +}; +export type updateUserAddressMutation = { + readonly response: updateUserAddressMutationResponse; + readonly variables: updateUserAddressMutationVariables; +}; + + + +/* +mutation updateUserAddressMutation( + $input: UpdateUserAddressInput! +) { + updateUserAddress(input: $input) { + userAddressOrErrors { + __typename + ... on UserAddress { + id + internalID + name + addressLine1 + addressLine2 + isDefault + phoneNumber + city + region + postalCode + country + } + ... on Errors { + errors { + code + message + } + } + } + } +} +*/ + +const node: ConcreteRequest = (function(){ +var v0 = [ + { + "defaultValue": null, + "kind": "LocalArgument", + "name": "input" + } +], +v1 = [ + { + "kind": "Variable", + "name": "input", + "variableName": "input" + } +], +v2 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "id", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "internalID", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "name", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine1", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "addressLine2", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "isDefault", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "phoneNumber", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "city", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "region", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "postalCode", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "country", + "storageKey": null + } + ], + "type": "UserAddress", + "abstractKey": null +}, +v3 = { + "kind": "InlineFragment", + "selections": [ + { + "alias": null, + "args": null, + "concreteType": "Error", + "kind": "LinkedField", + "name": "errors", + "plural": true, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "code", + "storageKey": null + }, + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "message", + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Errors", + "abstractKey": null +}; +return { + "fragment": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Fragment", + "metadata": null, + "name": "updateUserAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "UpdateUserAddressPayload", + "kind": "LinkedField", + "name": "updateUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ], + "type": "Mutation", + "abstractKey": null + }, + "kind": "Request", + "operation": { + "argumentDefinitions": (v0/*: any*/), + "kind": "Operation", + "name": "updateUserAddressMutation", + "selections": [ + { + "alias": null, + "args": (v1/*: any*/), + "concreteType": "UpdateUserAddressPayload", + "kind": "LinkedField", + "name": "updateUserAddress", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "concreteType": null, + "kind": "LinkedField", + "name": "userAddressOrErrors", + "plural": false, + "selections": [ + { + "alias": null, + "args": null, + "kind": "ScalarField", + "name": "__typename", + "storageKey": null + }, + (v2/*: any*/), + (v3/*: any*/) + ], + "storageKey": null + } + ], + "storageKey": null + } + ] + }, + "params": { + "id": "42186652b7be904f8449c97721e3f30b", + "metadata": {}, + "name": "updateUserAddressMutation", + "operationKind": "mutation", + "text": null + } +}; +})(); +(node as any).hash = '993b108854d372333cb2260bce841108'; +export default node; diff --git a/src/lib/AndroidApp.tsx b/src/lib/AndroidApp.tsx index 5ceb3a357b5..2dab47dbaaf 100644 --- a/src/lib/AndroidApp.tsx +++ b/src/lib/AndroidApp.tsx @@ -2,7 +2,7 @@ import { GoogleSignin } from "@react-native-google-signin/google-signin" import { getCurrentEmissionState, GlobalStore } from "lib/store/GlobalStore" import { AdminMenuWrapper } from "lib/utils/AdminMenuWrapper" import { addTrackingProvider, track } from "lib/utils/track" -import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" +import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { useDeepLinks } from "lib/utils/useDeepLinks" import { useStripeConfig } from "lib/utils/useStripeConfig" import React, { useEffect } from "react" @@ -20,7 +20,7 @@ import { Onboarding } from "./Scenes/Onboarding/Onboarding" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" import { AnalyticsConstants } from "./utils/track/constants" -addTrackingProvider("segment rn android", SegmentTrackingProvider) +addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) addTrackingProvider("console", ConsoleTrackingProvider) if (UIManager.setLayoutAnimationEnabledExperimental) { diff --git a/src/lib/AppProviders.tsx b/src/lib/AppProviders.tsx index 7c36823ea54..d4e928d0b50 100644 --- a/src/lib/AppProviders.tsx +++ b/src/lib/AppProviders.tsx @@ -12,19 +12,17 @@ import { ProvideScreenDimensions } from "./utils/useScreenDimensions" export const AppProviders = ({ children }: { children: ReactNode }) => ( - - - - - - <_FancyModalPageWrapper> - {children} - - - - - - + + + + + <_FancyModalPageWrapper> + {children} + + + + + ) diff --git a/src/lib/AppRegistry.tsx b/src/lib/AppRegistry.tsx index ef4961c8696..a9d4c4eecd7 100644 --- a/src/lib/AppRegistry.tsx +++ b/src/lib/AppRegistry.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from "react" -import { AppRegistry, LogBox, Platform, View } from "react-native" +import { Appearance, AppRegistry, LogBox, Platform, View } from "react-native" import { SafeAreaInsets } from "lib/types/SafeAreaInsets" import { BidFlow } from "./Containers/BidFlow" @@ -63,6 +63,7 @@ import { SaleQueryRenderer } from "./Scenes/Sale" import { SaleFAQ } from "./Scenes/SaleFAQ/SaleFAQ" import { SaleInfoQueryRenderer } from "./Scenes/SaleInfo" import { SavedAddressesQueryRenderer } from "./Scenes/SavedAddresses/SavedAddresses" +import { SavedAddressesFormQueryRenderer } from "./Scenes/SavedAddresses/SavedAddressesForm" import { SalesQueryRenderer } from "./Scenes/Sales" import { Search } from "./Scenes/Search" @@ -70,12 +71,12 @@ import { ShowMoreInfoQueryRenderer, ShowQueryRenderer } from "./Scenes/Show" import { VanityURLEntityRenderer } from "./Scenes/VanityURL/VanityURLEntity" import { GoogleSignin } from "@react-native-google-signin/google-signin" +import StorybookUI from "../storybook/storybook-ui" import { AppProviders } from "./AppProviders" import { ArtsyKeyboardAvoidingViewContext } from "./Components/ArtsyKeyboardAvoidingView" import { ArtsyReactWebViewPage, useWebViewCookies } from "./Components/ArtsyReactWebView" import { RegistrationFlow } from "./Containers/RegistrationFlow" import { useSentryConfig } from "./ErrorReporting" -import { NativeAnalyticsProvider } from "./NativeModules/Events" import { ArticlesQueryRenderer } from "./Scenes/Articles/Articles" import { AuctionResultQueryRenderer } from "./Scenes/AuctionResult/AuctionResult" import { AuctionResultsForYouQueryRenderer } from "./Scenes/AuctionResultsForYou/AuctionResultsForYou" @@ -96,6 +97,8 @@ import { GlobalStore, useFeatureFlag, useSelectedTab } from "./store/GlobalStore import { AdminMenu } from "./utils/AdminMenu" import { addTrackingProvider, Schema, screenTrack, track } from "./utils/track" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" +import { AnalyticsConstants } from "./utils/track/constants" +import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "./utils/track/SegmentTrackingProvider" import { useScreenDimensions } from "./utils/useScreenDimensions" import { useStripeConfig } from "./utils/useStripeConfig" @@ -114,7 +117,7 @@ LogBox.ignoreLogs([ "Picker has been extracted", ]) -addTrackingProvider("native ios analytics", NativeAnalyticsProvider) +addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) addTrackingProvider("console", ConsoleTrackingProvider) interface ArtworkProps { @@ -363,6 +366,10 @@ export const modules = defineModules({ Show: reactModule(ShowQueryRenderer, { fullBleed: true }), ShowMoreInfo: reactModule(ShowMoreInfoQueryRenderer), SavedAddresses: reactModule(SavedAddressesQueryRenderer), + SavedAddressesForm: reactModule(SavedAddressesFormQueryRenderer, { + alwaysPresentModally: true, + hasOwnModalCloseButton: false, + }), VanityURLEntity: reactModule(VanityURLEntityRenderer, { fullBleed: true }), ViewingRoom: reactModule(ViewingRoomQueryRenderer, { fullBleed: true }), ViewingRoomArtwork: reactModule(ViewingRoomArtworkQueryRenderer), @@ -373,6 +380,7 @@ export const modules = defineModules({ }), WorksForYou: reactModule(WorksForYouQueryRenderer), LotsByArtistsYouFollow: reactModule(LotsByArtistsYouFollowQueryRenderer), + Storybook: reactModule(StorybookUI, { fullBleed: true, hidesBackButton: true }), }) // Register react modules with the app registry @@ -390,6 +398,20 @@ const Main: React.FC<{}> = track()(({}) => { GoogleSignin.configure({ webClientId: "673710093763-hbj813nj4h3h183c4ildmu8vvqc0ek4h.apps.googleusercontent.com", }) + if (Platform.OS === "ios") { + const scheme = Appearance.getColorScheme() + SegmentTrackingProvider.identify?.(null, { + [AnalyticsConstants.UserInterfaceStyle.key]: (() => { + switch (scheme) { + case "light": + return AnalyticsConstants.UserInterfaceStyle.value.Light + case "dark": + return AnalyticsConstants.UserInterfaceStyle.value.Dark + } + return AnalyticsConstants.UserInterfaceStyle.value.Unspecified + })(), + }) + } }, []) const showNewOnboarding = useFeatureFlag("AREnableNewOnboardingFlow") const isHydrated = GlobalStore.useAppState((state) => state.sessionState.isHydrated) @@ -421,5 +443,5 @@ const Main: React.FC<{}> = track()(({}) => { }) if (Platform.OS === "ios") { - register("Main", Main, { fullBleed: true, isMainView: true }) + register("Artsy", Main, { fullBleed: true, isMainView: true }) } diff --git a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx index d80c9b1102b..069b85d80ee 100644 --- a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx @@ -8,7 +8,7 @@ import { prepareFilterArtworksParamsForInput, } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" import { ArtworkFiltersStoreProvider, ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { ORDERED_ARTWORK_SORTS } from 'lib/Components/ArtworkFilter/Filters/SortOptions' +import { ORDERED_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters/SortOptions" import { convertSavedSearchCriteriaToFilterParams } from "lib/Components/ArtworkFilter/SavedSearch/convertersToFilterParams" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" @@ -23,11 +23,13 @@ import { PAGE_SIZE } from "lib/data/constants" import { useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Separator, Spacer } from "palette" +import { Box, FilterIcon, Flex, Separator, Spacer, Text, TouchableHighlightColor } from "palette" import React, { useContext, useEffect, useMemo, useState } from "react" +import { Platform } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import { SavedSearchBannerQueryRender } from "./SavedSearchBanner" +import { SavedSearchButtonQueryRenderer } from "./SavedSearchButton" interface ArtworksGridProps extends InfiniteScrollGridProps { artist: ArtistArtworks_artist @@ -95,7 +97,9 @@ const ArtistArtworksContainer: React.FC { const tracking = useTracking() - const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") + const enableSavedSearch = + Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") + const enableSavedSearchV2 = useFeatureFlag("AREnableSavedSearchV2") const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const setInitialFilterStateAction = ArtworksFiltersStore.useStoreActions((state) => state.setInitialFilterStateAction) @@ -131,12 +135,9 @@ const ArtistArtworksContainer: React.FC sortEntity.paramValue === "-published_at") + const sortFilterItem = ORDERED_ARTWORK_SORTS.find((sortEntity) => sortEntity.paramValue === "-published_at") - setInitialFilterStateAction([ - ...params, - sortFilterItem!, - ]) + setInitialFilterStateAction([...params, sortFilterItem!]) } }, []) @@ -158,17 +159,44 @@ const ArtistArtworksContainer: React.FC { setJSX( - - - {!!shouldShowSavedSearchBanner && ( - - - - + {enableSavedSearchV2 ? ( + <> + + ( + + + + Sort & Filter + + + )} + /> + + + + + ) : ( + <> + + + {!!shouldShowSavedSearchBanner && ( + + + + + )} + )} ) - }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams]) + }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams, enableSavedSearchV2]) const filteredArtworks = () => { if (artworksCount === 0) { diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx index 18b6d5ac751..ed118e90cc3 100644 --- a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx @@ -12,7 +12,8 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { PushAuthorizationStatus } from "lib/Scenes/MyProfile/MyProfilePushNotifications" import { Button, Flex, Text } from "palette" import React, { useState } from "react" -import { Alert, Linking, Platform } from "react-native" +import { Alert, AlertButton, Linking, Platform } from "react-native" +import PushNotification from "react-native-push-notification" import { commitMutation, createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" import { useTracking } from "react-tracking" @@ -56,7 +57,6 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Sorry, an error occured.", message: "Please try again.", - placement: "top", type: "error", }) } @@ -85,7 +85,6 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been set.", message: "We will send you a push notification once new works are added.", - placement: "top", }) trackToggledSavedSearchEvent(true, response.createSavedSearch?.savedSearchOrErrors.internalID) }, @@ -120,7 +119,6 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been removed.", message: "Don't worry, you can always create a new one.", - placement: "top", }) trackToggledSavedSearchEvent(false, response.disableSavedSearch?.savedSearchOrErrors.internalID) }, @@ -131,47 +129,68 @@ export const SavedSearchBanner: React.FC = ({ }) } + const showAlert = (permissionsDenied: boolean) => { + if (permissionsDenied) { + const buttons: AlertButton[] = [ + { + text: "Settings", + onPress: () => + Platform.OS === "android" ? Linking.openSettings() : Linking.openURL("App-prefs:NOTIFICATIONS_ID"), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + Alert.alert( + "Artsy would like to send you notifications", + `To receive notifications for your alerts, you will need to enable them in your ${Platform.select({ + ios: "iOS", + android: "android", + default: "device", + })} Settings. ${Platform.select({ + ios: `Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, + default: "", + })} `, + Platform.OS === "ios" ? buttons : buttons.reverse() + ) + } else { + // permissions not determined: Android should never need this + Alert.alert( + "Artsy would like to send you notifications", + "We need your permission to send notifications on alerts you have created.", + [ + { + text: "Proceed", + onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + ) + } + } + const checkNotificationPermissionsAndCreate = () => { if (Platform.OS === "android") { - // TODO:- When android Push notification setup is ready add check for permission - // NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled(); - createSavedSearch() - return + PushNotification.checkPermissions((permissions) => { + if (!permissions.alert) { + return showAlert(true) + } + createSavedSearch() + return + }) } LegacyNativeModules.ARTemporaryAPIModule.fetchNotificationPermissions((_, result: PushAuthorizationStatus) => { switch (result) { case PushAuthorizationStatus.Authorized: return createSavedSearch() case PushAuthorizationStatus.Denied: - return Alert.alert( - "Artsy would like to send you notifications", - `To receive notifications for your alerts, you will need to enable them in your iOS Settings. Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, - [ - { - text: "Settings", - onPress: () => Linking.openURL("App-prefs:NOTIFICATIONS_ID"), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - ) + return showAlert(true) case PushAuthorizationStatus.NotDetermined: - return Alert.alert( - "Artsy would like to send you notifications", - "We need your permission to send notifications on alerts you have created.", - [ - { - text: "Proceed", - onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - ) + return showAlert(false) default: return } diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx new file mode 100644 index 00000000000..cacb2af63a3 --- /dev/null +++ b/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx @@ -0,0 +1,99 @@ +import { captureMessage } from "@sentry/react-native" +import { SavedSearchButton_me } from "__generated__/SavedSearchButton_me.graphql" +import { SavedSearchButtonQuery } from "__generated__/SavedSearchButtonQuery.graphql" +import { FilterParams, prepareFilterParamsForSaveSearchInput } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" +import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { BellIcon, Button } from "palette" +import React from "react" +import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" + +interface SavedSearchButtonProps { + me?: SavedSearchButton_me | null + loading?: boolean + attributes: SearchCriteriaAttributes +} + +interface SavedSearchButtonQueryRendererProps { + filters: FilterParams + artistId: string +} + +export const SavedSearchButton: React.FC = ({ me, loading, attributes }) => { + const isSavedSearch = !!me?.savedSearch?.internalID + const emptyAttributes = Object.keys(attributes).length === 0 + + const handlePress = () => { + console.log("saved search button pressed") + } + + return ( + + ) +} + +export const SavedSearchButtonFragmentContainer = createFragmentContainer(SavedSearchButton, { + me: graphql` + fragment SavedSearchButton_me on Me @argumentDefinitions(criteria: { type: "SearchCriteriaAttributes" }) { + savedSearch(criteria: $criteria) { + internalID + } + } + `, +}) + +export const SavedSearchButtonQueryRenderer: React.FC = (props) => { + const { filters, artistId } = props + const input = prepareFilterParamsForSaveSearchInput(filters) + const attributes: SearchCriteriaAttributes = { + artistID: artistId, + ...input, + } + + if (Object.keys(input).length === 0) { + return + } + + return ( + + environment={defaultEnvironment} + query={graphql` + query SavedSearchButtonQuery($criteria: SearchCriteriaAttributes!) { + me { + ...SavedSearchButton_me @arguments(criteria: $criteria) + } + } + `} + render={({ props: relayProps, error }) => { + if (error) { + if (__DEV__) { + console.error(error) + } else { + captureMessage(error.stack!) + } + } + + return ( + + ) + }} + variables={{ + criteria: attributes, + }} + /> + ) +} diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx index e9585218064..42a210c6438 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx @@ -1,6 +1,7 @@ import { ArtistCollectionsRailTestsQueryRawResponse } from "__generated__/ArtistCollectionsRailTestsQuery.graphql" import { GenericArtistSeriesRail } from "lib/Components/GenericArtistSeriesRail" import { CardRailCard } from "lib/Components/Home/CardRailCard" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -17,9 +18,11 @@ describe("Artist Series Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - + + + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx index 75f8bc52e1d..ae7ec6def3d 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx @@ -2,6 +2,7 @@ import { ArtistNotableWorksRailTestsQueryRawResponse } from "__generated__/Artis import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import { ArtistNotableWorksRailFragmentContainer } from "lib/Components/Artist/ArtistArtworks/ArtistNotableWorksRail" import { ArtworkTileRailCard } from "lib/Components/ArtworkTileRail" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -14,9 +15,11 @@ describe("Notable Works Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - + + + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx new file mode 100644 index 00000000000..c8b48398f3d --- /dev/null +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx @@ -0,0 +1,80 @@ +import { SearchCriteriaAttributes } from "__generated__/SavedSearchBannerQuery.graphql" +import { SavedSearchButtonTestsQuery } from "__generated__/SavedSearchButtonTestsQuery.graphql" +import { mockEnvironmentPayload } from 'lib/tests/mockEnvironmentPayload' +import { renderWithWrappers } from 'lib/tests/renderWithWrappers' +import { Button } from 'palette' +import React from "react" +import { graphql, QueryRenderer } from "react-relay" +import { createMockEnvironment } from "relay-test-utils" +import { SavedSearchButtonFragmentContainer as SavedSearchButton } from "../SavedSearchButton" + +jest.unmock("react-relay") + +const mockedAttributes: SearchCriteriaAttributes = { + acquireable: true, +} + +describe("SavedSearchButton", () => { + let mockEnvironment: ReturnType + + beforeEach(() => { + mockEnvironment = createMockEnvironment() + }) + + const TestRenderer = ({ attributes = mockedAttributes }) => { + return ( + + environment={mockEnvironment} + query={graphql` + query SavedSearchButtonTestsQuery($criteria: SearchCriteriaAttributes!) @relay_test_operation { + me { + ...SavedSearchButton_me @arguments(criteria: $criteria) + } + } + `} + render={({ props, error }) => ( + + )} + variables={{ + criteria: attributes, + }} + /> + ) + } + + it("renders loading state if request didn't return data and an error", () => { + const tree = renderWithWrappers() + + expect(tree.root.findByType(Button).props.loading).toBe(true) + }) + + it("renders enabled button if criteria are not saved", () => { + const tree = renderWithWrappers() + + mockEnvironmentPayload(mockEnvironment, { + Me: () => ({ + savedSearch: null, + }), + }) + + expect(tree.root.findByType(Button).props.disabled).toBe(false) + }) + + it("renders disabled button if criteria are saved", () => { + const tree = renderWithWrappers() + + mockEnvironmentPayload(mockEnvironment, { + Me: () => ({ + savedSearch: { + internalID: 'internalID' + }, + }), + }) + + expect(tree.root.findByType(Button).props.disabled).toBe(true) + }) +}) diff --git a/src/lib/Components/Artist/ArtistHeader.tsx b/src/lib/Components/Artist/ArtistHeader.tsx index 02aa7fde3af..3da6552f30d 100644 --- a/src/lib/Components/Artist/ArtistHeader.tsx +++ b/src/lib/Components/Artist/ArtistHeader.tsx @@ -10,6 +10,8 @@ import { useTracking } from "react-tracking" import styled from "styled-components/native" import { Schema } from "../../utils/track" +export const ARTIST_HEADER_HEIGHT = 156 + interface Props { artist: ArtistHeader_artist relay: RelayProp diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx index 9549a7c5e64..036341a2293 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx @@ -4,6 +4,7 @@ import { AnimatedArtworkFilterButton, ArtworkFilterNavigator, FilterModalMode } import { ArtworkFiltersStoreProvider } from "lib/Components/ArtworkFilter/ArtworkFilterStore" import { useOnTabFocusedEffect } from "lib/Components/StickyTabPage/StickyTabPage" import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabPageScrollView" +import { SCROLL_UP_TO_SHOW_THRESHOLD } from "lib/utils/hideBackButtonOnScroll" import { Schema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import React, { useCallback, useRef, useState } from "react" @@ -11,6 +12,7 @@ import { FlatList, NativeScrollEvent, NativeSyntheticEvent, View } from "react-n import { createFragmentContainer, graphql, RelayProp } from "react-relay" import { useTracking } from "react-tracking" import { ReactElement } from "simple-markdown" +import { ARTIST_HEADER_HEIGHT } from "../ArtistHeader" import { ArtistInsightsAuctionResultsPaginationContainer } from "./ArtistInsightsAuctionResults" import { MarketStatsQueryRenderer } from "./MarketStats" @@ -42,6 +44,7 @@ export const ArtistInsights: React.FC = (props) => { const [isFilterButtonVisible, setIsFilterButtonVisible] = useState(false) const [isFilterModalVisible, setIsFilterModalVisible] = useState(false) const auctionResultsYCoordinate = useRef(0) + const contentYScrollOffset = useRef(0) const openFilterModal = () => { tracking.trackEvent(tracks.openFilter(artist.internalID, artist.slug)) @@ -54,11 +57,19 @@ export const ArtistInsights: React.FC = (props) => { } const scrollToTop = useCallback(() => { - flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultsYCoordinate.current }) - }, [auctionResultsYCoordinate]) + let auctionResultYOffset = auctionResultsYCoordinate.current + + // if we scroll up less than SCROLL_UP_TO_SHOW_THRESHOLD the header won't expand and we need another offset + if (contentYScrollOffset.current - 2 * auctionResultYOffset <= SCROLL_UP_TO_SHOW_THRESHOLD) { + auctionResultYOffset += ARTIST_HEADER_HEIGHT + } + flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultYOffset }) + }, [auctionResultsYCoordinate, contentYScrollOffset]) // Show or hide floating filter button depending on the scroll position const onScrollEndDrag = useCallback((event: NativeSyntheticEvent) => { + contentYScrollOffset.current = event.nativeEvent.contentOffset.y + if (event.nativeEvent.contentOffset.y > FILTER_BUTTON_OFFSET) { setIsFilterButtonVisible(true) return diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx index 465782195d6..6b1f9641d1e 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx @@ -10,14 +10,15 @@ import { PAGE_SIZE } from "lib/data/constants" import { navigate } from "lib/navigation/navigate" import { useFeatureFlag } from "lib/store/GlobalStore" import { extractNodes } from "lib/utils/extractNodes" -import { Box, bullet, color, Flex, Separator, Spacer, Text } from "palette" -import React, { useCallback, useEffect, useState } from "react" +import { debounce } from "lodash" +import { Box, bullet, Flex, Separator, Spacer, Text, useColor } from "palette" +import React, { useCallback, useEffect, useMemo, useState } from "react" import { FlatList, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import styled from "styled-components/native" import { useScreenDimensions } from "../../../utils/useScreenDimensions" -import { KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" +import { DEBOUNCE_DELAY, KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" import { AuctionResultFragmentContainer } from "../../Lists/AuctionResultListItem" interface Props { @@ -27,6 +28,7 @@ interface Props { } const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollToTop }) => { + const color = useColor() const tracking = useTracking() const showKeywordFilter = useFeatureFlag("AREnableAuctionResultsKeywordFilter") @@ -35,9 +37,17 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const setFilterTypeAction = ArtworksFiltersStore.useStoreActions((state) => state.setFilterTypeAction) const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const applyFilters = ArtworksFiltersStore.useStoreState((state) => state.applyFilters) - const filterParams = filterArtworksParams(appliedFilters, "auctionResult") + const keywordFilterValue = appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword)?.paramValue + const isKeywordFilterActive = !!keywordFilterValue + + const [keywordFilterRefetching, setKeywordFilterRefetching] = useState(false) + const endKeywordFilterRefetching = useMemo( + () => debounce(() => setKeywordFilterRefetching(false), DEBOUNCE_DELAY), + [] + ) + useEffect(() => { setFilterTypeAction("auctionResult") }, []) @@ -47,6 +57,8 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo relay.refetchConnection( PAGE_SIZE, (error) => { + endKeywordFilterRefetching() + if (error) { throw new Error("ArtistInsights/ArtistAuctionResults filter error: " + error.message) } @@ -123,11 +135,11 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const resultsString = Number(artist.auctionResultsConnection?.totalCount) === 1 ? "result" : "results" - const isKeywordFilterActive = !!appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword) - ?.paramValue - return ( - + = ({ artist, relay, scrollTo {resultsString} {bullet} Sorted by {getSortDescription()?.toLowerCase()} - {!!showKeywordFilter && } + {!!showKeywordFilter && ( + setKeywordFilterRefetching(true)} + /> + )} {auctionResults.length ? ( { const { is_followed, initials, image, href, name, nationality, birthday, deathday } = artist const imageURl = image && image.url - const TouchableComponent = withFeedback ? Touchable : TouchableWithoutFeedback - if (!name) { return null } return ( - { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - useDefaultTouchable - > - - - - - - - - - + + {({ color }) => ( + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + > + + + + + + + + + + )} + ) } } diff --git a/src/lib/Components/ArtsyReactWebView.tsx b/src/lib/Components/ArtsyReactWebView.tsx index 7458d13b752..59a402d2920 100644 --- a/src/lib/Components/ArtsyReactWebView.tsx +++ b/src/lib/Components/ArtsyReactWebView.tsx @@ -1,11 +1,11 @@ import { OwnerType } from "@artsy/cohesion" -import { color } from "@artsy/palette-tokens" import { addBreadcrumb } from "@sentry/react-native" import { dismissModal, goBack, navigate } from "lib/navigation/navigate" import { matchRoute } from "lib/navigation/routes" import { getCurrentEmissionState, GlobalStore, useEnvironment, useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" +import { useColor } from "palette/hooks" import { parse as parseQueryString } from "query-string" import React, { useEffect, useRef, useState } from "react" import { Platform, View } from "react-native" @@ -176,9 +176,12 @@ export const ArtsyReactWebView = React.forwardRef< }) const ProgressBar: React.FC<{ loadProgress: number | null }> = ({ loadProgress }) => { + const color = useColor() + if (loadProgress === null) { return null } + const progressPercent = Math.max(loadProgress * 100, 2) return ( > = ({ navigation, route }) => { + const space = useSpace() const tracking = useTracking() const { closeModal, id, mode, slug, title = "Sort & Filter" } = route.params @@ -293,7 +295,7 @@ export const getFilterScreenSortByMode = (mode: FilterModalMode) => ( } export const FilterArtworkButton = styled(Flex)` - background-color: ${color("black100")}; + background-color: ${themeGet("colors.black100")}; align-items: center; justify-content: center; flex-direction: row; @@ -370,11 +372,11 @@ export const AnimatedArtworkFilterButton: React.FC {} export const ColorsOptionsScreen: React.FC = ({ navigation }) => { + const space = useSpace() const { layout, handleLayout } = useLayout() const { aggregation } = useArtworkFiltersAggregation({ diff --git a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx index 8c6110b4258..9360c8158e5 100644 --- a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx @@ -1,4 +1,4 @@ -import { color } from "palette" +import { useColor } from "palette/hooks" import React from "react" import { Switch, View } from "react-native" @@ -10,6 +10,7 @@ interface FilterToggleButtonProps { export const FilterToggleButton: React.FC = (props) => { const { onChange, value, disabled } = props + const color = useColor() return ( diff --git a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx index 23eab0b5eba..a0c1538d7f4 100644 --- a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx @@ -4,18 +4,28 @@ import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilter import { Input } from "lib/Components/Input/Input" import SearchIcon from "lib/Icons/SearchIcon" import { OwnerEntityTypes, PageNames } from "lib/utils/track/schema" -import { debounce } from "lodash" +import { debounce, throttle } from "lodash" import React, { useEffect, useMemo, useRef } from "react" +import { Platform } from "react-native" import { useTracking } from "react-tracking" -const DEBOUNCE_DELAY = 600 +export const DEBOUNCE_DELAY = 400 interface KeywordFilterProps { artistId: string artistSlug: string + onFocus?: () => void + loading?: boolean + onTypingStart?: () => void } -export const KeywordFilter: React.FC = ({ artistId, artistSlug }) => { +export const KeywordFilter: React.FC = ({ + artistId, + artistSlug, + loading, + onFocus, + onTypingStart, +}) => { const { trackEvent } = useTracking() const appliedFiltersState = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) @@ -38,6 +48,7 @@ export const KeywordFilter: React.FC = ({ artistId, artistSl } const handleChangeText = useMemo(() => debounce(updateKeywordFilter, DEBOUNCE_DELAY), [appliedFiltersParams]) + const handleTypingStart = useMemo(() => throttle(() => onTypingStart?.(), DEBOUNCE_DELAY), [onTypingStart]) // clear input text when keyword filter is reseted useEffect(() => { @@ -56,14 +67,25 @@ export const KeywordFilter: React.FC = ({ artistId, artistSl return () => handleChangeText.cancel() }, []) + // Truncate placeholder for Android to prevent new line. + const placeholder = + Platform.OS === "android" && loading + ? "Search by artwork title, series..." + : "Search by artwork title, series, or description" + return ( } - placeholder="Search by artwork title, series, or description" - onChangeText={handleChangeText} + placeholder={placeholder} + onChangeText={(e) => { + handleTypingStart() + handleChangeText(e) + }} autoCorrect={false} enableClearButton={true} ref={inputRef} + onFocus={onFocus} /> ) } diff --git a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx index bbab2b84bd4..1a91e043304 100644 --- a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx @@ -122,6 +122,7 @@ export const PriceRangeOptionsScreen: React.FC = ( ListHeaderComponent?: JSX.Element withExtraPadding?: boolean + useScrollView?: boolean } const isFilterData = (item: any): item is FilterData => { @@ -30,39 +31,46 @@ export const SingleSelectOptionScreen: React.FC = navigation, ListHeaderComponent, withExtraPadding = false, + useScrollView = false, }) => { const handleBackNavigation = () => { navigation.goBack() } + const keyExtractor = (_item: FilterData | JSX.Element, index: number) => String(index) + const renderItem = (item: FilterData | JSX.Element) => { + if (isFilterData(item)) { + return ( + + ) + } + + // Otherwise just return JSX.Element + return item + } return ( {filterHeaderText} - String(index)} - data={filterOptions} - ItemSeparatorComponent={null} - renderItem={({ item }) => { - if (isFilterData(item)) { - return ( - - ) - } - - // Otherwise just return JSX.Element - return item - }} - /> + {useScrollView ? ( + + {ListHeaderComponent} + {filterOptions.map((item, index) => { + return {renderItem(item)} + })} + + ) : ( + renderItem(item)} + /> + )} ) diff --git a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx index 0cdd8f8e3d6..efdee1b38ec 100644 --- a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx @@ -33,14 +33,14 @@ export const SIZE_OPTIONS: FilterData[] = IS_USA ? [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 16in)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (under 16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 40in)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] : [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 40cm)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (under 40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 100cm)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] @@ -195,6 +195,7 @@ export const SizeOptionsScreen: React.FC = ({ navigation filterHeaderText={FilterDisplayName.size} selectedOption={selectedOption} navigation={navigation} + useScrollView={true} filterOptions={[ ...SIZE_OPTIONS, ...(shouldShowCustomSize diff --git a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx index 5681d8924ae..4a4988f2390 100644 --- a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx @@ -7,7 +7,7 @@ import { CircleWithBorder } from "lib/Components/CircleWithBorder/CircleWithBord import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { TouchableRow } from "lib/Components/TouchableRow" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CheckIcon, color, Flex, Separator, Text } from "palette" +import { Box, CheckIcon, Flex, Separator, Text, useColor } from "palette" import React, { useState } from "react" import Haptic from "react-native-haptic-feedback" import styled from "styled-components/native" @@ -21,6 +21,7 @@ export const ALLOW_EMPTY_CREATED_DATES_FILTER: FilterData = { } export const YearOptionsScreen: React.FC = ({ navigation }) => { + const color = useColor() const screenWidth = useScreenDimensions().width const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx index e979768e3b7..b5e644e97ec 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx @@ -1,30 +1,18 @@ import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Box, CheckIcon, color } from "palette" +import { Box, CheckIcon } from "palette" import React from "react" import { ColorsSwatch } from "../ColorsSwatch" describe("Colors swatch", () => { it("adds a check icon when selected", () => { const selectedTree = renderWithWrappers( - + ) const selectedCheckIcon = selectedTree.root.findByType(CheckIcon) expect(selectedCheckIcon.props.fill).toMatch("#fff") const unselectedTree = renderWithWrappers( - + ) const unselectedCheckIcon = unselectedTree.root.findAllByType(CheckIcon) expect(unselectedCheckIcon.length).toEqual(0) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx index 8dc87c4185b..aae5dcd8906 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx @@ -85,7 +85,7 @@ describe("Galleries and Institutions Options Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Galleries and institutions")) + const item = items.find((i) => extractText(i).startsWith("Galleries and Institutions")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx index c5fb42bbf5b..3047481e4cf 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx @@ -81,7 +81,7 @@ describe(LocationCitiesOptionsScreen, () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Artwork location")) + const item = items.find((i) => extractText(i).startsWith("Artwork Location")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx index d982a38b189..aa9a370cd19 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx @@ -68,7 +68,7 @@ describe("SizeOptionsNew", () => { expect(text).toContain("All") expect(text).toContain("Small (under 16in)") - expect(text).toContain("Medium (under 16in – 40in)") + expect(text).toContain("Medium (16in – 40in)") expect(text).toContain("Large (over 40in)") expect(text).toContain("Custom size") }) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx index b13c90a7326..04521963479 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx @@ -60,7 +60,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time period")) + const item = items.find((i) => extractText(i).startsWith("Time Period")) expect(item).not.toBeUndefined() @@ -95,7 +95,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time period")) + const item = items.find((i) => extractText(i).startsWith("Time Period")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts index 8bca24401ba..90435e746be 100644 --- a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts +++ b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts @@ -76,7 +76,7 @@ describe("convertSizeToFilterParams", () => { it("returns the medium size filter value", () => { expect(convertSizeToFilterParams({ dimensionRange: "16.0-40.0" })).toEqual([ { - displayText: "Medium (under 16in – 40in)", + displayText: "Medium (16in – 40in)", paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }, @@ -524,17 +524,7 @@ describe("convertSavedSearchCriteriaToFilterParams", () => { paramName: FilterParamName.priceRange, }) expect(result).toContainEqual({ - displayText: `Medium (under 16in – 40in)`, - paramValue: "16.0-40.0", - paramName: FilterParamName.dimensionRange, - }) - expect(result).toContainEqual({ - displayText: `Medium (under 16in – 40in)`, - paramValue: "16.0-40.0", - paramName: FilterParamName.dimensionRange, - }) - expect(result).toContainEqual({ - displayText: `Medium (under 16in – 40in)`, + displayText: `Medium (16in – 40in)`, paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }) diff --git a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx index 926f7b14041..83a0bad4815 100644 --- a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx +++ b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx @@ -417,11 +417,13 @@ describe("Applying filters on Artworks", () => { render={({ props, error }) => { if (props?.marketingCollection) { return ( - - - - - + + + + + + + ) } else if (error) { console.log(error) diff --git a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx index 87575204f2a..32ceb385b82 100644 --- a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx +++ b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx @@ -1,5 +1,6 @@ +import { themeGet } from "@styled-system/theme-get" import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { Button, color, Flex, Sans } from "palette" +import { Button, Flex, Sans } from "palette" import React from "react" import styled from "styled-components/native" @@ -38,6 +39,6 @@ export const FilteredArtworkGridZeroState: React.FC = (props) => } const ZeroStateMessage = styled(Sans)` - color: ${color("black100")}; + color: ${themeGet("colors.black100")}; text-align: center; ` diff --git a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx index 2d2f87fc38f..3c5b411999c 100644 --- a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx +++ b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx @@ -19,7 +19,7 @@ import { PAGE_SIZE } from "lib/data/constants" import { ScreenOwnerType } from "@artsy/cohesion" import { InfiniteScrollArtworksGrid_connection } from "__generated__/InfiniteScrollArtworksGrid_connection.graphql" import { extractNodes } from "lib/utils/extractNodes" -import { Box, Button, Flex, getColorsForVariant, space, Theme } from "palette" +import { Box, Button, Flex, getColorsForVariant, Theme } from "palette" import { graphql } from "relay-runtime" import ParentAwareScrollView from "../ParentAwareScrollView" @@ -153,7 +153,7 @@ class InfiniteScrollArtworksGrid extends React.Component void) | null | undefined @@ -43,6 +47,7 @@ export const ArtworkTileRailCard: React.FC = ({ useSquareAspectRatio = false, lotLabel, }) => { + const color = useColor() if (!!imageURL && !imageAspectRatio && !useSquareAspectRatio) { throw new Error("imageAspectRatio is required for non-square images") } diff --git a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx index 7ddfc05a4a1..72d9d174a3e 100644 --- a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx +++ b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx @@ -1,5 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { ArtworkTileRailCard, ArtworkTileRailCardProps } from "../ArtworkTileRailCard" @@ -21,9 +22,11 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - + + + + + ) const image = result.find("AROpaqueImageView") @@ -36,9 +39,11 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - + + + + + ) const sans = result.find("Sans") @@ -52,9 +57,11 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - + + + + + ) const sans = result.find("Sans") @@ -68,9 +75,11 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - + + + + + ) expect(result.find("AROpaqueImageView").length).toBe(0) @@ -83,9 +92,11 @@ describe("ArtworkTileRailCard", () => { } mount( - - - + + + + + ) }) @@ -96,9 +107,11 @@ describe("ArtworkTileRailCard", () => { } mount( - - - + + + + + ) }) @@ -109,9 +122,11 @@ describe("ArtworkTileRailCard", () => { } mount( - - - + + + + + ) }) @@ -122,9 +137,11 @@ describe("ArtworkTileRailCard", () => { } mount( - - - + + + + + ) }) @@ -135,9 +152,11 @@ describe("ArtworkTileRailCard", () => { } mount( - - - + + + + + ) }) @@ -150,9 +169,11 @@ describe("ArtworkTileRailCard", () => { expect(() => mount( - - - + + + + + ) ).toThrowError(error) }) @@ -164,9 +185,11 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - + + + + + ) const image = result.find("AROpaqueImageView") diff --git a/src/lib/Components/Buttons/DarkNavigationButton.tsx b/src/lib/Components/Buttons/DarkNavigationButton.tsx index 7c8bfaa1aec..f442079cf0a 100644 --- a/src/lib/Components/Buttons/DarkNavigationButton.tsx +++ b/src/lib/Components/Buttons/DarkNavigationButton.tsx @@ -1,5 +1,5 @@ import { navigate } from "lib/navigation/navigate" -import { Box, color, Flex, Serif } from "palette" +import { Box, ClassTheme, Flex, Serif } from "palette" import React from "react" import { Image, TouchableWithoutFeedback } from "react-native" @@ -13,16 +13,20 @@ export default class DarkNavigationButton extends React.Component { render() { const showNavArrow = this.props.href || this.props.onPress return ( - - - - - {this.props.title} - - {!!showNavArrow && } - - - + + {({ color }) => ( + + + + + {this.props.title} + + {!!showNavArrow && } + + + + )} + ) } diff --git a/src/lib/Components/ConnectivityBanner.tsx b/src/lib/Components/ConnectivityBanner.tsx index 7e5ccc03708..0ced957d02b 100644 --- a/src/lib/Components/ConnectivityBanner.tsx +++ b/src/lib/Components/ConnectivityBanner.tsx @@ -4,6 +4,7 @@ import styled from "styled-components/native" import colors from "lib/data/colors" import fonts from "lib/data/fonts" +// @ts-ignore const Container = styled.View` height: 30; background-color: ${colors["yellow-regular"]}; diff --git a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx index e633f3ebfbf..77625ecc004 100644 --- a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx +++ b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx @@ -1,7 +1,7 @@ // Mock moment to always give back a formatted time string -jest.mock("moment", () => { +jest.mock("moment-timezone", () => { const momentMock: any = jest.fn(() => ({ format: (format: string) => (format.length > 3 ? "Mon" : "7pm") })) - momentMock.duration = jest.requireActual("moment").duration + momentMock.duration = jest.requireActual("moment-timezone").duration return momentMock }) diff --git a/src/lib/Components/FancyModal/FancyModalHeader.tsx b/src/lib/Components/FancyModal/FancyModalHeader.tsx index 79679adc80f..1a5fcbea047 100644 --- a/src/lib/Components/FancyModal/FancyModalHeader.tsx +++ b/src/lib/Components/FancyModal/FancyModalHeader.tsx @@ -1,4 +1,5 @@ -import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, space, Text } from "palette" +import { themeGet } from "@styled-system/theme-get" +import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, Text, useTheme } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -25,6 +26,7 @@ export const FancyModalHeader: React.FC = ({ useXButton, useShareButton, }) => { + const { space } = useTheme() const leftButton = () => { if (!useXButton) { return @@ -88,13 +90,13 @@ export const Container = styled(Flex)` flex-direction: row; justify-content: space-between; align-items: center; - height: ${space(6)}; + height: ${themeGet("space.6")}px; ` export const LeftButtonContainer = styled(TouchableOpacity)` - padding: ${space(2)}px; + padding: ${themeGet("space.2")}px; ` export const RightButtonContainer = styled(TouchableOpacity)` - padding: ${space(2)}px; + padding: ${themeGet("space.2")}px; ` diff --git a/src/lib/Components/Gene/GeneArtworks.tsx b/src/lib/Components/Gene/GeneArtworks.tsx index 638530022ee..2df36952572 100644 --- a/src/lib/Components/Gene/GeneArtworks.tsx +++ b/src/lib/Components/Gene/GeneArtworks.tsx @@ -16,7 +16,7 @@ import { Schema } from "lib/utils/track" import { Box, Message } from "palette" import React, { useContext, useState } from "react" import { useEffect } from "react" -import { useRef } from 'react' +import { useRef } from "react" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" diff --git a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx index d2abbe752cd..8835f97c9b8 100644 --- a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx +++ b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx @@ -1,17 +1,17 @@ import { GeneArtworksTestsQuery } from "__generated__/GeneArtworksTestsQuery.graphql" -import { ApplyButton } from 'lib/Components/ArtworkFilter' +import { ApplyButton } from "lib/Components/ArtworkFilter" import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { ArtworksFilterHeader } from "lib/Components/ArtworkGrids/FilterHeader" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { StickyTabPage } from "lib/Components/StickyTabPage/StickyTabPage" -import { TouchableRow } from 'lib/Components/TouchableRow' -import { extractText } from 'lib/tests/extractText' +import { TouchableRow } from "lib/Components/TouchableRow" +import { extractText } from "lib/tests/extractText" import { mockEnvironmentPayload } from "lib/tests/mockEnvironmentPayload" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Message, TouchableHighlightColor } from 'palette' +import { Message, TouchableHighlightColor } from "palette" import React from "react" import { graphql, QueryRenderer } from "react-relay" -import { act } from 'react-test-renderer' +import { act } from "react-test-renderer" import { useTracking } from "react-tracking" import { createMockEnvironment } from "relay-test-utils" import { GeneArtworksPaginationContainer } from "../GeneArtworks" @@ -142,7 +142,7 @@ describe("GeneArtworks", () => { artworks: { counts: { total: 0, - } + }, }, } }, diff --git a/src/lib/Components/GenericArtistSeriesRail.tsx b/src/lib/Components/GenericArtistSeriesRail.tsx index 6ed3e862b74..9293db54723 100644 --- a/src/lib/Components/GenericArtistSeriesRail.tsx +++ b/src/lib/Components/GenericArtistSeriesRail.tsx @@ -12,7 +12,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { Schema } from "lib/utils/track" -import { color, Sans, Spacer } from "palette" +import { Sans, Spacer, useColor } from "palette" import React from "react" import { View } from "react-native" import { useTracking } from "react-tracking" @@ -31,6 +31,7 @@ type GenericArtistSeriesItem = | ArtistCollectionsRail_collections[0] export const GenericArtistSeriesRail: React.FC = (props) => { + const color = useColor() const { collections, contextScreenOwnerType, contextScreenOwnerId, contextScreenOwnerSlug } = props const tracking = useTracking() diff --git a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx index 8c3d252f2da..afc008ec201 100644 --- a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx +++ b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx @@ -7,7 +7,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { compact, floor } from "lodash" -import { Button, CloseIcon, color, Flex, Join, Sans, Touchable } from "palette" +import { Button, ClassTheme, CloseIcon, Flex, Join, Sans, Touchable } from "palette" import styled from "styled-components/native" import { CARD_WIDTH, CardRailCard } from "../CardRailCard" @@ -132,29 +132,33 @@ export class ArtistCard extends React.Component { ) : null} {!!this.props.onDismiss && ( - - {this.state.isDismissing ? ( - - ) : ( - + + {({ color }) => ( + + {this.state.isDismissing ? ( + + ) : ( + + )} + )} - + )} ) diff --git a/src/lib/Components/HoursCollapsible.tsx b/src/lib/Components/HoursCollapsible.tsx index cbc74687d99..b79f84a83f8 100644 --- a/src/lib/Components/HoursCollapsible.tsx +++ b/src/lib/Components/HoursCollapsible.tsx @@ -2,7 +2,7 @@ import { HoursCollapsible_location } from "__generated__/HoursCollapsible_locati import { Markdown } from "lib/Components/Markdown" import ChevronIcon from "lib/Icons/ChevronIcon" import { defaultRules } from "lib/utils/renderMarkdown" -import { Box, Collapse as _Collapse, color, Flex, Sans, Spacer } from "palette" +import { Box, ClassTheme, Collapse as _Collapse, Flex, Sans, Spacer } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -81,21 +81,25 @@ export class HoursCollapsible extends React.Component { render() { const { isExpanded } = this.state return ( - - - - - Opening hours - - - - - - - - {this.renderHours()} - - + + {({ color }) => ( + + + + + Opening hours + + + + + + + + {this.renderHours()} + + + )} + ) } } diff --git a/src/lib/Components/Input/Input.tsx b/src/lib/Components/Input/Input.tsx index 7d5a2199472..f1f260ca30c 100644 --- a/src/lib/Components/Input/Input.tsx +++ b/src/lib/Components/Input/Input.tsx @@ -1,5 +1,5 @@ import _ from "lodash" -import { color, Color, EyeOpenedIcon, Flex, Sans, TEXT_FONTS, XCircleIcon } from "palette" +import { Color, EyeOpenedIcon, Flex, Sans, Spinner, TEXT_FONTS, useTheme, XCircleIcon } from "palette" import { fontFamily } from "palette/platform/fonts/fontFamily" import React, { useEffect, useImperativeHandle, useRef, useState } from "react" import { @@ -24,6 +24,7 @@ export interface InputProps extends Omit { description?: string error?: string icon?: JSX.Element + loading?: boolean disabled?: boolean required?: boolean title?: string @@ -68,6 +69,7 @@ export const Input = React.forwardRef( disabled, error, icon, + loading, required, enableClearButton, title, @@ -81,6 +83,7 @@ export const Input = React.forwardRef( }, ref ) => { + const { color } = useTheme() const [focused, setFocused] = useState(false) const [showPassword, setShowPassword] = useState(!secureTextEntry) const [value, setValue] = useState(rest.value ?? rest.defaultValue ?? "") @@ -251,17 +254,26 @@ export const Input = React.forwardRef( /> {renderShowPasswordIcon()} - {!!(value !== undefined && value !== "" && enableClearButton) && ( - - { - localClear() - }} - hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} - > - - + {loading ? ( + + + ) : ( + !!(value !== undefined && value !== "" && enableClearButton) && ( + + { + localClear() + }} + hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} + > + + + + ) )} diff --git a/src/lib/Components/Input/InputTitle.tsx b/src/lib/Components/Input/InputTitle.tsx index ac518786a43..1960f53f3e2 100644 --- a/src/lib/Components/Input/InputTitle.tsx +++ b/src/lib/Components/Input/InputTitle.tsx @@ -1,7 +1,8 @@ -import { color, Text } from "palette" +import { Text, useColor } from "palette" import React from "react" export const InputTitle: React.FC<{ required?: boolean }> = ({ children: title, required }) => { + const color = useColor() if (!title) { return null } diff --git a/src/lib/Components/Lists/AuctionResultListItem.tsx b/src/lib/Components/Lists/AuctionResultListItem.tsx index 5f773ed804d..0acf78d737c 100644 --- a/src/lib/Components/Lists/AuctionResultListItem.tsx +++ b/src/lib/Components/Lists/AuctionResultListItem.tsx @@ -4,7 +4,7 @@ import { auctionResultHasPrice, auctionResultText } from "lib/Scenes/AuctionResu import { QAInfoManualPanel, QAInfoRow } from "lib/utils/QAInfo" import { capitalize } from "lodash" import moment from "moment" -import { bullet, color, Flex, NoArtworkIcon, Text, Touchable } from "palette" +import { bullet, Flex, NoArtworkIcon, Text, Touchable, useColor } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { AuctionResultsMidEstimate } from "../AuctionResult/AuctionResultMidEstimate" @@ -16,6 +16,7 @@ interface Props { } const AuctionResultListItem: React.FC = ({ auctionResult, onPress, showArtistName }) => { + const color = useColor() const QAInfo: React.FC = () => ( diff --git a/src/lib/Components/Lists/SavedItemRow.tsx b/src/lib/Components/Lists/SavedItemRow.tsx index a75b0a8b356..1d624a7c91e 100644 --- a/src/lib/Components/Lists/SavedItemRow.tsx +++ b/src/lib/Components/Lists/SavedItemRow.tsx @@ -1,7 +1,7 @@ import React from "react" import { navigate } from "lib/navigation/navigate" -import { color, Flex, Sans, Spacer, Touchable } from "palette" +import { Flex, Sans, Spacer, Touchable, useColor } from "palette" import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" interface SavedItemRowProps { @@ -15,6 +15,7 @@ interface SavedItemRowProps { } export const SavedItemRow: React.FC = ({ href, name, image, square_image, size = 60 }) => { + const color = useColor() const imageURL = image?.url return ( diff --git a/src/lib/Components/Lists/ShowItemRow.tsx b/src/lib/Components/Lists/ShowItemRow.tsx index 0b033583250..62e9fcdfa13 100644 --- a/src/lib/Components/Lists/ShowItemRow.tsx +++ b/src/lib/Components/Lists/ShowItemRow.tsx @@ -1,3 +1,4 @@ +import { themeGet } from "@styled-system/theme-get" import { ShowItemRow_show } from "__generated__/ShowItemRow_show.graphql" import { ShowItemRowMutation } from "__generated__/ShowItemRowMutation.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" @@ -8,7 +9,7 @@ import { exhibitionDates } from "lib/Scenes/Map/exhibitionPeriodParser" import { hrefForPartialShow } from "lib/utils/router" import { Schema, Track, track as _track } from "lib/utils/track" import { debounce } from "lodash" -import { Box, Button, color, Flex, Sans, space, Touchable } from "palette" +import { Box, Button, ClassTheme, Flex, Sans, Touchable } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -124,51 +125,55 @@ export class ShowItemRow extends React.Component { const imageURL = mainCoverImageURL || galleryProfileIcon return ( - - {!imageURL ? ( - - - - ) : ( - - - + + {({ color }) => ( + + {!imageURL ? ( + + + + ) : ( + + + + )} + + {!!(show.partner && show.partner.name) && ( + + {show.partner.name} + + )} + {!!show.name && ( + + {show.name} + + )} + {!!(show.exhibition_period && show.status) && ( + + {show.status.includes("closed") + ? show.status.charAt(0).toUpperCase() + show.status.slice(1) + : exhibitionDates( + show.exhibition_period, + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + show.end_at + )} + + )} + + {!shouldHideSaveButton && ( + + )} + )} - - {!!(show.partner && show.partner.name) && ( - - {show.partner.name} - - )} - {!!show.name && ( - - {show.name} - - )} - {!!(show.exhibition_period && show.status) && ( - - {show.status.includes("closed") - ? show.status.charAt(0).toUpperCase() + show.status.slice(1) - : exhibitionDates( - show.exhibition_period, - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - show.end_at - )} - - )} - - {!shouldHideSaveButton && ( - - )} - + ) } @@ -176,13 +181,17 @@ export class ShowItemRow extends React.Component { const { show, isListItem } = this.props return isListItem ? ( - this.handleTap(show.slug, show.internalID)} - style={{ paddingHorizontal: 20, paddingVertical: 5 }} - > - {this.renderItemDetails()} - + + {({ color }) => ( + this.handleTap(show.slug, show.internalID)} + style={{ paddingHorizontal: 20, paddingVertical: 5 }} + > + {this.renderItemDetails()} + + )} + ) : ( this.handleTap(show.slug, show.internalID)}> {this.renderItemDetails()} @@ -228,6 +237,6 @@ export const ShowItemRowContainer = createFragmentContainer(ShowItemRow, { const DefaultImageContainer = styled(Box)` align-items: center; background-color: ${colors["gray-regular"]}; - height: ${space(6)}; - width: ${space(6)}; + height: ${themeGet("space.6")}px; + width: ${themeGet("space.6")}px; ` diff --git a/src/lib/Components/LoadFailureView.tsx b/src/lib/Components/LoadFailureView.tsx index aa37ac2d6c1..aca22a30f64 100644 --- a/src/lib/Components/LoadFailureView.tsx +++ b/src/lib/Components/LoadFailureView.tsx @@ -1,6 +1,6 @@ import { screen } from "lib/utils/track/helpers" import { debounce } from "lodash" -import { color, Flex, Text, Touchable } from "palette" +import { Flex, Text, Touchable, useColor } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, Easing } from "react-native" import { useTracking } from "react-tracking" @@ -12,6 +12,7 @@ interface LoadFailureViewProps { } export const LoadFailureView: React.FC = (props) => { + const color = useColor() const spinAnimation = useRef(new Animated.Value(0)).current const [isAnimating, setIsAnimating] = useState(false) diff --git a/src/lib/Components/LocationMap/index.tsx b/src/lib/Components/LocationMap/index.tsx index 1f50ea3ae9d..ac5a0932b70 100644 --- a/src/lib/Components/LocationMap/index.tsx +++ b/src/lib/Components/LocationMap/index.tsx @@ -1,10 +1,11 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import Clipboard from "@react-native-community/clipboard" import MapboxGL from "@react-native-mapbox-gl/maps" +import { themeGet } from "@styled-system/theme-get" import { LocationMap_location } from "__generated__/LocationMap_location.graphql" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, color, Flex, Text } from "palette" +import { Box, Flex, Text } from "palette" import React from "react" import { Linking, TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -15,7 +16,7 @@ MapboxGL.setAccessToken(Config.MAPBOX_API_CLIENT_KEY) const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${color("black10")}; + border-color: ${themeGet("colors.black10")}; ` interface Props { diff --git a/src/lib/Components/MenuItem.tsx b/src/lib/Components/MenuItem.tsx index 35ef3a23378..b470771ce30 100644 --- a/src/lib/Components/MenuItem.tsx +++ b/src/lib/Components/MenuItem.tsx @@ -1,4 +1,4 @@ -import { ChevronIcon, color, Flex, Sans, SansProps, Touchable } from "palette" +import { ChevronIcon, Flex, Sans, SansProps, Touchable, useColor } from "palette" import React from "react" import { StyleProp, ViewStyle } from "react-native" @@ -23,6 +23,7 @@ export const MenuItem: React.FC<{ ellipsizeMode, style, }) => { + const color = useColor() return ( >(({ value, onChange, onChangeText, maxModalHeight, ...rest }, outerRef) => { + const color = useColor() const innerRef = useRef() const initialValues = cleanUserPhoneNumber(value ?? "") diff --git a/src/lib/Components/Photos/AddEditPhotos.tsx b/src/lib/Components/Photos/AddEditPhotos.tsx index 12cd1bb2752..9728bd4845e 100644 --- a/src/lib/Components/Photos/AddEditPhotos.tsx +++ b/src/lib/Components/Photos/AddEditPhotos.tsx @@ -7,7 +7,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, Button, color, Flex, Spacer, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, Button, Flex, Spacer, useColor, XCircleIcon } from "palette" import React, { useState } from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { Image as RNCImage } from "react-native-image-crop-picker" @@ -87,6 +87,7 @@ const AddPhotosButton: React.FC<{ imageSize: number; addPhotos: (addedImages: RN imageSize, addPhotos, }) => { + const color = useColor() const { showActionSheetWithOptions } = useActionSheet() return ( diff --git a/src/lib/Components/PopoverMessage/PopoverMessage.tsx b/src/lib/Components/PopoverMessage/PopoverMessage.tsx index 072f55bf1ad..031f8f64430 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessage.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessage.tsx @@ -1,20 +1,31 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CloseIcon, Color, color, Flex, Text, Touchable } from "palette" -import React, { useEffect, useRef, useState } from "react" -import { Animated, Platform } from "react-native" -import useTimeoutFn from "react-use/lib/useTimeoutFn" +import { Box, CloseIcon, Color, Flex, Text, Touchable, useColor } from "palette" +import React from "react" +import { Animated } from "react-native" import { usePopoverMessage } from "./popoverMessageHooks" export const AnimatedFlex = Animated.createAnimatedComponent(Flex) -const EDGE_POPOVER_MESSAGE_HEIGHT = Platform.OS === "ios" ? 80 : 90 const EDGE_POPOVER_MESSAGE_PADDING = 10 -const FRICTION = 20 const NAVBAR_HEIGHT = 44 export type PopoverMessagePlacement = "top" | "bottom" export type PopoverMessageType = "info" | "success" | "error" | "default" -export type PopoverMessageOptions = Omit +export type PopoverMessageItem = Omit + +export interface PopoverMessageProps { + placement?: PopoverMessagePlacement + title: string + translateYAnimation: Animated.Value + opacityAnimation: Animated.Value + message?: string + autoHide?: boolean + hideTimeout?: number + showCloseIcon?: boolean + type?: PopoverMessageType + onPress?: () => void + onClose?: () => void +} export const getTitleColorByType = (type?: PopoverMessageType): Color => { if (type === "success") { @@ -28,95 +39,38 @@ export const getTitleColorByType = (type?: PopoverMessageType): Color => { return "black100" } -export interface PopoverMessageProps { - id: string - positionIndex: number - placement: PopoverMessagePlacement - title: string - message?: string - autoHide?: boolean - hideTimeout?: number - showCloseIcon?: boolean - type?: PopoverMessageType - onPress?: () => void - onClose?: () => void -} - // TODO: Remove NAVBAR_HEIGHT when a new design without a floating back button is added export const PopoverMessage: React.FC = (props) => { + const color = useColor() const { - id, - positionIndex, - placement, + placement = "top", title, message, - autoHide = true, - hideTimeout = 3500, showCloseIcon = true, type, + translateYAnimation, + opacityAnimation, onPress, onClose, } = props const { safeAreaInsets } = useScreenDimensions() const { hide } = usePopoverMessage() - const [opacityAnim] = useState(new Animated.Value(0)) - const [translateYAnim] = useState(new Animated.Value(0)) - const isClosed = useRef(false) const titleColor = getTitleColorByType(type) - useEffect(() => { - Animated.parallel([ - Animated.spring(translateYAnim, { - toValue: 1, - useNativeDriver: true, - friction: FRICTION, - }), - Animated.timing(opacityAnim, { - toValue: 1, - useNativeDriver: true, - duration: 450, - }), - ]).start() - }, []) - - const hideAnimation = () => { - isClosed.current = true - Animated.parallel([ - Animated.spring(translateYAnim, { - toValue: 0, - useNativeDriver: true, - friction: FRICTION, - }), - Animated.timing(opacityAnim, { - toValue: 0, - useNativeDriver: true, - duration: 250, - }), - ]).start(() => hide(id)) - } - const handlePopoverMessagePress = () => { - hideAnimation() + hide() onPress?.() } const handlePopoverMessageClosePress = () => { - hideAnimation() + hide() onClose?.() } - useTimeoutFn(() => { - if (autoHide && !isClosed.current) { - hideAnimation() - } - }, hideTimeout) - - const range = [-EDGE_POPOVER_MESSAGE_HEIGHT, 0] + const range = [-150, 0] const outputRange = placement === "top" ? range : range.map((item) => item * -1) - const translateY = translateYAnim.interpolate({ inputRange: [0, 1], outputRange }) - const opacity = opacityAnim.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) - const offset = - EDGE_POPOVER_MESSAGE_PADDING + positionIndex * (EDGE_POPOVER_MESSAGE_HEIGHT + EDGE_POPOVER_MESSAGE_PADDING) + const translateY = translateYAnimation.interpolate({ inputRange: [0, 1], outputRange }) + const opacity = opacityAnimation.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) const content = ( @@ -126,7 +80,7 @@ export const PopoverMessage: React.FC = (props) => { {title} {!!message && ( - + {message} )} @@ -147,9 +101,8 @@ export const PopoverMessage: React.FC = (props) => { position="absolute" left="1" right="1" - height={EDGE_POPOVER_MESSAGE_HEIGHT} - bottom={placement === "bottom" ? safeAreaInsets.bottom + offset : undefined} - top={placement === "top" ? safeAreaInsets.top + offset + NAVBAR_HEIGHT : undefined} + bottom={placement === "bottom" ? safeAreaInsets.bottom + EDGE_POPOVER_MESSAGE_PADDING : undefined} + top={placement === "top" ? safeAreaInsets.top + EDGE_POPOVER_MESSAGE_PADDING + NAVBAR_HEIGHT : undefined} style={{ opacity, transform: [{ translateY }], diff --git a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx index 14dd8a6f7d9..a99a9073342 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx @@ -1,55 +1,113 @@ -import React, { useCallback, useMemo, useState } from "react" -import { PopoverMessage, PopoverMessageOptions, PopoverMessagePlacement, PopoverMessageProps } from "./PopoverMessage" +import React, { useCallback, useState } from "react" +import { useEffect } from "react" +import { useRef } from "react" +import { Animated } from "react-native" +import { PopoverMessage, PopoverMessageItem } from "./PopoverMessage" interface PopoverMessageContextContextValue { - show: (options: PopoverMessageOptions) => void - hide: (id: string) => void + show: (options: PopoverMessageItem) => void + hide: () => void } -// tslint:disable-next-line:no-empty -export const PopoverMessageContext = React.createContext({ show: () => {}, hide: () => {} }) +const SHOW_ANIMATION_VELOCITY = 450 +const HIDE_ANIMATION_VELOCITY = 400 +const REPLACE_ANIMATION_VELOCITY = 350 -const filterPopoverMessagesByPosition = ( - popoverMessages: Array>, - placement: PopoverMessagePlacement -): PopoverMessageProps[] => { - const filteredByPlacement = popoverMessages.filter((t) => t.placement === placement) - const formatted = filteredByPlacement.map((popoverMessage, positionIndex) => ({ - ...popoverMessage, - positionIndex, - })) +const delay = (time: number) => new Promise((resolve) => setTimeout(resolve, time)) - return formatted -} +export const PopoverMessageContext = React.createContext({ + // tslint:disable-next-line:no-empty + show: () => {}, + // tslint:disable-next-line:no-empty + hide: () => {}, +}) export const PopoverMessageProvider: React.FC = ({ children }) => { - const [popoverMessages, setPopoverMessages] = useState>>([]) + const [popoverMessage, setPopoverMessage] = useState(null) + const showingPopoverMessage = useRef(false) + const lastStartedAt = useRef(null) + const timer = useRef(null) + const [opacityAnim] = useState(new Animated.Value(0)) + const [translateYAnim] = useState(new Animated.Value(0)) + + const runAnimation = useCallback((mode: "show" | "hide") => { + const nextAnimationValue = mode === "show" ? 1 : 0 + const animationDuration = mode === "show" ? SHOW_ANIMATION_VELOCITY : HIDE_ANIMATION_VELOCITY + + return new Promise((resolve) => { + if (__TEST__) { + return resolve(null) + } + + Animated.parallel([ + Animated.spring(translateYAnim, { + toValue: nextAnimationValue, + useNativeDriver: true, + friction: 55, + }), + Animated.timing(opacityAnim, { + toValue: nextAnimationValue, + useNativeDriver: true, + duration: animationDuration, + }), + ]).start(resolve) + }) + }, []) + + const clearStartedTimeout = useCallback(() => { + if (timer.current) { + clearTimeout(timer.current) + timer.current = null + } + }, []) + + const hide: PopoverMessageContextContextValue["hide"] = useCallback(async () => { + await runAnimation("hide") + setPopoverMessage(null) + clearStartedTimeout() + showingPopoverMessage.current = false + }, [setPopoverMessage]) const show: PopoverMessageContextContextValue["show"] = useCallback( - (options) => { - setPopoverMessages((prevPopoverMessage) => [...prevPopoverMessage, { id: `${Date.now()}`, ...options }]) - }, - [setPopoverMessages] - ) + async (options) => { + const { autoHide = true, hideTimeout = 3500 } = options + const now = Date.now() + lastStartedAt.current = now + + clearStartedTimeout() + + if (showingPopoverMessage.current) { + runAnimation("hide") + await delay(REPLACE_ANIMATION_VELOCITY) + } + + // Check race condition + if (lastStartedAt.current === now) { + setPopoverMessage(options) + showingPopoverMessage.current = true + + if (autoHide) { + timer.current = setTimeout(hide, hideTimeout) + } - const hide: PopoverMessageContextContextValue["hide"] = useCallback( - (id) => { - setPopoverMessages((prevPopoverMessage) => prevPopoverMessage.filter((t) => t.id !== id)) + lastStartedAt.current = null + } }, - [setPopoverMessages] + [clearStartedTimeout, hide, setPopoverMessage] ) - const topPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "top"), [popoverMessages]) - const bottomPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "bottom"), [ - popoverMessages, - ]) + useEffect(() => { + if (popoverMessage) { + runAnimation("show") + } + }, [popoverMessage]) return ( {children} - {[...topPopoverMessages, ...bottomPopoverMessages].map((popoverMessageProps) => ( - - ))} + {!!popoverMessage && ( + + )} ) } diff --git a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx index 20ffec0ec67..7306299b1ae 100644 --- a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx +++ b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx @@ -1,12 +1,13 @@ +import { flushPromiseQueue } from 'lib/tests/flushPromiseQueue' import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { AnimatedFlex, PopoverMessage, PopoverMessageOptions } from "../PopoverMessage" +import { AnimatedFlex, PopoverMessage, PopoverMessageItem } from "../PopoverMessage" import { usePopoverMessage } from "../popoverMessageHooks" -const TestRenderer: React.FC<{ options: PopoverMessageOptions }> = (props) => { +const TestRenderer: React.FC<{ options: PopoverMessageItem }> = (props) => { const popoverMessage = usePopoverMessage() return ( @@ -17,22 +18,12 @@ const TestRenderer: React.FC<{ options: PopoverMessageOptions }> = (props) => { } describe("PopoverMessage", () => { - beforeEach(() => { - jest.clearAllMocks() - jest.useFakeTimers() - }) - - afterEach(() => { - jest.useRealTimers() - }) - it("renders when `show` is called", async () => { const tree = renderWithWrappers( ) @@ -43,19 +34,14 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) - - jest.advanceTimersByTime(3500) - - expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) - it("renders 2 popover messages when `show` is called twice", async () => { + it("renders 1 popover message when `show` is called twice", async () => { const tree = renderWithWrappers( ) @@ -66,7 +52,7 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(2) + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) }) it("renders with title and message", async () => { @@ -75,7 +61,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", }} /> ) @@ -96,7 +81,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", type: "error", }} /> @@ -115,7 +99,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", }} /> ) @@ -150,12 +133,12 @@ describe("PopoverMessage", () => { }) it("does not hide after timeout if autoHide is set to false", async () => { + jest.useFakeTimers() const tree = renderWithWrappers( @@ -172,12 +155,12 @@ describe("PopoverMessage", () => { }) it("should hide after `hideTimeout` time", async () => { + jest.useFakeTimers() const tree = renderWithWrappers( @@ -189,7 +172,11 @@ describe("PopoverMessage", () => { jest.advanceTimersByTime(3500) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) - jest.advanceTimersByTime(5000) + jest.advanceTimersByTime(2000) + jest.useRealTimers() + + await flushPromiseQueue() + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -199,7 +186,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", }} /> ) @@ -208,7 +194,8 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => tree.root.findByType(PopoverMessage).findByType(Touchable).props.onPress()) - jest.advanceTimersByTime(1000) + jest.useRealTimers() + await flushPromiseQueue() expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -220,7 +207,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", onClose, }} /> @@ -239,7 +225,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", showCloseIcon: false, }} /> @@ -258,7 +243,6 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", - placement: "top", onPress, }} /> diff --git a/src/lib/Components/RelatedArtists/RelatedArtist.tsx b/src/lib/Components/RelatedArtists/RelatedArtist.tsx index 19a50191e3c..ee2d723e1e6 100644 --- a/src/lib/Components/RelatedArtists/RelatedArtist.tsx +++ b/src/lib/Components/RelatedArtists/RelatedArtist.tsx @@ -1,6 +1,6 @@ import { RelatedArtist_artist } from "__generated__/RelatedArtist_artist.graphql" import { navigate } from "lib/navigation/navigate" -import { color, Sans, Spacer } from "palette" +import { ClassTheme, Sans, Spacer } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -31,9 +31,13 @@ class RelatedArtist extends Component { {artist.name} - - {this.artworksString(artist.counts)} - + + {({ color }) => ( + + {this.artworksString(artist.counts)} + + )} + ) diff --git a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx index 0c166465daa..ab4b4485df5 100644 --- a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx +++ b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx @@ -1,6 +1,7 @@ import { ContextModule, OwnerType, ScreenOwnerType, tappedEntityGroup, TappedEntityGroupArgs } from "@artsy/cohesion" +import { themeGet } from "@styled-system/theme-get" import { SaleArtworkTileRailCard_saleArtwork } from "__generated__/SaleArtworkTileRailCard_saleArtwork.graphql" -import { Box, color, Flex, Sans } from "palette" +import { Box, Flex, Sans, useColor } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -10,7 +11,10 @@ import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" export const CONTAINER_HEIGHT = 120 -const SaleArtworkCard = styled.TouchableHighlight.attrs({ underlayColor: color("white100"), activeOpacity: 0.8 })`` +const SaleArtworkCard = styled.TouchableHighlight.attrs({ + underlayColor: themeGet("colors.white100"), + activeOpacity: 0.8, +})`` export interface SaleArtworkTileRailCardProps { onPress: () => void @@ -27,6 +31,7 @@ export const SaleArtworkTileRailCard: React.FC = ( useSquareAspectRatio = false, contextScreenOwnerType, }) => { + const color = useColor() const tracking = useTracking() const artwork = saleArtwork.artwork! diff --git a/src/lib/Components/ScrollableTabBar.tsx b/src/lib/Components/ScrollableTabBar.tsx index 9cbb1273f4d..13d3b03c3f5 100644 --- a/src/lib/Components/ScrollableTabBar.tsx +++ b/src/lib/Components/ScrollableTabBar.tsx @@ -1,4 +1,5 @@ -import { color, Sans } from "palette" +import { themeGet } from "@styled-system/theme-get" +import { Sans } from "palette" import React from "react" import { Animated, Dimensions, LayoutRectangle, ScrollView, View } from "react-native" import styled from "styled-components/native" @@ -23,7 +24,7 @@ const Button = styled.TouchableWithoutFeedback` const Tabs = styled.ScrollView` height: 50px; border-bottom-width: 1px; - border-color: ${color("black10")}; + border-color: ${themeGet("colors.black10")}; ` const TabButton = styled(View)<{ active: boolean }>` @@ -36,7 +37,7 @@ const TabButton = styled(View)<{ active: boolean }>` ${(p) => p.active && ` - border-color: ${color("black100")}; + border-color: ${themeGet("colors.black100")}; border-bottom-width: 2px; `}; ` @@ -46,7 +47,7 @@ interface ScrollableTabProps { } const TabLabel = styled(Sans)<{ isActive: boolean }>` - color: ${(p) => (p.isActive ? color("black100") : color("black30"))}; + color: ${(p) => (p.isActive ? themeGet("colors.black100") : themeGet("colors.black30"))}; ` export const ScrollableTab: React.FC = ({ children }) => ( diff --git a/src/lib/Components/SectionTitle.tsx b/src/lib/Components/SectionTitle.tsx index 9f6310ecf81..a2134c8839b 100644 --- a/src/lib/Components/SectionTitle.tsx +++ b/src/lib/Components/SectionTitle.tsx @@ -1,4 +1,4 @@ -import { ArrowRightIcon, Flex, space, Text } from "palette" +import { ArrowRightIcon, Flex, Text, useSpace } from "palette" import React from "react" import { TouchableOpacity, View } from "react-native" @@ -20,6 +20,7 @@ export const SectionTitle: React.FC<{ onPress?: () => any RightButtonContent?: React.ComponentType | null }> = ({ title, subtitle, onPress, RightButtonContent }) => { + const space = useSpace() return ( diff --git a/src/lib/Components/Select.tsx b/src/lib/Components/Select.tsx index c7f377b855e..f3467fe2318 100644 --- a/src/lib/Components/Select.tsx +++ b/src/lib/Components/Select.tsx @@ -1,6 +1,6 @@ import { TriangleDown } from "lib/Icons/TriangleDown" import { Autocomplete } from "lib/utils/Autocomplete" -import { CheckIcon, CloseIcon, color, Flex, Sans, Separator, Spacer, Touchable } from "palette" +import { CheckIcon, CloseIcon, Flex, Sans, Separator, Spacer, Touchable, useColor } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList, TextInput, TouchableOpacity } from "react-native" import { FancyModal } from "./FancyModal/FancyModal" @@ -111,6 +111,7 @@ const SelectButton: React.FC<{ hasError?: boolean onPress(): void }> = ({ value, placeholder, onPress, title, showTitleLabel, subTitle, hasError }) => { + const color = useColor() return ( {showTitleLabel ? {title} : null} @@ -160,6 +161,8 @@ const SelectModal: React.FC<{ renderItemLabel?(value: SelectOption): JSX.Element onModalFinishedClosing?(): void }> = (props) => { + const color = useColor() + // we need to be able to have a local version of the value state so we can show the updated // state between the moment the user taps a selection and the moment we automatically // close the modal. We don't want to tell the consuming component about the user's selection until the diff --git a/src/lib/Components/Spinner.tsx b/src/lib/Components/Spinner.tsx index 995d4605fcf..8e6b1e3ba62 100644 --- a/src/lib/Components/Spinner.tsx +++ b/src/lib/Components/Spinner.tsx @@ -1,5 +1,4 @@ -import { Spinner as PaletteSpinner } from "palette" -import { Color } from "palette/Theme" +import { Color, Spinner as PaletteSpinner } from "palette" import React from "react" import { StyleSheet, View, ViewProps } from "react-native" diff --git a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx index 262e6ad8ae7..a5153160f89 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx @@ -1,4 +1,4 @@ -import { space } from "palette" +import { useSpace } from "palette" import React, { useContext, useRef, useState } from "react" import { FlatList, FlatListProps } from "react-native" import Animated from "react-native-reanimated" @@ -36,6 +36,7 @@ export interface StickyTabFlatListProps } export const StickyTabPageFlatList: React.FC = (props) => { + const space = useSpace() const { staticHeaderHeight, stickyHeaderHeight, headerOffsetY } = useStickyTabPageContext() if (!staticHeaderHeight) { throw new Error("invalid state, mounted flat list before staticHeaderHeight was determined") diff --git a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx index c1fa39c82f7..323549e4652 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx @@ -1,6 +1,6 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact } from "lodash" -import { color, Sans, space } from "palette" +import { Sans, useSpace, useTheme } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, LayoutRectangle, ScrollView, TouchableOpacity, View, ViewProps } from "react-native" import { useStickyTabPageContext } from "./SitckyTabPageContext" @@ -10,6 +10,7 @@ export const TAB_BAR_HEIGHT = 48 export const StickyTabPageTabBar: React.FC<{ onTabPress?(tab: { label: string; index: number }): void }> = ({ onTabPress, }) => { + const { color, space } = useTheme() const screen = useScreenDimensions() const { tabLabels, activeTabIndex, setActiveTabIndex } = useStickyTabPageContext() activeTabIndex.useUpdates() @@ -126,6 +127,8 @@ const ActiveTabBorder: React.FC<{ tabLayouts: LayoutRectangle[]; activeTabIndex: tabLayouts, activeTabIndex, }) => { + const space = useSpace() + // We resize this border using the `scaleX` transform property rather than the `width` property, to avoid running // animations on the JS thread, so we need to set an initial, pre-transform span for the border. const preTransformSpan = 100 diff --git a/src/lib/Components/SwitchMenu.tsx b/src/lib/Components/SwitchMenu.tsx index 677584452a3..dc1168dbddf 100644 --- a/src/lib/Components/SwitchMenu.tsx +++ b/src/lib/Components/SwitchMenu.tsx @@ -1,4 +1,4 @@ -import { color, Flex, Sans } from "palette" +import { Flex, Sans, useColor } from "palette" import React from "react" import { Switch } from "react-native" @@ -10,23 +10,26 @@ interface SwitchMenuProps { disabled?: boolean } -export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => ( - - - - {title} - - - {description} - +export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => { + const color = useColor() + return ( + + + + {title} + + + {description} + + + + + - - - - -) + ) +} diff --git a/src/lib/Components/TabBar.tsx b/src/lib/Components/TabBar.tsx index 089f289c146..e424419d304 100644 --- a/src/lib/Components/TabBar.tsx +++ b/src/lib/Components/TabBar.tsx @@ -1,8 +1,9 @@ +import { themeGet } from "@styled-system/theme-get" import React from "react" import { Animated, View } from "react-native" import styled from "styled-components/native" -import { Box, color, Sans, space } from "palette" +import { Box, ClassTheme, Sans } from "palette" /** * Nearly all props are given by the ScrollableTabView, @@ -45,7 +46,7 @@ const TabButton = styled.View<{ spaceEvenly?: boolean; active?: boolean }>` !p.spaceEvenly && p.active && ` - border-color: ${color("black100")}; + border-color: ${themeGet("colors.black100")}; border-bottom-width: 1px; margin-bottom: -1px; `}; @@ -69,63 +70,72 @@ export default class TabBar extends React.Component { onPress={() => onPressHandler(page)} > - - {name} - + + {({ color }) => ( + + {name} + + )} + ) } render() { - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const containerWidth = this.props.containerWidth - space(4) - const numberOfTabs = this.props.tabs.length - - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const translateX = this.props.scrollValue.interpolate({ - inputRange: [0, 1], - outputRange: [0, containerWidth / numberOfTabs], - }) - return ( - - - {this.props.tabs.map((name, page) => { - const isTabActive = this.props.activeTab === page - return this.renderTab(name, page, isTabActive, this.props.goToPage) - })} - {this.props.spaceEvenly ? ( - - ) : null} - - + + {({ space }) => { + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const containerWidth = this.props.containerWidth - space(4) + const numberOfTabs = this.props.tabs.length + + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const translateX = this.props.scrollValue.interpolate({ + inputRange: [0, 1], + outputRange: [0, containerWidth / numberOfTabs], + }) + return ( + + + {this.props.tabs.map((name, page) => { + const isTabActive = this.props.activeTab === page + return this.renderTab(name, page, isTabActive, this.props.goToPage) + })} + {this.props.spaceEvenly ? ( + + ) : null} + + + ) + }} + ) } } const Wrapper = styled(Box)` border-bottom-width: 1px; - border-bottom-color: ${color("black30")}; + border-bottom-color: ${themeGet("colors.black30")}; ` diff --git a/src/lib/Components/TextArea.tsx b/src/lib/Components/TextArea.tsx index 1cd835c1dcf..a99182ccdac 100644 --- a/src/lib/Components/TextArea.tsx +++ b/src/lib/Components/TextArea.tsx @@ -1,11 +1,12 @@ -import { color, space, Text } from "palette" +import { themeGet } from "@styled-system/theme-get" +import { Text, useColor } from "palette" import React, { useState } from "react" import { TextInput, TextInputProps } from "react-native" import styled from "styled-components/native" const StyledTextArea = styled(TextInput)` border: solid 1px; - padding: ${space(1)}px; + padding: ${themeGet("space.1")}px; height: 88px; ` @@ -13,6 +14,7 @@ interface TextAreaProps extends TextInputProps { title: string } export const TextArea: React.FC = ({ title, ...props }) => { + const color = useColor() const [borderColor, setBorderColor] = useState(color("black10")) return ( diff --git a/src/lib/Components/Toast/Toast.ts b/src/lib/Components/Toast/Toast.ts new file mode 100644 index 00000000000..d6f8b8bb21f --- /dev/null +++ b/src/lib/Components/Toast/Toast.ts @@ -0,0 +1,9 @@ +import { GlobalStore } from "lib/store/GlobalStore" +import { ToastOptions, ToastPlacement } from "./types" + +export const Toast = { + show: (message: string, placement: ToastPlacement, options?: ToastOptions) => + GlobalStore.actions.toast.add({ message, placement, options }), + hide: (id: number) => GlobalStore.actions.toast.remove(id), + hideOldest: () => GlobalStore.actions.toast.removeOldest(), +} diff --git a/src/lib/Components/Toast/Toast.tsx b/src/lib/Components/Toast/ToastComponent.tsx similarity index 77% rename from src/lib/Components/Toast/Toast.tsx rename to src/lib/Components/Toast/ToastComponent.tsx index 12efc4bea2d..d6e46ebf0b3 100644 --- a/src/lib/Components/Toast/Toast.tsx +++ b/src/lib/Components/Toast/ToastComponent.tsx @@ -1,9 +1,11 @@ +import { useActionSheet } from "@expo/react-native-action-sheet" +import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { color, Flex, IconProps, Text, Touchable } from "palette" +import { Flex, Text, Touchable, useColor } from "palette" import React, { useEffect, useState } from "react" import { Animated } from "react-native" import useTimeoutFn from "react-use/lib/useTimeoutFn" -import { useToast } from "./toastHook" +import { ToastDetails } from "./types" const AnimatedFlex = Animated.createAnimatedComponent(Flex) @@ -12,24 +14,16 @@ const EDGE_TOAST_HEIGHT = 60 const EDGE_TOAST_PADDING = 10 const NAVBAR_HEIGHT = 44 -export type ToastPlacement = "middle" | "top" | "bottom" -export interface ToastProps { - id: string - positionIndex: number +type ToastProps = ToastDetails - placement: ToastPlacement - message: string - - onPress?: (id: string) => void - Icon?: React.FC -} - -export const Toast: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { +export const ToastComponent: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { + const color = useColor() const { width, height } = useScreenDimensions() - const { hide } = useToast() const { top: topSafeAreaInset } = useScreenDimensions().safeAreaInsets const [opacityAnim] = useState(new Animated.Value(0)) + const { showActionSheetWithOptions } = useActionSheet() + useEffect(() => { Animated.timing(opacityAnim, { toValue: 1, @@ -43,7 +37,7 @@ export const Toast: React.FC = ({ id, positionIndex, placement, mess toValue: 0, useNativeDriver: true, duration: 450, - }).start(() => hide(id)) + }).start(() => GlobalStore.actions.toast.remove(id)) }, 2500) if (placement === "middle") { @@ -69,7 +63,11 @@ export const Toast: React.FC = ({ id, positionIndex, placement, mess overflow="hidden" > {onPress !== undefined ? ( - onPress(id)} underlayColor={color("black60")}> + onPress({ id, showActionSheetWithOptions })} + underlayColor={color("black60")} + > {innerMiddle} ) : ( @@ -113,7 +111,11 @@ export const Toast: React.FC = ({ id, positionIndex, placement, mess overflow="hidden" > {onPress !== undefined ? ( - onPress(id)} underlayColor={color("black60")}> + onPress({ id, showActionSheetWithOptions })} + underlayColor={color("black60")} + > {innerTopBottom} ) : ( diff --git a/src/lib/Components/Toast/__tests__/Toast-tests.tsx b/src/lib/Components/Toast/__tests__/Toast-tests.tsx index ce87a959a58..3b2c9e42a1d 100644 --- a/src/lib/Components/Toast/__tests__/Toast-tests.tsx +++ b/src/lib/Components/Toast/__tests__/Toast-tests.tsx @@ -3,7 +3,7 @@ import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { Toast } from "../Toast" +import { ToastComponent } from "../ToastComponent" import { useToast } from "../toastHook" const TestRenderer: React.FC = () => { @@ -29,15 +29,15 @@ describe("Toast", () => { it("renders a toast when show toast is called", async () => { const tree = renderWithWrappers() - expect(tree.root.findAllByType(Toast)).toHaveLength(0) + expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) const buttonInstance = tree.root.findByType(Touchable) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(Toast)).toHaveLength(1) + expect(tree.root.findAllByType(ToastComponent)).toHaveLength(1) jest.advanceTimersByTime(3000) - expect(tree.root.findAllByType(Toast)).toHaveLength(0) + expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) }) }) diff --git a/src/lib/Components/Toast/toastHook.tsx b/src/lib/Components/Toast/toastHook.tsx index e7b105696a5..2b7cec3093a 100644 --- a/src/lib/Components/Toast/toastHook.tsx +++ b/src/lib/Components/Toast/toastHook.tsx @@ -1,18 +1,10 @@ -// Some stealing from https://github.com/arnnis/react-native-fast-toast -// but simplified -import React, { useCallback, useContext, useMemo, useState } from "react" -import useCounter from "react-use/lib/useCounter" -import { Toast, ToastPlacement, ToastProps } from "./Toast" +import { GlobalStore } from "lib/store/GlobalStore" +import React, { useContext, useMemo } from "react" +import { Toast } from "./Toast" +import { ToastComponent } from "./ToastComponent" +import { ToastDetails, ToastPlacement } from "./types" -interface ToastContextValue { - show: ( - message: string, - placement: ToastPlacement, - options?: Omit - ) => void - hide: (id: string) => void - hideOldest: () => void -} +type ToastContextValue = typeof Toast // tslint:disable-next-line:no-empty const ToastContext = React.createContext({ show: () => {}, hide: () => {}, hideOldest: () => {} }) @@ -32,51 +24,28 @@ export const useToast = () => { } const filterToastsAndPosition = ( - toasts: Array>, + toasts: Array>, placement: ToastPlacement -): ToastProps[] => +): ToastDetails[] => toasts .filter((t) => t.placement === placement) - .reduce<{ idx: number; arr: ToastProps[] }>( + .reduce<{ idx: number; arr: ToastDetails[] }>( ({ idx, arr }, t) => ({ idx: idx + 1, arr: [...arr, { ...t, positionIndex: idx }] }), { idx: 0, arr: [] } ).arr export const ToastProvider: React.FC = ({ children }) => { - const [toasts, setToasts] = useState>>([]) - const [nextId, { inc: incrementNextId }] = useCounter() - - const show: ToastContextValue["show"] = useCallback( - (message, placement, options) => { - setToasts((prevToasts) => [...prevToasts, { id: `${nextId}`, placement, message, ...options }]) - incrementNextId() - }, - [setToasts, nextId, incrementNextId] - ) - - const hide: ToastContextValue["hide"] = useCallback( - (id) => { - setToasts((prevToasts) => prevToasts.filter((t) => t.id !== id)) - }, - [setToasts] - ) - - const hideOldest: ToastContextValue["hideOldest"] = useCallback(() => { - setToasts((prevToasts) => { - const [, ...tail] = prevToasts - return tail - }) - }, [setToasts]) + const toasts = GlobalStore.useAppState((store) => store.toast.sessionState.toasts) const topToasts = useMemo(() => filterToastsAndPosition(toasts, "top"), [toasts]) const bottomToasts = useMemo(() => filterToastsAndPosition(toasts, "bottom"), [toasts]) const middleToasts = useMemo(() => filterToastsAndPosition(toasts, "middle"), [toasts]) return ( - + {children} {[...topToasts, ...bottomToasts, ...middleToasts].map((toastProps) => ( - + ))} ) diff --git a/src/lib/Components/Toast/types.ts b/src/lib/Components/Toast/types.ts new file mode 100644 index 00000000000..dc5e1393367 --- /dev/null +++ b/src/lib/Components/Toast/types.ts @@ -0,0 +1,22 @@ +import { ActionSheetProps } from "@expo/react-native-action-sheet" +import { IconProps } from "palette" + +export type ToastPlacement = "middle" | "top" | "bottom" + +export interface ToastOnPressHelpers { + id: number + showActionSheetWithOptions: ActionSheetProps["showActionSheetWithOptions"] +} + +export interface ToastDetails { + id: number + positionIndex: number + + placement: ToastPlacement + message: string + + onPress?: (helpers: ToastOnPressHelpers) => void + Icon?: React.FC +} + +export type ToastOptions = Omit diff --git a/src/lib/Components/TouchableRow.tsx b/src/lib/Components/TouchableRow.tsx index 581c7e60584..5ff95be488e 100644 --- a/src/lib/Components/TouchableRow.tsx +++ b/src/lib/Components/TouchableRow.tsx @@ -1,10 +1,13 @@ -import { color, Touchable, TouchableProps } from "palette" +import { Touchable, TouchableProps, useColor } from "palette" import React from "react" export type TouchableRowProps = TouchableProps -export const TouchableRow: React.FC = ({ children, ...rest }) => ( - - {children} - -) +export const TouchableRow: React.FC = ({ children, ...rest }) => { + const color = useColor() + return ( + + {children} + + ) +} diff --git a/src/lib/Components/WorksForYou/Notification.tsx b/src/lib/Components/WorksForYou/Notification.tsx index 2716515076e..5c70889c8d7 100644 --- a/src/lib/Components/WorksForYou/Notification.tsx +++ b/src/lib/Components/WorksForYou/Notification.tsx @@ -8,7 +8,7 @@ import GenericGrid from "../ArtworkGrids/GenericGrid" import { Notification_notification } from "__generated__/Notification_notification.graphql" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { color, Sans } from "palette" +import { ClassTheme, Sans } from "palette" interface Props { // Special notifications will pass down an artistHref. Otherwise, grab it from the artworks. @@ -37,24 +37,28 @@ export class Notification extends React.Component { } return ( - - - - {!!notification.image && ( - - )} - - {notification.artists} - - {notification.summary} - + + {({ color }) => ( + + + + {!!notification.image && ( + + )} + + {notification.artists} + + {notification.summary} + + + + + + - - - - - + )} + ) } } diff --git a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx index 70bc403fbf9..c711b2be246 100644 --- a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx +++ b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx @@ -15,7 +15,7 @@ it("renders without throwing an error for read notification", () => { renderWithLayout(, { width: 768 }) }) -it("renders without throwing an error if no avatar image exists", () => { +fit("renders without throwing an error if no avatar image exists", () => { const props = notification() // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 props.image.resized.url = null diff --git a/src/lib/Components/__tests__/ArtistListItem-tests.tsx b/src/lib/Components/__tests__/ArtistListItem-tests.tsx index 5502c07ed7a..fa7679bf2a1 100644 --- a/src/lib/Components/__tests__/ArtistListItem-tests.tsx +++ b/src/lib/Components/__tests__/ArtistListItem-tests.tsx @@ -1,9 +1,8 @@ import { ArtistListItemTestsQuery } from "__generated__/ArtistListItemTestsQuery.graphql" +import { Touchable } from "palette" import React from "react" -import { TouchableWithoutFeedback } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment } from "relay-test-utils" -import { Touchable } from "../../../palette/elements/Touchable" import { mockEnvironmentPayload } from "../../tests/mockEnvironmentPayload" import { renderWithWrappers } from "../../tests/renderWithWrappers" import { ArtistListItemContainer, formatTombstoneText } from "../ArtistListItem" @@ -38,15 +37,15 @@ describe("ArtistListItem", () => { }) it("renders without feedback without throwing an error", () => { - const tree = renderWithWrappers() + const tree = renderWithWrappers().root mockEnvironmentPayload(mockEnvironment) - expect(tree.root.findAllByType(TouchableWithoutFeedback)).toHaveLength(2) + expect(tree.findByType(Touchable).props.noFeedback).toBe(true) }) it("renders with feedback without throwing an error", () => { - const tree = renderWithWrappers() + const tree = renderWithWrappers().root mockEnvironmentPayload(mockEnvironment) - expect(tree.root.findAllByType(Touchable)).toHaveLength(1) + expect(tree.findByType(Touchable).props.noFeedback).toBe(false) }) }) diff --git a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx index e62598700e0..09290a2506f 100644 --- a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx +++ b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx @@ -226,7 +226,7 @@ describe(__webViewTestUtils__?.expandGoogleAdLink!, () => { }) it("expands google ad links with url params", () => { - const targetURL = "https://artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) + const targetURL = "https://www.artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) const googleURL = "https://googleads.g.doubleclick.net/pcs/click?" + stringify({ adurl: targetURL }) const expanded = __webViewTestUtils__?.expandGoogleAdLink(googleURL) diff --git a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx index c338f793ae1..3123493283e 100644 --- a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx +++ b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx @@ -1,6 +1,7 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Markdown } from "lib/Components/Markdown" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" @@ -13,9 +14,11 @@ describe("HoursCollapsible", () => { it("renders properly", () => { const comp = mount( - - - + + + + + ) expect(comp.text()).toContain("Opening hours") @@ -23,9 +26,11 @@ describe("HoursCollapsible", () => { it("expands when pressed", () => { const comp = mount( - - - + + + + + ) comp.find(TouchableWithoutFeedback).props().onPress() @@ -39,9 +44,11 @@ describe("HoursCollapsible", () => { } const comp = mount( - - - + + + + + ) comp.find(TouchableWithoutFeedback).props().onPress() diff --git a/src/lib/Components/__tests__/ReadMore-tests.tsx b/src/lib/Components/__tests__/ReadMore-tests.tsx index 17b695b75aa..ae7de0661cf 100644 --- a/src/lib/Components/__tests__/ReadMore-tests.tsx +++ b/src/lib/Components/__tests__/ReadMore-tests.tsx @@ -1,6 +1,7 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, shallow } from "enzyme" import { navigate } from "lib/navigation/navigate" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Sans, Serif, Text, Theme } from "palette" import React from "react" import { ReadMore } from "../ReadMore" @@ -31,9 +32,11 @@ describe("ReadMore", () => { it("Shows the 'Read more' link when the length of the text is > the number of characters allowed", () => { const component = mount( - - - + + + + + ) expect(component.find(Text).length).toEqual(2) @@ -51,13 +54,15 @@ describe("ReadMore", () => { it("truncates correctly if there are links within the text", () => { const component = mount( - - - + + + + + ) expect(component.find(Text).length).toEqual(2) @@ -77,9 +82,11 @@ describe("ReadMore", () => { it("opens links modally when specified", () => { const component = mount( - - - + + + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() @@ -89,9 +96,11 @@ describe("ReadMore", () => { it("doesn't open links modally when not specified", () => { const component = mount( - - - + + + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() diff --git a/src/lib/Icons/ChevronIcon.tsx b/src/lib/Icons/ChevronIcon.tsx index e54f034f1c1..d113d744570 100644 --- a/src/lib/Icons/ChevronIcon.tsx +++ b/src/lib/Icons/ChevronIcon.tsx @@ -1,4 +1,4 @@ -import { color } from "palette" +import { Color, useColor } from "palette" import React from "react" import Svg, { G, Path } from "react-native-svg" @@ -7,10 +7,11 @@ interface ChevronIconProps extends React.Props { initialDirection?: string width?: number height?: number - color?: string + color?: Color } const ChevronIcon: React.FC = (props) => { + const color = useColor() let rotation if (props.expanded) { rotation = "rotate(-90, 25, 25)" @@ -25,7 +26,7 @@ const ChevronIcon: React.FC = (props) => { @@ -36,7 +37,6 @@ const ChevronIcon: React.FC = (props) => { ChevronIcon.defaultProps = { height: 14, width: 14, - color: color("black30"), } export default ChevronIcon diff --git a/src/lib/Icons/Crosshair.tsx b/src/lib/Icons/Crosshair.tsx index 0c4ba8143a5..193a4e6f07c 100644 --- a/src/lib/Icons/Crosshair.tsx +++ b/src/lib/Icons/Crosshair.tsx @@ -1,23 +1,22 @@ -import { color } from "palette" +import { Color, useColor } from "palette" import React from "react" import Svg, { Circle, G, Path } from "react-native-svg" -const Crosshair: React.FC<{ color?: string }> = (props) => ( - - - - - - -) - -Crosshair.defaultProps = { - color: color("black100"), +const Crosshair: React.FC<{ color?: Color }> = (props) => { + const color = useColor() + return ( + + + + + + + ) } export default Crosshair diff --git a/src/lib/NativeModules/Events.tsx b/src/lib/NativeModules/Events.tsx index ba6b0371d34..ffdb8df5d8b 100644 --- a/src/lib/NativeModules/Events.tsx +++ b/src/lib/NativeModules/Events.tsx @@ -1,16 +1,5 @@ -import { addBreadcrumb } from "@sentry/react-native" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { getCurrentEmissionState } from "lib/store/GlobalStore" -import { TrackingProvider } from "lib/utils/track/providers" - -function postEvent(info: any) { - addBreadcrumb({ - message: `${JSON.stringify(info, null, 2)}`, - category: "analytics", - }) - - LegacyNativeModules.AREventsModule.postEvent(info) -} // Whether we have requested during the current session or not. let hasRequested = false @@ -32,7 +21,3 @@ export function userHadMeaningfulInteraction() { } } } - -export const NativeAnalyticsProvider: TrackingProvider = { - postEvent, -} diff --git a/src/lib/NativeModules/LegacyNativeModules.tsx b/src/lib/NativeModules/LegacyNativeModules.tsx index f085728e6da..78b815dae68 100644 --- a/src/lib/NativeModules/LegacyNativeModules.tsx +++ b/src/lib/NativeModules/LegacyNativeModules.tsx @@ -80,7 +80,6 @@ interface LegacyNativeModules { triggerCameraModal(reactTag: number | null): Promise } AREventsModule: { - postEvent(info: any): void requestAppStoreRating(): void } } @@ -129,8 +128,6 @@ export const LegacyNativeModules: LegacyNativeModules = }, ARScreenPresenterModule, AREventsModule: { - // tslint:disable-next-line:no-empty - postEvent: () => {}, // this is not needed, we use segment RN. We will migrate ios to that too. requestAppStoreRating: noop("requestAppStoreRating"), }, } diff --git a/src/lib/Scenes/About/About.tsx b/src/lib/Scenes/About/About.tsx index 1529b9d130e..7a8c5096db2 100644 --- a/src/lib/Scenes/About/About.tsx +++ b/src/lib/Scenes/About/About.tsx @@ -3,13 +3,14 @@ import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { useToast } from "lib/Components/Toast/toastHook" import { navigate } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" -import { color } from "palette" +import { useColor } from "palette/hooks" import React, { useEffect, useState } from "react" import { ScrollView } from "react-native" import { getVersion } from "react-native-device-info" import useDebounce from "react-use/lib/useDebounce" export const About: React.FC = () => { + const color = useColor() const appVersion = getVersion() const toast = useToast() const [tapCount, updateTapCount] = useState(0) diff --git a/src/lib/Scenes/Artist/Artist.tsx b/src/lib/Scenes/Artist/Artist.tsx index a500fc6c9d4..6245b0a406e 100644 --- a/src/lib/Scenes/Artist/Artist.tsx +++ b/src/lib/Scenes/Artist/Artist.tsx @@ -10,7 +10,7 @@ import { ArtistAboutContainer } from "lib/Components/Artist/ArtistAbout/ArtistAb import ArtistArtworks from "lib/Components/Artist/ArtistArtworks/ArtistArtworks" import { ArtistHeaderFragmentContainer } from "lib/Components/Artist/ArtistHeader" import { ArtistInsightsFragmentContainer } from "lib/Components/Artist/ArtistInsights/ArtistInsights" -import { DEFAULT_ARTWORK_SORT } from 'lib/Components/ArtworkFilter/Filters/SortOptions' +import { DEFAULT_ARTWORK_SORT } from "lib/Components/ArtworkFilter/Filters/SortOptions" import { getOnlyFilledSearchCriteriaValues } from "lib/Components/ArtworkFilter/SavedSearch/searchCriteriaHelpers" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { HeaderTabsGridPlaceholder } from "lib/Components/HeaderTabGridPlaceholder" diff --git a/src/lib/Scenes/Artist/SearchCriteria.tsx b/src/lib/Scenes/Artist/SearchCriteria.tsx index 573d2cb69e0..b051bd50705 100644 --- a/src/lib/Scenes/Artist/SearchCriteria.tsx +++ b/src/lib/Scenes/Artist/SearchCriteria.tsx @@ -5,6 +5,7 @@ import { useFeatureFlag } from "lib/store/GlobalStore" import { ProvidePlaceholderContext } from "lib/utils/placeholders" import { isNull } from "lodash" import React from "react" +import { Platform } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { RelayModernEnvironment } from "relay-runtime/lib/store/RelayModernEnvironment" @@ -23,7 +24,8 @@ export interface SearchCriteriaQueryRendererProps { export const SearchCriteriaQueryRenderer: React.FC = (props) => { const { render, searchCriteriaId, environment = defaultEnvironment } = props const { renderComponent, renderPlaceholder } = render - const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") + const enableSavedSearch = + Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") if (enableSavedSearch && searchCriteriaId) { return ( diff --git a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx index ec2aff5c73d..341fa79aeb4 100644 --- a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx +++ b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx @@ -1,4 +1,5 @@ import { SavedSearchBanner } from "lib/Components/Artist/ArtistArtworks/SavedSearchBanner" +import { SavedSearchButtonQueryRenderer } from 'lib/Components/Artist/ArtistArtworks/SavedSearchButton' import { CurrentOption } from "lib/Components/ArtworkFilter" import { PopoverMessage } from "lib/Components/PopoverMessage/PopoverMessage" import { __globalStoreTestUtils__ } from "lib/store/GlobalStore" @@ -123,6 +124,19 @@ describe("Saved search banner on artist screen", () => { expect(textInstances[0].props.children).toEqual("Sorry, an error occured") expect(textInstances[1].props.children).toEqual("Failed to get saved search criteria") }) + + it("should render new saved search component if AREnableSavedSearchV2 flag set to true", async () => { + __globalStoreTestUtils__?.injectFeatureFlags({ AREnableSavedSearchV2: true }) + + const tree = getTree() + + mockMostRecentOperation("ArtistAboveTheFoldQuery", MockArtistAboveTheFoldQuery) + + await flushPromiseQueue() + + expect(tree.root.findAllByType(SavedSearchButtonQueryRenderer)).toHaveLength(1) + expect(tree.root.findAllByType(SavedSearchBanner)).toHaveLength(0) + }) }) const MockSearchCriteriaQuery = { diff --git a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx index 69c12f35dca..7339934ad37 100644 --- a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx +++ b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, ScreenOwnerType, TappedArtistSeri import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { ArtistSeriesConnectionEdge } from "lib/Scenes/ArtistSeries/ArtistSeriesMoreSeries" -import { ArrowRightIcon, color, Flex, Sans, Touchable } from "palette" +import { ArrowRightIcon, Flex, Sans, Touchable, useColor } from "palette" import React from "react" import { useTracking } from "react-tracking" @@ -24,6 +24,7 @@ export const ArtistSeriesListItem: React.FC = ({ horizontalSlidePosition, listItem, }) => { + const color = useColor() const { trackEvent } = useTracking() const artworksCountMessage = listItem?.node?.artworksCountMessage diff --git a/src/lib/Scenes/Artwork/Artwork.tsx b/src/lib/Scenes/Artwork/Artwork.tsx index 0176dbc0491..9d46592ee38 100644 --- a/src/lib/Scenes/Artwork/Artwork.tsx +++ b/src/lib/Scenes/Artwork/Artwork.tsx @@ -20,7 +20,7 @@ import { import { QAInfoPanel } from "lib/utils/QAInfo" import { Schema, screenTrack } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Separator, space, Spacer } from "palette" +import { Box, Separator, Spacer, useSpace } from "palette" import React from "react" import { ActivityIndicator, FlatList, View } from "react-native" import { RefreshControl } from "react-native" @@ -525,6 +525,7 @@ export const ArtworkQueryRenderer: React.FC<{ } const AboveTheFoldPlaceholder: React.FC<{}> = ({}) => { + const space = useSpace() const screenDimensions = useScreenDimensions() // The logic for artworkHeight comes from the zeplin spec https://zpl.io/25JLX0Q const artworkHeight = screenDimensions.width >= 375 ? 340 : 290 diff --git a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx index ff86b52f2f7..fd6848ab605 100644 --- a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx +++ b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx @@ -10,7 +10,7 @@ import { BellFillIcon, BellIcon, Box, - color, + ClassTheme, EyeOpenedIcon, Flex, HeartFillIcon, @@ -107,18 +107,26 @@ export class ArtworkActions extends React.Component { this.handleArtworkSave()}> {is_saved ? : } - - Watch lot - + + {({ color }) => ( + + Watch lot + + )} + ) : ( this.handleArtworkSave()}> {is_saved ? : } - - {is_saved ? "Saved" : "Save"} - + + {({ color }) => ( + + {is_saved ? "Saved" : "Save"} + + )} + )} diff --git a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx index 92ae037f2e3..cfac0ba20a5 100644 --- a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx +++ b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx @@ -4,7 +4,7 @@ import { AuctionTimerState } from "lib/Components/Bidding/Components/Timer" import { navigate } from "lib/navigation/navigate" import { bidderNeedsIdentityVerification } from "lib/utils/auction" import { Schema } from "lib/utils/track" -import { Button, color, Sans } from "palette" +import { Button, ClassTheme, Sans } from "palette" import React from "react" import { Text } from "react-native" import { createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -129,9 +129,13 @@ export class BidButton extends React.Component { return ( <> {isWatchOnly && ( - - Registration closed - + + {({ color }) => ( + + Registration closed + + )} + )} - - - + + + + {partnerName} + + + {name} + + {!!exhibition_period && ( + + {exhibitionDates(exhibition_period, end_at! /* STRICTNESS_MIGRATION */)} + + )} + + + + + + )} + ) } } diff --git a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx index fd52f464f26..7c944665f2d 100644 --- a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx @@ -1,5 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { RelayProp } from "react-relay" @@ -24,15 +25,17 @@ const data = [ describe("CityEvent", () => { it("renders properly", () => { const comp = mount( - - - + + + + + ) expect(comp.text()).toContain("Gallery shows") diff --git a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx index 08384ad36b8..3bacf5be8c6 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx @@ -1,7 +1,8 @@ +import { themeGet } from "@styled-system/theme-get" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, color, Flex, Sans, space } from "palette" +import { Box, Flex, Sans } from "palette" import React, { Component } from "react" import { Dimensions, Image, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -48,7 +49,7 @@ export class FairEventSectionCard extends Component { } const BackgroundImage = styled(OpaqueImageView)` - background: ${color("black60")}; + background: ${themeGet("colors.black60")}; position: absolute; height: 100%; width: 100%; @@ -59,7 +60,7 @@ const Container = styled(Box)` height: 310; position: relative; overflow: hidden; - background: ${color("black60")}; + background: ${themeGet("colors.black60")}; ` // Set background color of overlay based on logo color @@ -74,7 +75,6 @@ const Logo = styled(Image)` width: 100; height: 100; background-color: transparent; - margin-bottom: ${space(1)}; - /* stylelint-disable */ + margin-bottom: ${themeGet("space.1")}px; tint-color: white; ` diff --git a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx index 1a77a6f14cc..041e112d407 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx @@ -1,5 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { FairEventSection } from "../index" @@ -21,9 +22,11 @@ const data = [ describe("FairEventSection", () => { it("renders properly", () => { const comp = mount( - - - + + + + + ) expect(comp.text()).toContain("TEFAF New York Fall 2019") diff --git a/src/lib/Scenes/City/Components/FairEventSection/index.tsx b/src/lib/Scenes/City/Components/FairEventSection/index.tsx index 6a9d699870f..b01da8b45c2 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/index.tsx @@ -1,6 +1,7 @@ +import { themeGet } from "@styled-system/theme-get" import { CaretButton } from "lib/Components/Buttons/CaretButton" import { navigate } from "lib/navigation/navigate" -import { Box, Serif, space } from "palette" +import { Box, ClassTheme, Serif } from "palette" import { Component } from "react" import React from "react" import { FlatList } from "react-native" @@ -9,7 +10,7 @@ import { FairEventSectionCard } from "./Components/FairEventSectionCard" const FairSectionBackground = styled(Box)` background: black; - margin-bottom: ${space(1)}; + margin-bottom: ${themeGet("space.1")}px; ` interface Props { @@ -37,29 +38,33 @@ export class FairEventSection extends Component { render() { const { data } = this.props return ( - - - - Fairs - - - Boolean(fair.image))} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - contentContainerStyle={{ padding: space(2) }} - horizontal - /> - {data.length > 2 && ( - - this.viewAllPressed()} - text={`View all ${data.length} fairs`} - textColor="white" + + {({ space }) => ( + + + + Fairs + + + Boolean(fair.image))} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + contentContainerStyle={{ padding: space(2) }} + horizontal /> - + {data.length > 2 && ( + + this.viewAllPressed()} + text={`View all ${data.length} fairs`} + textColor="white" + /> + + )} + )} - + ) } } diff --git a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx index 314ba4a61c1..0f2f6e3c96c 100644 --- a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx @@ -1,9 +1,10 @@ +import { themeGet } from "@styled-system/theme-get" import ChevronIcon from "lib/Icons/ChevronIcon" import PinSavedOff from "lib/Icons/PinSavedOff" import PinSavedOn from "lib/Icons/PinSavedOn" import { navigate } from "lib/navigation/navigate" import { Track, track as _track } from "lib/utils/track" -import { Box, color, Flex, Sans } from "palette" +import { Box, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -36,7 +37,7 @@ export class SavedEventSection extends Component { {data.length > 1 ? data.length + " saved events" : data.length + " saved event"} - + ) @@ -73,5 +74,5 @@ export class SavedEventSection extends Component { const SavedBox = styled(Box)` border-radius: 2px; border-width: 1px; - border-color: ${color("black30")}; + border-color: ${themeGet("colors.black30")}; ` diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx index bb43833cc16..512bfe264a0 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx @@ -1,6 +1,7 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Fair } from "lib/Scenes/Map/types" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TabFairItemRow } from "../index" @@ -26,9 +27,11 @@ const fairData = ({ describe("TabFairItemRow", () => { it("renders Fair properly", () => { const comp = mount( - - - + + + + + ) expect(comp.text()).toContain("TEFAF New York Spring 2019") diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx index a80c38d3e16..d7370ceae42 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx @@ -1,7 +1,7 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, Flex, Sans, space } from "palette" +import { Box, ClassTheme, Flex, Sans } from "palette" import React from "react" import { Dimensions, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -17,33 +17,41 @@ export class TabFairItemRow extends React.Component { render() { const { item } = this.props - const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) const fairImage = item.image ? item.image.url : null return ( - this.handleTap(item)}> - - - - - - {!!item.name && ( - - {item.name} - - )} - {!!item.counts && !!item.counts.partners && ( - - {item.counts.partners > 1 ? `${item.counts.partners} Exhibitors` : `${item.counts.partners} Exhibitor`} - - )} - {!!item.exhibition_period && ( - - {item.exhibition_period} - - )} - - - + + {({ space }) => { + const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) + return ( + this.handleTap(item)}> + + + + + + {!!item.name && ( + + {item.name} + + )} + {!!item.counts && !!item.counts.partners && ( + + {item.counts.partners > 1 + ? `${item.counts.partners} Exhibitors` + : `${item.counts.partners} Exhibitor`} + + )} + {!!item.exhibition_period && ( + + {item.exhibition_period} + + )} + + + + ) + }} + ) } } diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx index ef7488eb557..a6c946a841a 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx @@ -21,6 +21,7 @@ import { CollectionArtistSeriesRail, CollectionArtistSeriesRailContainer, } from "lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/CollectionArtistSeriesRail" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Sans, Theme } from "palette" import { useTracking } from "react-tracking" @@ -123,9 +124,11 @@ describe("Artist Series Rail", () => { it("renders the Trending Artists Series rail component", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(GenericArtistSeriesRail)).toHaveLength(1) @@ -133,9 +136,11 @@ describe("Artist Series Rail", () => { it("renders three artist series in the Trending Artists Series", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(ArtworkImageContainer)).toHaveLength(3) @@ -143,9 +148,11 @@ describe("Artist Series Rail", () => { it("renders three images of the correct size in an artist series", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(ImageView).at(0).props().imageURL).toBe( @@ -175,9 +182,11 @@ describe("Artist Series Rail", () => { it("renders the collection hub rail title", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(Sans).text()).toBe("Trending Artist Series") @@ -185,9 +194,11 @@ describe("Artist Series Rail", () => { it("renders each artist series' title", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(GenericArtistSeriesTitle).at(0).text()).toBe("Cindy Sherman: Untitled Film Stills") @@ -199,9 +210,11 @@ describe("Artist Series Rail", () => { it("renders each artist series' metadata", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(GenericArtistSeriesMeta).at(0).text()).toBe("From $20,000") @@ -213,9 +226,11 @@ describe("Artist Series Rail", () => { it("navigates to a new collection when a series is tapped", () => { const wrapper = mount( - - - + + + + + ) wrapper.find(CardRailCard).at(0).props().onPress() diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx index 223041cbc21..3e8e00bd053 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx @@ -1,3 +1,4 @@ +import { themeGet } from "@styled-system/theme-get" import { FeaturedCollectionsRail_collection } from "__generated__/FeaturedCollectionsRail_collection.graphql" import { FeaturedCollectionsRail_collectionGroup } from "__generated__/FeaturedCollectionsRail_collectionGroup.graphql" import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" @@ -6,7 +7,7 @@ import { navigate } from "lib/navigation/navigate" import { defaultRules } from "lib/utils/renderMarkdown" import { renderMarkdown } from "lib/utils/renderMarkdown" import { Schema } from "lib/utils/track" -import { color, Flex, Sans, Spacer, Touchable } from "palette" +import { Flex, Sans, Spacer, Touchable, useColor } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -20,6 +21,7 @@ interface FeaturedCollectionsRailProps { type FeaturedCollection = FeaturedCollectionsRail_collectionGroup["members"][0] export const FeaturedCollectionsRail: React.FC = (props) => { + const color = useColor() const tracking = useTracking() const { collection, collectionGroup } = props const collections = collectionGroup?.members ?? [] @@ -107,7 +109,7 @@ export const FeaturedCollectionsRail: React.FC = ( } export const ImageWrapper = styled(Flex)` - border: solid 1px ${color("black10")}; + border: solid 1px ${themeGet("colors.black10")}; height: 385px; width: 260px; border-radius: 5px; diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx index 5dd3bcd230c..0bbe596a1c8 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx @@ -1,25 +1,19 @@ import { OtherCollectionsRail_collectionGroup } from "__generated__/OtherCollectionsRail_collectionGroup.graphql" import { CardRailFlatList } from "lib/Components/Home/CardRailFlatList" import { navigate } from "lib/navigation/navigate" -import { Sans, Spacer } from "palette" +import { Sans, SansProps, Spacer } from "palette" import React, { useRef } from "react" import { TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" -import styled from "styled-components/native" export interface OtherCollectionsRailProps { collectionGroup: OtherCollectionsRail_collectionGroup } -export const CollectionGroupMemberPill = styled(Sans).attrs({ - px: 3, - py: 2, - size: "3t", - bg: "black10", -})` - overflow: hidden; - border-radius: 6px; -` +export const CollectionGroupMemberPill: React.FC> = (props) => ( + // @ts-ignore + +) export const OtherCollectionsRail: React.FC = ({ collectionGroup: { name, members } }) => { const ref = useRef(null) diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx index 9b33f7339b9..f3006056ab7 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx @@ -15,7 +15,7 @@ describe("Other Collections Rail", () => { const { root } = renderWithWrappers() const { props: { children }, - } = root.findByType(Sans) + } = root.findAllByType(Sans)[0] expect(children).toContain("Browse by Movement") }) diff --git a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx index b39c9af2d0d..1286e2b8437 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx @@ -1,5 +1,6 @@ import { FeaturedArtistsTestsQueryRawResponse } from "__generated__/FeaturedArtistsTestsQuery.graphql" import { navigate } from "lib/navigation/navigate" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { postEventToProviders } from "lib/utils/track/providers" @@ -104,9 +105,11 @@ describe("FeaturedArtists", () => { const render = (collection: FeaturedArtistsTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - + + + + + )), query: graphql` query FeaturedArtistsTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx index 070ac52ef82..929ae82bc8a 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx @@ -1,4 +1,5 @@ import { FullFeaturedArtistListTestsQueryRawResponse } from "__generated__/FullFeaturedArtistListTestsQuery.graphql" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" @@ -12,9 +13,11 @@ describe("FullFeaturedArtistList", () => { const render = (collection: FullFeaturedArtistListTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - + + + + + )), query: graphql` query FullFeaturedArtistListTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx index 5f82cad3907..e13f35af673 100644 --- a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx +++ b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx @@ -3,6 +3,7 @@ import { CollectionHeaderTestsQueryRawResponse } from "__generated__/CollectionH import { mount } from "enzyme" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { ReadMore } from "lib/Components/ReadMore" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Sans, Theme } from "palette" import React from "react" @@ -15,9 +16,11 @@ jest.unmock("react-relay") it("renders without throwing an error", async () => { await renderRelayTree({ Component: (props: any) => ( - - - + + + + + ), query: graphql` query CollectionHeaderTestsQuery @raw_response_type { @@ -40,18 +43,22 @@ describe("collection header", () => { it("passes the collection header image url to collection header", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("http://imageuploadedbymarketingteam.jpg") }) it("passes the collection header title to collection header", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(Sans).at(0).html()).toContain("Street Art Now") @@ -60,9 +67,11 @@ describe("collection header", () => { it("passes the url of the most marketable artwork in the collection to the collection header when there is no headerImage value present", () => { props.collection.headerImage = null const wrapper = mount( - - - + + + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("https://defaultmostmarketableartworkincollectionimage.jpg") }) @@ -70,18 +79,22 @@ describe("collection header", () => { it("does not render the Read More component when there is no description", () => { props.collection.descriptionMarkdown = null const wrapper = mount( - - - + + + + + ) expect(wrapper.find(ReadMore).exists()).toBe(false) }) it("passes the collection header description to collection header", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find(ReadMore).exists()).toBe(true) diff --git a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx index 130193e833f..1d8afa876b8 100644 --- a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx +++ b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx @@ -1,5 +1,6 @@ +import { themeGet } from "@styled-system/theme-get" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { color, Touchable } from "palette" +import { Touchable, useColor } from "palette" import React from "react" import { Dimensions, FlatList, Image, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -16,7 +17,7 @@ const SelectedIndicator = styled.View` ` const Overlay = styled.View` - ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${color("black80")}`}; + ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${themeGet("colors.black80")}`}; ` export interface ImageData { @@ -65,6 +66,7 @@ const TakePhotoImage = (props: TakePhotoImageProps) => { } const ImageForURI = (props: ImagePreviewProps) => { + const color = useColor() const { width } = useScreenDimensions() const imageSize = (width - 60) / 2 diff --git a/src/lib/Scenes/Consignments/Components/SearchResults.tsx b/src/lib/Scenes/Consignments/Components/SearchResults.tsx index 43660b5e535..20b50141cfb 100644 --- a/src/lib/Scenes/Consignments/Components/SearchResults.tsx +++ b/src/lib/Scenes/Consignments/Components/SearchResults.tsx @@ -1,4 +1,4 @@ -import { Box, color, Flex, Sans, Spacer } from "palette" +import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" import React from "react" import { ScrollView, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -24,9 +24,13 @@ const noResults = (props: SearchQueryProps) => { return null } return ( - - {props.noResultsMessage} {props.query} - + + {({ color }) => ( + + {props.noResultsMessage} {props.query} + + )} + ) } diff --git a/src/lib/Scenes/Consignments/Components/TextArea.tsx b/src/lib/Scenes/Consignments/Components/TextArea.tsx index 08d44f65494..240aab84966 100644 --- a/src/lib/Scenes/Consignments/Components/TextArea.tsx +++ b/src/lib/Scenes/Consignments/Components/TextArea.tsx @@ -1,13 +1,13 @@ +import { themeGet } from "@styled-system/theme-get" import colors from "lib/data/colors" import fonts from "lib/data/fonts" -import { color } from "palette" import React from "react" import { Platform, TextInputProps, View, ViewProps } from "react-native" import styled from "styled-components/native" const Input = styled.TextInput` height: 100%; - color: ${color("black100")}; + color: ${themeGet("colors.black100")}; font-family: "${fonts["unica77ll-regular"]}"; font-size: 16; ` diff --git a/src/lib/Scenes/Consignments/Components/TextInput.tsx b/src/lib/Scenes/Consignments/Components/TextInput.tsx index 65c2066a0d5..6e0ee78dfbb 100644 --- a/src/lib/Scenes/Consignments/Components/TextInput.tsx +++ b/src/lib/Scenes/Consignments/Components/TextInput.tsx @@ -1,5 +1,6 @@ +import { themeGet } from "@styled-system/theme-get" import { Fonts } from "lib/data/fonts" -import { Box, color } from "palette" +import { Box, ClassTheme, useColor } from "palette" import React, { FunctionComponent } from "react" import { ActivityIndicator, @@ -31,13 +32,14 @@ interface State { const Input = styled.TextInput` height: 40; - color: ${color("black100")}; + color: ${themeGet("colors.black100")}; font-family: "${Fonts.Unica77LLRegular}"; font-size: 16; flex: 1; ` const Separator = (focused: boolean) => { + const color = useColor() return ( { ) } -const ReadOnlyInput = (props: TextInputProps) => ( - - {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} - -) +const ReadOnlyInput = (props: TextInputProps) => { + const color = useColor() + return ( + + {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} + + ) +} export default class TextInputField extends React.Component { inputRef: TextInput | null = null @@ -85,49 +90,55 @@ export default class TextInputField extends React.Component - - { - // LocationIcon needs offset because the pin icon from pallete - // is centered on the pin's tip - } - {!!LocationIcon && ( - - - - )} - {!!this.props.preImage && } - {this.props.readonly ? ( - ReadOnlyInput(this.props) - ) : ( - (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} - autoCorrect={false} - clearButtonMode="while-editing" - keyboardAppearance="dark" - placeholderTextColor={color("black60")} - selectionColor={color("black60")} - {...this.props.text} - autoFocus={false} - onFocus={(e) => - this.setState( - { focused: true }, - () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) - ) - } - onBlur={(e) => - this.setState( - { focused: false }, - () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) - ) + + {({ color }) => ( + + + { + // LocationIcon needs offset because the pin icon from pallete + // is centered on the pin's tip } - /> - )} + {!!LocationIcon && ( + + + + )} + {!!this.props.preImage && ( + + )} + {this.props.readonly ? ( + ReadOnlyInput(this.props) + ) : ( + (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} + autoCorrect={false} + clearButtonMode="while-editing" + keyboardAppearance="dark" + placeholderTextColor={color("black60")} + selectionColor={color("black60")} + {...this.props.text} + autoFocus={false} + onFocus={(e) => + this.setState( + { focused: true }, + () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) + ) + } + onBlur={(e) => + this.setState( + { focused: false }, + () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) + ) + } + /> + )} - {this.props.searching ? : null} - - {Separator(this.state.focused)} - + {this.props.searching ? : null} + + {Separator(this.state.focused)} + + )} + ) } } diff --git a/src/lib/Scenes/Consignments/Components/Toggle.tsx b/src/lib/Scenes/Consignments/Components/Toggle.tsx index 376e1751e4f..b5b2631f69a 100644 --- a/src/lib/Scenes/Consignments/Components/Toggle.tsx +++ b/src/lib/Scenes/Consignments/Components/Toggle.tsx @@ -1,5 +1,5 @@ import fonts from "lib/data/fonts" -import { color } from "palette" +import { ClassTheme } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -63,17 +63,21 @@ const render = (props: ToggleProps) => { const Circle = WhiteCircle return ( - - - - {selected ? props.left : ""} - {selected ? "" : props.right} - - - - - - + + {({ color }) => ( + + + + {selected ? props.left : ""} + {selected ? "" : props.right} + + + + + + + )} + ) } diff --git a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx index 2b57fdb61dc..7e1e6779654 100644 --- a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx +++ b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx @@ -3,7 +3,7 @@ import Spinner from "lib/Components/Spinner" import { dismissModal, navigate } from "lib/navigation/navigate" import NavigatorIOS from "lib/utils/__legacy_do_not_use__navigator-ios-shim" import { Schema, screenTrack } from "lib/utils/track" -import { Box, Button, color, Flex, Sans, Spacer } from "palette" +import { Box, Button, ClassTheme, Flex, Sans, Spacer } from "palette" import React from "react" import { Alert, BackHandler, NativeEventSubscription, View, ViewProps } from "react-native" import styled from "styled-components/native" @@ -98,57 +98,66 @@ export default class Confirmation extends React.Component { ) successContent = () => ( - - - - Thank you for submitting your consignment - - - - Our team of specialists are reviewing your work. You'll receive an email update once the status of your - submission changes. - - - - If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. - - - - - - - - - + + {({ color }) => ( + + + + Thank you for submitting your consignment + + + + Our team of specialists are reviewing your work. You'll receive an email update once the status of your + submission changes. + + + + If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. + + + + + + + + + + )} + ) + failedContent = () => ( - - - - Submission failed - - - - We’re sorry, something went wrong. Please try submitting your consignment again. - - - - - - - - - - - + + {({ color }) => ( + + + + Submission failed + + + + We’re sorry, something went wrong. Please try submitting your consignment again. + + + + + + + + + + + + )} + ) confirmationContent() { diff --git a/src/lib/Scenes/Consignments/Screens/Location.tsx b/src/lib/Scenes/Consignments/Screens/Location.tsx index 92f409bfb0a..e5a02f66578 100644 --- a/src/lib/Scenes/Consignments/Screens/Location.tsx +++ b/src/lib/Scenes/Consignments/Screens/Location.tsx @@ -9,7 +9,6 @@ import { ConsignmentSetup, LocationResult } from "../index" import { stringify } from "qs" import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" -import { Theme } from "palette" import { Dimensions } from "react-native" import Config from "react-native-config" import { BottomAlignedButton } from "../Components/BottomAlignedButton" @@ -105,31 +104,29 @@ export default class Location extends React.Component { const isPad = Dimensions.get("window").width > 700 return ( - - - Location - - - results={this.state.results} - query={this.state.query} - onChangeText={this.textChanged} - searching={this.state.searching} - resultSelected={this.locationSelected} - LocationIcon={LocationIcon} - placeholder="City, Country" - noResultsMessage="Could not find" - /> - - - + + Location + + + results={this.state.results} + query={this.state.query} + onChangeText={this.textChanged} + searching={this.state.searching} + resultSelected={this.locationSelected} + LocationIcon={LocationIcon} + placeholder="City, Country" + noResultsMessage="Could not find" + /> + + ) } } diff --git a/src/lib/Scenes/Fair/Components/FairEditorial.tsx b/src/lib/Scenes/Fair/Components/FairEditorial.tsx index dbb4e94e9e1..a9efc30d330 100644 --- a/src/lib/Scenes/Fair/Components/FairEditorial.tsx +++ b/src/lib/Scenes/Fair/Components/FairEditorial.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, TappedArticleGroup } from "@artsy import { FairEditorial_fair } from "__generated__/FairEditorial_fair.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" -import { Box, BoxProps, color, Text, Touchable } from "palette" +import { Box, BoxProps, Text, Touchable, useColor } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -12,6 +12,7 @@ interface FairEditorialProps extends BoxProps { } export const FairEditorial: React.FC = ({ fair, ...rest }) => { + const color = useColor() const tracking = useTracking() const trackTappedArticle = (articleID: string, articleSlug: string) => { @@ -91,7 +92,7 @@ export const FairEditorialFragmentContainer = createFragmentContainer(FairEditor fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { totalCount edges { node { diff --git a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx index 76ef819eafc..81121006186 100644 --- a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx +++ b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx @@ -1,4 +1,4 @@ -import { Box, color, Flex, Text } from "palette" +import { Box, Flex, Text, useColor } from "palette" import React, { Dispatch, SetStateAction } from "react" import { TouchableOpacity, View } from "react-native" @@ -43,6 +43,7 @@ interface TabsProps { * Renders a list of tabs. Evenly-spaces them across the screen. */ export const Tabs: React.FC = ({ setActiveTab, activeTab, tabs }) => { + const color = useColor() const tabWidth = 100 / tabs.length return ( = ({ fair, relay }) => { + const space = useSpace() const articles = fair.articlesConnection?.edges const totalCount = fair.articlesConnection?.totalCount ?? 0 const [isLoading, setIsLoading] = useState(false) @@ -160,7 +161,7 @@ export const FairArticlesPaginationContainer = createPaginationContainer( fair: graphql` fragment FairArticles_fair on Fair @argumentDefinitions(first: { type: "Int" }, after: { type: "String" }) { slug - articlesConnection(first: $first, after: $after) @connection(key: "FairArticlesQuery_articlesConnection") { + articlesConnection(first: $first, after: $after, inEditorialFeed: true) @connection(key: "FairArticlesQuery_articlesConnection") { totalCount edges { node { diff --git a/src/lib/Scenes/Favorites/FavoriteArtists.tsx b/src/lib/Scenes/Favorites/FavoriteArtists.tsx index 50db3fa9a19..f0a88499726 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtists.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtists.tsx @@ -15,7 +15,7 @@ import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabP import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" -import { space, Spacer } from "palette" +import { ClassTheme, Spacer } from "palette" interface Props { me: FavoriteArtists_me @@ -83,18 +83,24 @@ class Artists extends React.Component { } return ( - } - style={{ paddingHorizontal: 0 }} - ItemSeparatorComponent={() => } - ListFooterComponent={ - this.state.fetchingMoreData ? : null - } - /> + + {({ space }) => ( + + } + style={{ paddingHorizontal: 0 }} + ItemSeparatorComponent={() => } + ListFooterComponent={ + this.state.fetchingMoreData ? : null + } + /> + )} + ) } } diff --git a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx index 1ce854d84b0..130b10a9056 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx @@ -14,7 +14,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, space } from "palette" +import { Button, ClassTheme } from "palette" interface Props { me: FavoriteArtworks_me @@ -96,13 +96,19 @@ export class SavedWorks extends Component { } return ( - } - > - - + + {({ space }) => ( + + } + > + + + )} + ) } } diff --git a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx index d6a638af797..7f3c69b37b3 100644 --- a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx +++ b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx @@ -1,4 +1,4 @@ -import { ArtsyLogoIcon, Button, color, Flex, Text } from "palette" +import { ArtsyLogoIcon, Button, Flex, Text, useColor } from "palette" import React from "react" import { Linking, Platform } from "react-native" @@ -10,6 +10,7 @@ const PLAYSTORE_URL = "https://play.google.com/store/apps/details?id=net.artsy.a const APP_STORE_URL = "https://apps.apple.com/us/app/artsy-buy-sell-original-art/id703796080" export const ForceUpdate: React.FC = ({ forceUpdateMessage }) => { + const color = useColor() const handleUpdate = () => { const storeURL = Platform.OS === "android" ? PLAYSTORE_URL : APP_STORE_URL Linking.canOpenURL(storeURL).then( diff --git a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx index 65543287024..820f4e5a85f 100644 --- a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx +++ b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx @@ -1,4 +1,4 @@ -import { color, Flex, Sans, SansProps, Spinner } from "palette" +import { Flex, Sans, SansProps, Spinner, useColor } from "palette" import React, { FC, useState } from "react" import { Image, TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -45,6 +45,7 @@ const submitMutation = async (relayEnvironment: Environment) => { } export const EmailConfirmationBanner: React.FC = ({ me, relay }) => { + const color = useColor() const [shouldDisplayBanner, toggleVisible] = useState(me?.canRequestEmailConfirmation) const [isLoading, setLoading] = useState(false) const [confirmed, setConfirmed] = useState(false) diff --git a/src/lib/Scenes/Home/Components/HomeHero.tsx b/src/lib/Scenes/Home/Components/HomeHero.tsx index 2d8653003c7..8efd9ec71f2 100644 --- a/src/lib/Scenes/Home/Components/HomeHero.tsx +++ b/src/lib/Scenes/Home/Components/HomeHero.tsx @@ -3,7 +3,7 @@ import { HomeHero_homePage } from "__generated__/HomeHero_homePage.graphql" import { navigate } from "lib/navigation/navigate" import { isPad } from "lib/utils/hardware" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { color, Flex, Sans } from "palette" +import { Flex, Sans, useColor } from "palette" import React, { useState } from "react" import { Image, TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -16,6 +16,7 @@ const useHeroDimensions = () => { } const HomeHero: React.FC<{ homePage: HomeHero_homePage }> = ({ homePage }) => { + const color = useColor() const tracking = useTracking() const [hasLoaded, setHasLoaded] = useState(false) const unit = homePage?.heroUnits?.[0] diff --git a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx index d53e284569d..6dbf4456144 100644 --- a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx +++ b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx @@ -53,7 +53,7 @@ export const SaleArtworksHomeRail: React.FC = ({ me, relay, onShow, onHid navigate("/lots-by-artists-you-follow")} /> diff --git a/src/lib/Scenes/Home/Components/SalesRail.tsx b/src/lib/Scenes/Home/Components/SalesRail.tsx index 7af998c8cbb..d5285d20606 100644 --- a/src/lib/Scenes/Home/Components/SalesRail.tsx +++ b/src/lib/Scenes/Home/Components/SalesRail.tsx @@ -1,4 +1,3 @@ -import { OwnerType } from "@artsy/cohesion" import { SalesRail_salesModule } from "__generated__/SalesRail_salesModule.graphql" import { CARD_RAIL_ARTWORKS_HEIGHT as ARTWORKS_HEIGHT, @@ -13,8 +12,6 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" import { formatDisplayTimelyAt } from "lib/Scenes/Sale/helpers" import { extractNodes } from "lib/utils/extractNodes" -import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" -import { screen } from "lib/utils/track/helpers" import { compact } from "lodash" import { bullet, Flex, Sans } from "palette" import React, { useImperativeHandle, useRef } from "react" @@ -49,83 +46,75 @@ const SalesRail: React.FC = (props) => { } return ( - - - - { - tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) - navigate("/auctions") - }} - /> - - - listRef={listRef} - data={props.salesModule.results} - renderItem={({ item: result, index }) => { - // Sales are expected to always have >= 2 artworks, but we should - // still be cautious to avoid crashes if this assumption is broken. - const availableArtworkImageURLs = compact( - extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) - ) - - // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 - const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { - return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] - }, []) - - return ( - { - tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) - const url = result?.liveURLIfOpen ?? result?.href - if (url) { - navigate(url) - } - }} - > - - - - - - - - - - - - - {result?.name} - - - {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} - - - - - ) + + + { + tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) + navigate("/auctions") }} /> - - + + + listRef={listRef} + data={props.salesModule.results} + renderItem={({ item: result, index }) => { + // Sales are expected to always have >= 2 artworks, but we should + // still be cautious to avoid crashes if this assumption is broken. + const availableArtworkImageURLs = compact( + extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) + ) + + // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 + const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { + return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] + }, []) + + return ( + { + tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) + const url = result?.liveURLIfOpen ?? result?.href + if (url) { + navigate(url) + } + }} + > + + + + + + + + + + + + + {result?.name} + + + {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} + + + + + ) + }} + /> + ) } diff --git a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx index c380b2b149e..d4e6bbd803c 100644 --- a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx +++ b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx @@ -48,7 +48,7 @@ describe("SaleArtworksHomeRail", () => { await flushPromiseQueue() expect(onShowMock).toHaveBeenCalled() - expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction lots for you ending soon") + expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction Lots for You Ending Soon") expect(tree.root.findAllByType(SaleArtworkTileRailCardContainer)).toHaveLength(PAGE_SIZE) }) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx index 79841fde1e0..74f99630375 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx @@ -1,8 +1,9 @@ +import { themeGet } from "@styled-system/theme-get" import { Composer_conversation } from "__generated__/Composer_conversation.graphql" import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingView" import colors from "lib/data/colors" import { Schema, Track, track as _track } from "lib/utils/track" -import { Button, color, Flex, themeProps } from "palette" +import { Button, ClassTheme, Flex, themeProps } from "palette" import React from "react" import { Keyboard, TextInput, TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -18,7 +19,7 @@ const Container = styled.View` justify-content: space-between; align-items: flex-start; border-top-width: 1; - border-top-color: ${color("black10")}; + border-top-color: ${themeGet("colors.black10")}; padding: 10px; background-color: ${(p: ContainerProps) => (p.active ? "white" : colors["gray-light"])}; ` @@ -73,45 +74,50 @@ export default class Composer extends React.Component { render() { const disableSendButton = !(this.state.text && this.state.text.length) || this.props.disabled - // The TextInput loses its isFocused() callback as a styled component - const inputStyles = { - flex: 1, - fontSize: 13, - paddingLeft: 10, - paddingTop: 13, - paddingBottom: 10, - paddingRight: 10, - borderColor: this.state.active ? color("purple100") : "transparent", - borderWidth: 1, - fontFamily: themeProps.fontFamily.sans.regular.normal, - } - return ( - - {this.props.children} - - - - this.setState({ active: false })} - onFocus={() => this.setState({ active: this.input.isFocused() })} - onChangeText={(text) => this.setState({ text })} - ref={(input) => (this.input = input)} - style={inputStyles} - multiline={true} - value={this.state.text || undefined} - /> - - - - - - + + {({ color }) => { + // The TextInput loses its isFocused() callback as a styled component + const inputStyles = { + flex: 1, + fontSize: 13, + paddingLeft: 10, + paddingTop: 13, + paddingBottom: 10, + paddingRight: 10, + borderColor: this.state.active ? color("purple100") : "transparent", + borderWidth: 1, + fontFamily: themeProps.fontFamily.sans.regular.normal, + } + return ( + + {this.props.children} + + + + this.setState({ active: false })} + onFocus={() => this.setState({ active: this.input.isFocused() })} + onChangeText={(text) => this.setState({ text })} + ref={(input) => (this.input = input)} + style={inputStyles} + multiline={true} + value={this.state.text || undefined} + /> + + + + + + + ) + }} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx index e2f61933038..942d50e445c 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx @@ -9,7 +9,7 @@ import { Colors } from "lib/data/colors" import styled from "styled-components/native" import { ConversationSnippet_conversation } from "__generated__/ConversationSnippet_conversation.graphql" -import { color, Flex, Sans, Touchable } from "palette" +import { ClassTheme, Flex, Sans, Touchable } from "palette" const Unread = styled(Flex)` height: 14; @@ -89,58 +89,57 @@ export class ConversationSnippet extends React.Component { // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 const date = moment(conversation.lastMessageAt).fromNow(true) + " ago" return ( - this.conversationSelected()} underlayColor={color("black5")}> - - - - {!!conversation.unread && ( - - - - )} - - - - - - - {partnerName} - - - + + {({ color }) => ( + this.conversationSelected()} underlayColor={color("black5")}> + + - - {date} - + {!!conversation.unread && ( + + + + )} + + + + + + + {partnerName} + + + + + + {date} + + + + {!!conversationText && ( + + {conversationText} + + )} - {!!conversationText && ( - - {conversationText} - - )} - - - + + )} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx index b661fe19d04..dbc6843bf52 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx @@ -16,7 +16,7 @@ import { extractNodes } from "lib/utils/extractNodes" import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import { ActionNames, ActionTypes } from "lib/utils/track/schema" -import { color, Flex, Sans, Separator } from "palette" +import { Flex, Sans, Separator, useColor } from "palette" import { useTracking } from "react-tracking" interface Props { @@ -31,6 +31,7 @@ type Item = NonNullable = (props) => { + const color = useColor() const [isLoading, setIsLoading] = React.useState(false) const [isFetching, setIsFetching] = React.useState(false) const { trackEvent } = useTracking() diff --git a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx index 72d4f30a588..31b5b619335 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx @@ -1,4 +1,5 @@ -import { BorderBox, color, Flex, Text, Touchable } from "palette" +import { themeGet } from "@styled-system/theme-get" +import { BorderBox, Flex, Text, Touchable, useColor } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -9,11 +10,12 @@ const UnavailableIndicator = styled(View)` height: 8px; width: 8px; border-radius: 4px; - background-color: ${color("red100")}; + background-color: ${themeGet("colors.red100")}; margin-right: 6px; ` export const RadioButton: React.FC<{ selected: boolean }> = (props) => { + const color = useColor() const { selected } = props return ( { message: Message_message showTimeSince?: boolean @@ -95,25 +90,39 @@ export class Message extends React.Component { render() { const { message, showTimeSince } = this.props const { isFromUser, body } = message - const backgroundColor = color(isFromUser ? "black100" : "black10") const textColor = isFromUser ? "white100" : "black100" const alignSelf = isFromUser ? "flex-end" : undefined const alignAttachments = isFromUser ? "flex-end" : "flex-start" return ( - <> - - - - - {body} - - - - {!!message.attachments?.length && } - {this.renderAttachmentPreviews(message.attachments, backgroundColor)} - - {showTimeSince && } - + + {({ color }) => { + const backgroundColor = color(isFromUser ? "black100" : "black10") + const linkStyle = { + color: color("purple100"), + textDecorationLine: "underline", + } + return ( + <> + + + + + {body} + + + + {!!message.attachments?.length && } + {this.renderAttachmentPreviews(message.attachments, backgroundColor)} + + {!!showTimeSince && } + + ) + }} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx index 68ff97360a3..48bbdbc3d45 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx @@ -1,12 +1,15 @@ -import { color, IconProps } from "palette" +import { IconProps, useColor } from "palette" import React from "react" import Svg, { Path } from "react-native-svg" -export const OfferIcon: React.FC = (props) => ( - - - -) +export const OfferIcon: React.FC = (props) => { + const color = useColor() + return ( + + + + ) +} diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx index 5ec06e9b5f5..cf325b8cba4 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx @@ -5,19 +5,20 @@ import styled from "styled-components/native" import { ArtworkPreview_artwork } from "__generated__/ArtworkPreview_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { Colors } from "lib/data/colors" -import { color, Flex, Text, Touchable } from "palette" +import { Flex, Text, Touchable } from "palette" +import { themeGet } from "@styled-system/theme-get" import { Schema, Track, track as _track } from "lib/utils/track" const Container = styled.View` - background-color: ${color("black100")}; + background-color: ${themeGet("colors.black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${color("black10")}; + background-color: ${themeGet("colors.black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx index 7cd4704783d..71a5942db7d 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx @@ -4,7 +4,7 @@ import { createFragmentContainer, graphql } from "react-relay" import styled from "styled-components/native" import { AttachmentPreview_attachment } from "__generated__/AttachmentPreview_attachment.graphql" -import { color, Touchable } from "palette" +import { ClassTheme, Touchable } from "palette" const Container = styled.View` flex-direction: column; @@ -26,12 +26,16 @@ export class AttachmentPreview extends React.Component { render() { const { attachment, children, onSelected } = this.props return ( - onSelected?.(findNodeHandle(this)!, attachment.internalID)} - > - {children} - + + {({ color }) => ( + onSelected?.(findNodeHandle(this)!, attachment.internalID)} + > + {children} + + )} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx index 471ec8b566f..a0edca466da 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx @@ -14,6 +14,7 @@ export const NoBorderContainer = styled.View` flex: 1; flex-direction: row; ` + interface Props extends AttachmentProps { attachment: FileDownload_attachment tiny?: boolean diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx index b30763b92ad..07dc39cb531 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx @@ -1,25 +1,24 @@ +import { Schema, Track, track as _track } from "lib/utils/track" +import { Flex, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" -import { Schema, Track, track as _track } from "lib/utils/track" - -import { color, Flex, Text, Touchable } from "palette" - import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import colors from "lib/data/colors" import styled from "styled-components/native" +import { themeGet } from "@styled-system/theme-get" import { ShowPreview_show } from "__generated__/ShowPreview_show.graphql" const Container = styled.View` - background-color: ${color("black100")}; + background-color: ${themeGet("colors.black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${color("black10")}; + background-color: ${themeGet("colors.black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx index 848084fbfe1..9109885b1a9 100644 --- a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx +++ b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx @@ -108,7 +108,7 @@ export const ConversationDetailsFragmentContainer = createFragmentContainer(Conv `, }) -export const ConversationDetailsQueryRenderer: React.SFC<{ +export const ConversationDetailsQueryRenderer: React.FC<{ conversationID: string }> = ({ conversationID }) => { return ( diff --git a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx index e71a22496f2..f0c953a1977 100644 --- a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx +++ b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx @@ -1,7 +1,7 @@ import Spinner from "lib/Components/Spinner" import ChevronIcon from "lib/Icons/ChevronIcon" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" -import { Box, color, Flex, Sans } from "palette" +import { Box, ClassTheme, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -32,42 +32,47 @@ export class CitySwitcherButton extends Component { render() { const { city, isLoading, sponsoredContentUrl } = this.props return isLoading || city ? ( - { - if (this.props.onPress) { - this.props.onPress() - } - LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { - ...(sponsoredContentUrl && { sponsoredContentUrl }), - }) - }} - > - - {city ? ( - <> - - {city.name} - - - - - - ) : ( - - - - )} - - + + {({ color }) => ( + { + if (this.props.onPress) { + this.props.onPress() + } + LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { + ...(sponsoredContentUrl && { sponsoredContentUrl }), + }) + }} + > + + {city ? ( + <> + + {city.name} + + + {/* @ts-ignore */} + + + + ) : ( + + + + )} + + + )} + ) : null } } diff --git a/src/lib/Scenes/Map/Components/ShowCard.tsx b/src/lib/Scenes/Map/Components/ShowCard.tsx index cec5de63032..afcd7f7cf87 100644 --- a/src/lib/Scenes/Map/Components/ShowCard.tsx +++ b/src/lib/Scenes/Map/Components/ShowCard.tsx @@ -1,8 +1,9 @@ +import { themeGet } from "@styled-system/theme-get" import { ShowItemRow } from "lib/Components/Lists/ShowItemRow" import { navigate } from "lib/navigation/navigate" import { TabFairItemRow } from "lib/Scenes/City/Components/TabFairItemRow" import { isEqual } from "lodash" -import { Box, color, Sans, space } from "palette" +import { Box, ClassTheme, Sans } from "palette" import React, { Component } from "react" import { Dimensions, FlatList, TouchableOpacity } from "react-native" import { RelayProp } from "react-relay" @@ -17,7 +18,7 @@ const shadowDetails: any = { } const Background = styled(Box)` - background: ${color("white100")}; + background: ${themeGet("colors.white100")}; height: 82; border-radius: 2px; ` @@ -35,9 +36,9 @@ interface ShowCardState { } const PageIndicator = styled(Box)` - height: ${space(2)}px; - border-radius: ${space(1)}px; - background: ${color("white100")}; + height: ${themeGet("space.2")}px; + border-radius: ${themeGet("space.1")}px; + background: ${themeGet("colors.white100")}; margin-left: 15px; margin-right: auto; margin-top: -15px; @@ -147,28 +148,32 @@ export class ShowCard extends Component { return hasOne ? ( show && this.renderItem({ item: show }, true) ) : ( - <> - - {`${currentPage} of ${shows.length}`} - - (this.list = c as any)} - data={shows} - style={{ marginHorizontal: "auto" }} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - onScroll={this.onScroll} - showsHorizontalScrollIndicator={false} - snapToInterval={this.cardWidth + space(1)} - contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} - scrollEventThrottle={299} - directionalLockEnabled={true} - overScrollMode="always" - snapToAlignment="start" - decelerationRate="fast" - horizontal - /> - + + {({ space }) => ( + <> + + {`${currentPage} of ${shows.length}`} + + (this.list = c as any)} + data={shows} + style={{ marginHorizontal: "auto" }} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + onScroll={this.onScroll} + showsHorizontalScrollIndicator={false} + snapToInterval={this.cardWidth + space(1)} + contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} + scrollEventThrottle={299} + directionalLockEnabled={true} + overScrollMode="always" + snapToAlignment="start" + decelerationRate="fast" + horizontal + /> + + )} + ) } } diff --git a/src/lib/Scenes/Map/Components/UserPositionButton.tsx b/src/lib/Scenes/Map/Components/UserPositionButton.tsx index dd2759009f7..7c30823328e 100644 --- a/src/lib/Scenes/Map/Components/UserPositionButton.tsx +++ b/src/lib/Scenes/Map/Components/UserPositionButton.tsx @@ -1,5 +1,5 @@ import Crosshair from "lib/Icons/Crosshair" -import { Box, color, Flex } from "palette" +import { Box, Flex } from "palette" import React, { Component } from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -37,7 +37,7 @@ export class UserPositionButton extends Component { - + diff --git a/src/lib/Scenes/Map/GlobalMap.tsx b/src/lib/Scenes/Map/GlobalMap.tsx index bb0852a34c7..9c4d7f4c955 100644 --- a/src/lib/Scenes/Map/GlobalMap.tsx +++ b/src/lib/Scenes/Map/GlobalMap.tsx @@ -10,7 +10,7 @@ import { convertCityToGeoJSON, fairToGeoCityFairs, showsToGeoCityShow } from "li import { extractNodes } from "lib/utils/extractNodes" import { Schema, screenTrack, track } from "lib/utils/track" import { get, isEqual, uniq } from "lodash" -import { Box, color, Flex, Sans, Theme } from "palette" +import { Box, ClassTheme, Flex, Sans, Theme } from "palette" import React from "react" import { Animated, Dimensions, Easing, Image, View } from "react-native" import Config from "react-native-config" @@ -376,18 +376,22 @@ export class GlobalMap extends React.Component { clusterLat && clusterLng && pointCount && ( - - - - {pointCount} - - - + + {({ color }) => ( + + + + {pointCount} + + + + )} + ) ) } diff --git a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx index 99503f235bf..5cee135f906 100644 --- a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx +++ b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import LoadingModal from "lib/Components/Modals/LoadingModal" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { goBack } from "lib/navigation/navigate" -import { Sans } from "palette" +import { Text } from "palette" import React, { useImperativeHandle, useRef, useState } from "react" import { Alert, @@ -26,13 +26,14 @@ export interface MyAccountFieldEditScreenProps { title: string canSave: boolean contentContainerStyle?: ViewStyle - onSave(dismiss: () => void, alert: AlertStatic["alert"]): Promise + isSaveButtonVisible?: boolean + onSave?(dismiss: () => void, alert: AlertStatic["alert"]): Promise | undefined } export const MyAccountFieldEditScreen = React.forwardRef< { scrollToEnd(): void }, React.PropsWithChildren ->(({ children, canSave, onSave, title, contentContainerStyle }, ref) => { +>(({ children, canSave, onSave, isSaveButtonVisible, title, contentContainerStyle }, ref) => { const [isSaving, setIsSaving] = useState(false) const afterLoadingAlert = useRef() const scrollViewRef = useRef(null) @@ -49,7 +50,9 @@ export const MyAccountFieldEditScreen = React.forwardRef< Keyboard.dismiss() try { setIsSaving(true) - await onSave(goBack, doTheAlert) + if (!(isSaveButtonVisible === false) && onSave) { + await onSave(goBack, doTheAlert) + } } catch (e) { console.error(e) } finally { @@ -77,18 +80,20 @@ export const MyAccountFieldEditScreen = React.forwardRef< - + Cancel - + } title={title} right={ - - - Save - - + !(isSaveButtonVisible === false) && ( + + + Save + + + ) } > = ({ children, title }) => { - return ( - null}> - {children} - - ) -} +export const MyAccountFieldEditScreenPlaceholder: React.FC<{ title: string }> = ({ children, title }) => ( + + {children} + +) diff --git a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx index 764e2f22aa7..6bd73dfec3a 100644 --- a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx +++ b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx @@ -5,7 +5,7 @@ import { navigate } from "lib/navigation/navigate" import { ScreenMargin } from "lib/Scenes/MyCollection/Components/ScreenMargin" import { Image } from "lib/Scenes/MyCollection/State/MyCollectionArtworkModel" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { ArtworkIcon, color, Flex, Spacer, Text } from "palette" +import { ArtworkIcon, Flex, Spacer, Text, useColor } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import { createRefetchContainer, graphql, RelayRefetchProp } from "react-relay" @@ -18,6 +18,7 @@ interface MyCollectionArtworkHeaderProps { } export const MyCollectionArtworkHeader: React.FC = (props) => { + const color = useColor() const { artwork: { artistNames, date, images, internalID, title, slug }, relay, diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx index 4e70d336852..a1f07e12165 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx @@ -1,10 +1,11 @@ import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { useArtworkForm } from "lib/Scenes/MyCollection/Screens/ArtworkFormModal/Form/useArtworkForm" -import { Flex, Sans, space, Spacer } from "palette" +import { Flex, Sans, Spacer, useSpace } from "palette" import React, { useRef } from "react" export const Dimensions: React.FC = () => { + const space = useSpace() const { formik } = useArtworkForm() const metricInputRef = useRef>(null) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx index b61d2180672..5a104afb245 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx @@ -8,7 +8,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, color, Flex, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, Flex, useColor, XCircleIcon } from "palette" import React from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" @@ -57,6 +57,7 @@ export const MyCollectionAddPhotos: React.FC = ({ imageSize }) => { + const color = useColor() const artworkActions = GlobalStore.actions.myCollection.artwork const { showActionSheetWithOptions } = useActionSheet() diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx index 48843eaccf5..5cae184343e 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx @@ -4,7 +4,7 @@ import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { TextArea } from "lib/Components/TextArea" -import { Flex, Join, Sans, space, Spacer } from "palette" +import { Flex, Join, Sans, Spacer, useSpace } from "palette" import React, { useRef, useState } from "react" import { ScrollView } from "react-native-gesture-handler" import { useArtworkForm } from "../Form/useArtworkForm" @@ -13,6 +13,7 @@ import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" export const MyCollectionAdditionalDetailsForm: React.FC<{ navigation: NavigationProp }> = ({ navigation, }) => { + const space = useSpace() const { formik } = useArtworkForm() const formikValues = formik?.values const [isEdition, setIsEdition] = useState(formikValues?.isEdition) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx index 4e615576445..6b4de573cc2 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx @@ -1,4 +1,5 @@ import { tappedCollectedArtwork } from "@artsy/cohesion" +import { themeGet } from "@styled-system/theme-get" import { MyCollectionArtworkListItem_artwork } from "__generated__/MyCollectionArtworkListItem_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" @@ -6,7 +7,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { artworkMediumCategories } from "lib/utils/artworkMediumCategories" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { capitalize } from "lodash" -import { Box, color, Flex, Sans } from "palette" +import { Box, Flex, Sans, useColor } from "palette" import React from "react" import { Image as RNImage } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -18,6 +19,7 @@ interface MyCollectionArtworkListItemProps { } const MyCollectionArtworkListItem: React.FC = ({ artwork }) => { + const color = useColor() const { trackEvent } = useTracking() const imageURL = artwork.images?.find((i: any) => i?.isDefault)?.url || (artwork.images && artwork.images[0]?.url) const { width } = useScreenDimensions() @@ -120,7 +122,7 @@ export const MyCollectionArtworkListItemFragmentContainer = createFragmentContai }) const TouchElement = styled.TouchableHighlight.attrs({ - underlayColor: color("white100"), + underlayColor: themeGet("colors.white100"), activeOpacity: 0.8, })`` diff --git a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx index e8e207ea386..dc33900cd6f 100644 --- a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx +++ b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx @@ -114,9 +114,9 @@ describe(MyProfilePushNotificationsQueryRenderer, () => { // mockFetchNotificationPermissions.mockImplementationOnce(cb => cb(null, PushAuthorizationStatus.Denied)) // const tree = create( - // + // // - // + // // ) // expect(env.mock.getMostRecentOperation().request.node.operation.name).toBe("MyProfilePushNotificationsQuery") diff --git a/src/lib/Scenes/Onboarding/ForgotPassword.tsx b/src/lib/Scenes/Onboarding/ForgotPassword.tsx index f14c52f3048..b2637061c70 100644 --- a/src/lib/Scenes/Onboarding/ForgotPassword.tsx +++ b/src/lib/Scenes/Onboarding/ForgotPassword.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, color, Flex, Spacer, Text } from "palette" +import { Button, Flex, Spacer, Text, useColor } from "palette" import React, { useRef, useState } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -37,6 +37,7 @@ export const ForgotPasswordForm: React.FC = ({ dirty, isSubmitting, } = useFormikContext() + const color = useColor() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx index ff3dbb762d8..01ef906dbda 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx @@ -5,7 +5,7 @@ import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore, useEnvironment } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, color, Flex, Spacer, Text, Touchable } from "palette" +import { Box, Button, Flex, Spacer, Text, Touchable, useColor } from "palette" import React, { useEffect, useRef, useState } from "react" import { Alert, Animated, Linking, ScrollView } from "react-native" import * as Yup from "yup" @@ -161,6 +161,7 @@ export const OnboardingCreateAccountScreenWrapper: React.FC { + const color = useColor() return ( {} export const OnboardingCreateAccountEmail: React.FC = ({ route }) => { + const color = useColor() const { values, handleChange, errors, setErrors, handleSubmit } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx index 2575644b9fe..1aa99b2fad8 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { color } from "palette" +import { useColor } from "palette/hooks" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,6 +13,7 @@ export interface OnboardingCreateAccountNameProps extends StackScreenProps {} export const OnboardingCreateAccountName: React.FC = ({ navigation }) => { + const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx index c2b239fbb0f..ad24cab7eca 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { color } from "palette" +import { useColor } from "palette/hooks" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,6 +13,7 @@ interface OnboardingCreateAccountPasswordProps extends StackScreenProps {} export const OnboardingCreateAccountPassword: React.FC = ({ navigation }) => { + const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx index d6d0c0aaa03..799a557bdb1 100644 --- a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, color, Flex, Spacer, Text } from "palette" +import { Box, Button, Flex, Spacer, Text, useColor } from "palette" import React, { useEffect, useRef } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -24,6 +24,7 @@ export const loginSchema = Yup.object().shape({ }) export const OnboardingLoginForm: React.FC = ({ navigation, route }) => { + const color = useColor() const { values, handleSubmit, diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx index 430b0642ea0..fdde67093d3 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx @@ -10,7 +10,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact, times } from "lodash" -import { Box, Button, color, Flex, Join, space, Spacer, Text } from "palette" +import { Box, Button, Flex, Join, Spacer, Text, useColor, useSpace } from "palette" import React, { useEffect, useRef, useState } from "react" import { FlatList, ScrollView, TouchableWithoutFeedback } from "react-native" import { SafeAreaView } from "react-native-safe-area-context" @@ -57,36 +57,40 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationLi relay: RelayRefetchProp } -const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => ( - <> - - What artists do you collect? - - - Follow at least three artists you’re looking to collect or track so we can personalize your experience. - - - - - {/* Fake search Input */} - - - - - - - - - Search artists - +const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => { + const color = useColor() + return ( + <> + + What artists do you collect? + + + Follow at least three artists you’re looking to collect or track so we can personalize your experience. + + + + + {/* Fake search Input */} + + + + + + + + + Search artists + + - - - - -) + + + + ) +} export const OnboardingPersonalizationList: React.FC = ({ ...props }) => { + const space = useSpace() const popularArtists = compact(props.highlights.popularArtists) const animatedOpacitiesRef = useRef<{ [key: string]: Disappearable | null }>({}) const { safeAreaInsets } = useScreenDimensions() diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx index 86aa5be32f9..425b03b7abc 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx @@ -6,7 +6,7 @@ import { OnboardingPersonalizationModal_artists } from "__generated__/Onboarding import { followArtistMutation } from "lib/Components/ArtistListItem" import { navigate } from "lib/navigation/navigate" import { Schema, track } from "lib/utils/track" -import { Button, color, EntityHeader, Flex, Touchable } from "palette" +import { Button, ClassTheme, EntityHeader, Flex, Touchable } from "palette" import React from "react" import { StyleProp, TouchableWithoutFeedback, ViewStyle } from "react-native" import { RelayPaginationProp } from "react-relay" @@ -125,40 +125,43 @@ export class OnboardingPersonalizationArtistListItem extends React.Component { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - useDefaultTouchable - > - - - - - - - - - + + {({ color }) => ( + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + > + + + + + + + + + + )} + ) } } diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx index c0d986a7c6b..7fe1227038f 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx @@ -6,7 +6,7 @@ import { SearchInput } from "lib/Components/SearchInput" import { BackButton } from "lib/navigation/BackButton" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { isEqual } from "lodash" -import { Flex, space, Spinner, Text } from "palette" +import { Flex, Spinner, Text, useSpace } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList } from "react-native" import { createPaginationContainer, graphql, QueryRenderer, RelayPaginationProp } from "react-relay" @@ -26,6 +26,7 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationMo } const OnboardingPersonalizationModal: React.FC = (props) => { + const space = useSpace() const [query, setQuery] = useState("") const flatListRef = useRef>(null) const [fetchingMoreData, setFetchingMoreData] = useState(false) diff --git a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx index b514f6fd772..1b1eac058eb 100644 --- a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx @@ -2,7 +2,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useAnimatedValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { ArtsyNativeModule } from "lib/NativeModules/ArtsyNativeModule" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { color, Flex, space, Spacer, Text, Touchable } from "palette" +import { Flex, Spacer, Text, Touchable, useTheme } from "palette" import React, { useEffect } from "react" import { Dimensions, Image, Platform } from "react-native" import LinearGradient from "react-native-linear-gradient" @@ -18,6 +18,7 @@ const BUTTON_HEIGHT = 41 const imgProps = Image.resolveAssetSource(backgoundImage) export const OnboardingWelcome: React.FC = ({ navigation }) => { + const { color, space } = useTheme() const { width: screenWidth } = useScreenDimensions() const { safeAreaInsets } = useScreenDimensions() // useScreenDimensions() returns the window height instead of the screen diff --git a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx index 4dce2b650c0..9f4c540b8a0 100644 --- a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx +++ b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx @@ -1,5 +1,5 @@ import { OrderDetailsPayment_order } from "__generated__/OrderDetailsPayment_order.graphql" -import { Box, CreditCardIcon, Flex, space, Text } from "palette" +import { Box, CreditCardIcon, Flex, Text, useSpace } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" @@ -8,6 +8,7 @@ interface OrderDetailsPaymentProps { } const CreditCardDetails: React.FC = ({ order }) => { + const space = useSpace() const creditCard = order.creditCard || null return ( diff --git a/src/lib/Scenes/Partner/Components/PartnerMap.tsx b/src/lib/Scenes/Partner/Components/PartnerMap.tsx index 57a4c7cd3c5..9d0317e6440 100644 --- a/src/lib/Scenes/Partner/Components/PartnerMap.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerMap.tsx @@ -1,10 +1,11 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import MapboxGL from "@react-native-mapbox-gl/maps" +import { themeGet } from "@styled-system/theme-get" import { PartnerMap_location } from "__generated__/PartnerMap_location.graphql" import { cityAndPostalCode, tappedOnMap } from "lib/Components/LocationMap" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, color, Flex, Sans, Serif, Spacer } from "palette" +import { Box, Flex, Sans, Serif, Spacer } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -93,5 +94,5 @@ export const PartnerMapContainer = createFragmentContainer(PartnerMap, { const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${color("black10")}; + border-color: ${themeGet("colors.black10")}; ` diff --git a/src/lib/Scenes/Partner/Components/PartnerShows.tsx b/src/lib/Scenes/Partner/Components/PartnerShows.tsx index 84011d94dbb..555e93a8ed7 100644 --- a/src/lib/Scenes/Partner/Components/PartnerShows.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerShows.tsx @@ -1,3 +1,4 @@ +import { themeGet } from "@styled-system/theme-get" import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { useNativeValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { @@ -8,7 +9,7 @@ import { import { TabEmptyState } from "lib/Components/TabEmptyState" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { Box, color, Flex, Sans, space, Spacer } from "palette" +import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" import React, { useContext, useState } from "react" import { ActivityIndicator, ImageBackground, TouchableWithoutFeedback, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" @@ -31,26 +32,32 @@ class ShowGridItem extends React.Component { render() { const { show, itemIndex } = this.props const showImageURL = show.coverImage && show.coverImage.url - const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } return ( - - - - {showImageURL ? ( - - ) : ( - - )} - - {show.name} - - {show.exhibitionPeriod} - - - - - + + {({ space }) => { + const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } + return ( + + + + {showImageURL ? ( + + ) : ( + + )} + + {show.name} + + {show.exhibitionPeriod} + + + + + + ) + }} + ) } } @@ -107,37 +114,41 @@ export const PartnerShows: React.FC<{ const tabIsActive = Boolean(useNativeValue(tabContext.tabIsActive, 0)) return ( - - section.key.startsWith("chunk")) + 1} - windowSize={tabIsActive ? 5 : 1} - onEndReached={() => { - if (isLoadingMore || !relay.hasMore()) { - return - } - setIsLoadingMore(true) - relay.loadMore(PAGE_SIZE, (error) => { - if (error) { - // FIXME: Handle error - console.error("PartnerShows.tsx", error.message) + + {({ space }) => ( + + section.key.startsWith("chunk")) + 1} + windowSize={tabIsActive ? 5 : 1} + onEndReached={() => { + if (isLoadingMore || !relay.hasMore()) { + return + } + setIsLoadingMore(true) + relay.loadMore(PAGE_SIZE, (error) => { + if (error) { + // FIXME: Handle error + console.error("PartnerShows.tsx", error.message) + } + setIsLoadingMore(false) + }) + }} + refreshing={isLoadingMore} + contentContainerStyle={{ paddingTop: 20 }} + ListEmptyComponent={} + ListFooterComponent={ + + {isLoadingMore ? : null} + } - setIsLoadingMore(false) - }) - }} - refreshing={isLoadingMore} - contentContainerStyle={{ paddingTop: 20 }} - ListEmptyComponent={} - ListFooterComponent={ - - {isLoadingMore ? : null} - - } - /> - + /> + + )} + ) } @@ -216,7 +227,7 @@ const GridItem = styled(Box)` const EmptyImage = styled(Box)` height: 120; - background-color: ${color("black10")}; + background-color: ${themeGet("colors.black10")}; ` GridItem.displayName = "GridItem" diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx index 3059c5b95d9..777a00961ef 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx @@ -1,4 +1,5 @@ import { PartnerLocationSection_partner } from "__generated__/PartnerLocationSection_partner.graphql" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -23,9 +24,11 @@ describe("PartnerLoationSection", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - + + + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx index d5f9158ac80..54b6b2b90fb 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx @@ -1,5 +1,6 @@ import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { PartnerShowsTestsQueryRawResponse } from "__generated__/PartnerShowsTestsQuery.graphql" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { cloneDeep } from "lodash" import { Theme } from "palette" @@ -15,9 +16,11 @@ describe("PartnerShows", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - + + + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx index 78ddf037f09..fcec7667d50 100644 --- a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx +++ b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx @@ -1,4 +1,5 @@ import { OwnerType } from "@artsy/cohesion" +import { themeGet } from "@styled-system/theme-get" import { SaleLotsList_saleArtworksConnection } from "__generated__/SaleLotsList_saleArtworksConnection.graphql" import { SaleLotsList_unfilteredSaleArtworksConnection } from "__generated__/SaleLotsList_unfilteredSaleArtworksConnection.graphql" import { @@ -12,7 +13,7 @@ import { ORDERED_SALE_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { Schema } from "lib/utils/track" -import { Box, color, Flex, Sans } from "palette" +import { Box, Flex, Sans } from "palette" import React, { useCallback, useEffect, useState } from "react" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" @@ -176,7 +177,7 @@ export const SaleLotsList: React.FC = ({ export const FilterTitle = styled(Sans)`` export const FilterDescription = styled(Sans)` - color: ${color("black60")}; + color: ${themeGet("colors.black60")}; ` export const SaleLotsListContainer = createPaginationContainer( diff --git a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx index 5afaa8dfb73..42dcaac35e1 100644 --- a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx +++ b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx @@ -6,7 +6,7 @@ import { View } from "react-native" export const SaleFAQ: React.FC<{}> = () => { const saleFAQUrl = `${useEnvironment().webURL}/auction-faq` - const paddingTop = useScreenDimensions().safeAreaInsets.top + const paddingTop = useScreenDimensions().safeAreaInsets.top * 3 return ( diff --git a/src/lib/Scenes/Sales/__tests__/index-tests.tsx b/src/lib/Scenes/Sales/__tests__/index-tests.tsx index 65e41029cc7..f855420b523 100644 --- a/src/lib/Scenes/Sales/__tests__/index-tests.tsx +++ b/src/lib/Scenes/Sales/__tests__/index-tests.tsx @@ -5,6 +5,7 @@ import "react-native" import { renderWithLayout } from "lib/tests/renderWithLayout" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import { SalesFragmentContainer } from "../index" @@ -19,9 +20,11 @@ it("renders the ZeroState when there are no sales", () => { it("doesn't throw when rendered", () => { expect(() => renderWithLayout( - - - , + + + + + , { width: 1000 } ) ).not.toThrow() diff --git a/src/lib/Scenes/Sales/index.tsx b/src/lib/Scenes/Sales/index.tsx index 76735bce481..53c577ecf94 100644 --- a/src/lib/Scenes/Sales/index.tsx +++ b/src/lib/Scenes/Sales/index.tsx @@ -1,3 +1,4 @@ +import { OwnerType } from "@artsy/cohesion" import { Sales_me } from "__generated__/Sales_me.graphql" import { Sales_sales } from "__generated__/Sales_sales.graphql" import { SalesQueryRendererQuery } from "__generated__/SalesQueryRendererQuery.graphql" @@ -6,6 +7,8 @@ import { Stack } from "lib/Components/Stack" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" +import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" +import { screen } from "lib/utils/track/helpers" import React from "react" import { RefreshControl, ScrollView } from "react-native" import { createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" @@ -54,17 +57,19 @@ class Sales extends React.Component { const timedAuctions = sales.filter((a) => !a.live_start_at) return ( - - } - > - - - - - - - + + + } + > + + + + + + + + ) } } diff --git a/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx b/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx new file mode 100644 index 00000000000..65180723bbb --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx @@ -0,0 +1,19 @@ +import { Button, ButtonVariant } from "palette" +import React from "react" + +interface Props { + title: string + handleOnPress: () => void + disabled?: boolean + variant?: ButtonVariant + block?: boolean +} + +export const AddAddressButton: React.FC = (props) => { + const { handleOnPress, disabled, title, variant = "primaryBlack", block = true } = props + return ( + + ) +} diff --git a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx index d1c69cb6407..d5a692fcf73 100644 --- a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx +++ b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx @@ -1,31 +1,47 @@ +import { captureMessage } from "@sentry/react-native" +import { themeGet } from "@styled-system/theme-get" import { SavedAddresses_me } from "__generated__/SavedAddresses_me.graphql" import { SavedAddressesQuery } from "__generated__/SavedAddressesQuery.graphql" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" +import { navigate, navigationEvents } from "lib/navigation/navigate" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { PlaceholderText } from "lib/utils/placeholders" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { times } from "lodash" -import { Button, color, Flex, Separator, Spacer, Text, Touchable } from "palette" -import React, { useCallback, useState } from "react" +import { Box, Flex, Separator, Spacer, Text, Touchable } from "palette" +import React, { useCallback, useEffect, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { createRefetchContainer, QueryRenderer, RelayRefetchProp } from "react-relay" import { graphql } from "relay-runtime" import styled from "styled-components/native" +import { AddAddressButton } from "./Components/AddAddressButton" +import { deleteSavedAddress } from "./mutations/deleteSavedAddress" + +interface CardProps { + isDefault: boolean +} const Card = styled(Flex)` - border: 1px solid ${color("black30")}; + border: 1px solid + ${(props: CardProps) => (props.isDefault ? themeGet("colors.black100") : themeGet("colors.black30"))}; border-radius: 4; ` +// tslint:disable-next-line:variable-name +const NUM_ADDRESSES_TO_FETCH = 10 + +// tslint:disable-next-line:no-empty +export const util = { onRefresh: () => {} } + const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }> = ({ me, relay }) => { const [isRefreshing, setIsRefreshing] = useState(false) const addresses = extractNodes(me.addressConnection) - const onRefresh = useCallback(() => { + util.onRefresh = useCallback(() => { setIsRefreshing(true) relay.refetch( {}, - null, + { first: NUM_ADDRESSES_TO_FETCH }, () => { setIsRefreshing(false) }, @@ -33,15 +49,34 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp ) }, []) - const onPressEditAddress = () => null + useEffect(() => { + navigationEvents.addListener("goBack", util.onRefresh) + return () => { + navigationEvents.removeListener("goBack", util.onRefresh) + } + }, []) + + const onPressEditAddress = (addressId: string) => + navigate("/my-profile/saved-addresses/edit-address", { + modal: true, + passProps: { + addressId, + }, + }) - const onPressDeleteAddress = () => null + const onPressDeleteAddress = (addressId: string) => { + deleteSavedAddress( + addressId, + () => relay.refetch({}), + (message: string) => captureMessage(message) + ) + } return ( } - data={addresses} + refreshControl={} + data={addresses.sort((a, b) => Number(b?.isDefault) - Number(a?.isDefault))} keyExtractor={(address) => address.internalID} contentContainerStyle={{ paddingTop: addresses.length === 0 ? 10 : 40, @@ -49,47 +84,62 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }} renderItem={({ item }) => ( <> - - - {item.name} - - - {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} - - - {item.city}, {item.postalCode} - - - - {item?.phoneNumber} - - - - - - - - - {/* TODO next task add default address label here */} - {/* Default Address */} + + + + {item.name} + + + {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} + + + {item.city}, {item.postalCode} + + + + {item?.phoneNumber} + + + + + {!!item?.isDefault && Default Address} + + + onPressEditAddress(item.internalID)} + > + + Edit + + + onPressDeleteAddress(item.internalID)}> + + Delete + + + - - - - Edit - - - - - Delete - - - - - + + + )} + ListFooterComponent={ + addresses.length ? ( + + navigate("/my-profile/saved-addresses/new-address", { modal: true })} + title="Add New Address" + /> + + ) : ( + <> + ) + } ListEmptyComponent={ @@ -98,9 +148,10 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp Please add an address for a faster checkout experience in the future. - + navigate("/my-profile/saved-addresses/new-address", { modal: true })} + title="Add New Address" + /> } /> @@ -128,7 +179,7 @@ export const SavedAddressesContainer = createRefetchContainer( me: graphql` fragment SavedAddresses_me on Me { name - addressConnection(first: 3) { + addressConnection(first: 10) { edges { node { id @@ -137,10 +188,12 @@ export const SavedAddressesContainer = createRefetchContainer( addressLine1 addressLine2 addressLine3 + country city region postalCode phoneNumber + isDefault } } } diff --git a/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx b/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx new file mode 100644 index 00000000000..01ab5f1cd90 --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx @@ -0,0 +1,284 @@ +import { captureMessage } from "@sentry/react-native" +import { SavedAddressesForm_me } from "__generated__/SavedAddressesForm_me.graphql" +import { SavedAddressesFormQuery } from "__generated__/SavedAddressesFormQuery.graphql" +import { Action, action, computed, Computed, createComponentStore } from "easy-peasy" +import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" +import { CountrySelect } from "lib/Components/CountrySelect" +import { Input } from "lib/Components/Input/Input" +import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" +import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" +import { Stack } from "lib/Components/Stack" +import { goBack } from "lib/navigation/navigate" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { extractNodes } from "lib/utils/extractNodes" +import { PlaceholderBox, PlaceholderText } from "lib/utils/placeholders" +import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" +import { useScreenDimensions } from "lib/utils/useScreenDimensions" +import { times } from "lodash" +import { Flex, Text } from "palette" +import React, { useEffect, useRef, useState } from "react" +import { Alert } from "react-native" +import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" +import { MyAccountFieldEditScreen } from "../MyAccount/Components/MyAccountFieldEditScreen" +import { AddAddressButton } from "./Components/AddAddressButton" +import { createUserAddress } from "./mutations/addNewAddress" +import { setAsDefaultAddress } from "./mutations/setAsDefaultAddress" +import { updateUserAddress } from "./mutations/updateUserAddress" + +interface FormField { + value: Type | null + touched: boolean + required: boolean + isPresent: Computed + setValue: Action +} + +const emptyFieldState: () => FormField = () => ({ + value: null, + touched: false, + required: true, + isPresent: computed((self) => { + if (!self.required) { + return true + } else { + return self.value !== null && (typeof self.value !== "string" || !!self.value) + } + }), + setValue: action((state, payload) => { + state.value = payload + }), +}) + +interface FormFields { + addressLine1: FormField + addressLine2: FormField + city: FormField + country: FormField + name: FormField + postalCode: FormField + region: FormField +} + +interface Store { + fields: FormFields + allPresent: Computed +} + +const useStore = createComponentStore({ + fields: { + name: emptyFieldState(), + country: emptyFieldState(), + postalCode: emptyFieldState(), + addressLine1: emptyFieldState(), + addressLine2: { ...emptyFieldState(), required: false }, + city: emptyFieldState(), + region: emptyFieldState(), + }, + allPresent: computed((store) => { + return Boolean(Object.keys(store.fields).every((k) => store.fields[k as keyof FormFields].isPresent)) + }), +}) + +export const SavedAddressesForm: React.FC<{ me: SavedAddressesForm_me; addressId?: string }> = ({ me, addressId }) => { + const isEditForm = !!addressId + + const [state, actions] = useStore() + const [phoneNumber, setPhoneNumber] = useState(me?.phone) + const [isDefaultAddress, setIsDefaultAddress] = useState(false) + const { height } = useScreenDimensions() + const offSetTop = 0.75 + + useEffect(() => { + setPhoneNumber(me?.phone) + }, [me?.phone]) + + useEffect(() => { + if (isEditForm) { + const addresses = extractNodes(me.addressConnection) + const selectedAddress = addresses!.find((address) => address.internalID === addressId) + Object.keys(actions.fields).forEach((field) => { + const fieldValue = selectedAddress?.[field as keyof FormFields] ?? "" + actions.fields[field as keyof FormFields].setValue(fieldValue) + }) + setIsDefaultAddress(!!selectedAddress?.isDefault) + } + }, []) + + const screenRef = useRef(null) + + const submitAddAddress = async () => { + try { + const creatingResponse = await createUserAddress({ + name: state.fields.name.value!, + country: state.fields.country.value!, + postalCode: state.fields.postalCode.value, + addressLine1: state.fields.addressLine1.value!, + addressLine2: state.fields.addressLine2.value, + city: state.fields.city.value!, + region: state.fields.region.value, + phoneNumber, + }) + + if (isDefaultAddress) { + await setAsDefaultAddress(creatingResponse.createUserAddress?.userAddressOrErrors.internalID!) + } + goBack() + } catch (e) { + captureMessage(e.stack) + Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") + } + } + + const editUserAddress = async (userAddressID: string) => { + try { + const response = await updateUserAddress(userAddressID, { + name: state.fields.name.value!, + country: state.fields.country.value!, + postalCode: state.fields.postalCode.value, + addressLine1: state.fields.addressLine1.value!, + addressLine2: state.fields.addressLine2.value, + city: state.fields.city.value!, + region: state.fields.region.value, + phoneNumber, + }) + + if (isDefaultAddress) { + await setAsDefaultAddress(response.updateUserAddress?.userAddressOrErrors.internalID!) + } + goBack() + } catch (e) { + Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") + captureMessage(e.stack) + } + } + + return ( + + + + + + + + + + + { + setIsDefaultAddress(!isDefaultAddress) + }} + checked={isDefaultAddress} + mb={4} + > + Set as default + + + editUserAddress(addressId!) : submitAddAddress} + title={isEditForm ? "Add" : "Add Address"} + disabled={!state.allPresent} + /> + + + ) +} + +export const SavedAddressesFormContainer = createFragmentContainer(SavedAddressesForm, { + me: graphql` + fragment SavedAddressesForm_me on Me { + id + phone + addressConnection(first: 3) { + edges { + node { + internalID + name + addressLine1 + addressLine2 + addressLine3 + country + city + region + postalCode + isDefault + } + } + } + } + `, +}) + +export const SavedAddressesFormPlaceholder: React.FC<{ addressId?: string }> = (props) => { + return ( + + + {times(5).map((index: number) => ( + + + + + ))} + + + ) +} + +export const SavedAddressesFormQueryRenderer: React.FC<{}> = (props) => ( + + environment={defaultEnvironment} + query={graphql` + query SavedAddressesFormQuery { + me { + ...SavedAddressesForm_me + } + } + `} + render={renderWithPlaceholder({ + initialProps: props, + Container: SavedAddressesFormContainer, + renderPlaceholder: () => , + })} + variables={{}} + /> +) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx index 722e83e3945..5ab48189055 100644 --- a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx +++ b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx @@ -1,11 +1,12 @@ import { SavedAddressesTestsQuery } from "__generated__/SavedAddressesTestsQuery.graphql" +import { navigate, navigationEvents } from "lib/navigation/navigate" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Flex } from "palette" +import { Button, Flex } from "palette" import React from "react" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" -import { SavedAddressesContainer, SavedAddressesQueryRenderer } from "../SavedAddresses" +import { SavedAddressesContainer, SavedAddressesQueryRenderer, util } from "../SavedAddresses" jest.unmock("react-relay") @@ -109,4 +110,80 @@ describe(SavedAddressesQueryRenderer, () => { expect(text).toContain("Edit") expect(text).toContain("Delete") }) + + it("testing add new address navigation", () => { + const tree = renderWithWrappers().root + mockEnvironment.mock.resolveMostRecentOperation((operation) => { + const result = MockPayloadGenerator.generate(operation, { + Me: () => ({ + name: "saver", + addressConnection: { + edges: [], + }, + }), + }) + return result + }) + tree.findByType(Button).props.onPress() + expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/new-address", { modal: true }) + }) + + it("should navigate to edit address screen", () => { + const tree = renderWithWrappers().root + mockEnvironment.mock.resolveMostRecentOperation((operation) => { + const result = MockPayloadGenerator.generate(operation, { + Me: () => ({ + name: "saver", + addressConnection: { + edges: [ + { + node: { + id: "VXNlckFkZHJlc3M6NTg0MA==", + internalID: "5840", + name: "George Tester", + addressLine1: "Stallschreiberstr 21", + addressLine2: "apt 61, 1st Floor", + addressLine3: null, + city: "Berlin", + region: "Mitte", + postalCode: "10179", + phoneNumber: "015904832846", + }, + }, + { + node: { + id: "VXNlckFkZHJlc3M6NTg2MQ==", + internalID: "5861", + name: "George Testing", + addressLine1: "401 Brodway", + addressLine2: "26th Floor", + addressLine3: null, + city: "New York", + region: "New York", + postalCode: "NY 10013", + phoneNumber: "1293581028945", + }, + }, + ], + }, + }), + }) + return result + }) + + const EditButton = tree.findByProps({ testID: "EditAddress-5861" }) + + EditButton.props.onPress() + expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/edit-address", { + modal: true, + passProps: { addressId: "5861" }, + }) + }) + + it("handles return to prev view with goBack event", () => { + const mockCallback = jest.fn(util.onRefresh) + navigationEvents.addListener("goBack", mockCallback) + navigationEvents.emit("goBack") + expect(mockCallback.mock.calls.length).toBe(1) + }) }) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx new file mode 100644 index 00000000000..0749eddecf9 --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx @@ -0,0 +1,95 @@ +import { SavedAddressesFormTestsQuery } from "__generated__/SavedAddressesFormTestsQuery.graphql" +import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" +import { Input } from "lib/Components/Input/Input" +import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" +import { extractText } from "lib/tests/extractText" +import { renderWithWrappers } from "lib/tests/renderWithWrappers" +import { Button } from "palette" +import React from "react" +import { graphql, QueryRenderer } from "react-relay" +import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" +import { SavedAddressesFormContainer, SavedAddressesFormQueryRenderer } from "../SavedAddressesForm" + +jest.unmock("react-relay") + +describe(SavedAddressesFormQueryRenderer, () => { + let mockEnvironment: ReturnType + const TestRenderer = ({ addressId }: { addressId?: string }) => ( + + environment={mockEnvironment} + query={graphql` + query SavedAddressesFormTestsQuery { + me { + ...SavedAddressesForm_me + } + } + `} + render={({ props, error }) => { + if (props?.me) { + return + } else if (error) { + console.log(error) + } + }} + variables={{}} + /> + ) + beforeEach(() => { + mockEnvironment = createMockEnvironment() + }) + + it("render form screen", () => { + const tree = renderWithWrappers().root + mockEnvironment.mock.resolveMostRecentOperation((operation) => { + const result = MockPayloadGenerator.generate(operation, { + Me: () => ({ + id: "some-id", + phone: "9379992", + addressConnection: { + edges: [], + }, + }), + }) + return result + }) + + expect(tree.findAllByType(Input).length).toEqual(7) + expect(tree.findAllByType(PhoneInput).length).toEqual(1) + expect(tree.findAllByType(Checkbox).length).toEqual(1) + expect(tree.findAllByType(Button).length).toEqual(1) + }) + + it("should display correct address data if it is Edit Address modal", () => { + const tree = renderWithWrappers().root + mockEnvironment.mock.resolveMostRecentOperation((operation) => { + const result = MockPayloadGenerator.generate(operation, { + Me: () => ({ + id: "some-id", + phone: "9379992", + addressConnection: { + edges: [ + { + node: { + id: "VXNlckFkZHJlc3M6NTg2MQ==", + internalID: "5861", + name: "George Testing", + addressLine1: "401 Broadway", + addressLine2: "26th Floor", + addressLine3: null, + city: "New York", + region: "New York", + postalCode: "NY 10013", + phoneNumber: "1293581028945", + }, + }, + ], + }, + }), + }) + return result + }) + const text = extractText(tree) + + expect(text).toContain("Edit Address") + }) +}) diff --git a/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts new file mode 100644 index 00000000000..a0a56be4355 --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts @@ -0,0 +1,57 @@ +import { + addNewAddressMutation, + addNewAddressMutationResponse, + UserAddressAttributes, +} from "__generated__/addNewAddressMutation.graphql" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { commitMutation, graphql } from "react-relay" + +export const createUserAddress = (address: UserAddressAttributes) => { + return new Promise((resolve, reject) => { + commitMutation(defaultEnvironment, { + variables: { + input: { + attributes: address, + }, + }, + mutation: graphql` + mutation addNewAddressMutation($input: CreateUserAddressInput!) { + createUserAddress(input: $input) { + userAddressOrErrors { + ... on UserAddress { + id + internalID + addressLine1 + addressLine2 + city + country + isDefault + name + phoneNumber + postalCode + region + } + ... on Errors { + errors { + message + } + } + } + } + } + `, + onCompleted: (response, err) => { + if (err?.length) { + reject(err) + } else if (response.createUserAddress?.userAddressOrErrors.errors) { + reject(response.createUserAddress.userAddressOrErrors.errors) + } else { + resolve(response) + } + }, + onError: (e) => { + reject(e.message) + }, + }) + }) +} diff --git a/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts new file mode 100644 index 00000000000..cfe1f63921c --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts @@ -0,0 +1,55 @@ +import { deleteSavedAddressDeleteUserAddressMutation } from "__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { commitMutation, graphql } from "relay-runtime" + +export const deleteSavedAddress = ( + userAddressID: string, + onSuccess: () => void, + onError: (message: string) => void +) => { + commitMutation(defaultEnvironment, { + variables: { + input: { + userAddressID, + }, + }, + mutation: graphql` + mutation deleteSavedAddressDeleteUserAddressMutation($input: DeleteUserAddressInput!) { + deleteUserAddress(input: $input) { + userAddressOrErrors { + ... on UserAddress { + id + internalID + name + addressLine1 + addressLine2 + addressLine3 + city + region + postalCode + phoneNumber + isDefault + } + ... on Errors { + errors { + code + message + } + } + } + } + } + `, + onError: (e) => { + onError(e.message) + }, + onCompleted: (data) => { + const errors = data?.deleteUserAddress?.userAddressOrErrors.errors + if (errors) { + onError(errors.map((error) => error.message).join(", ")) + } else { + onSuccess() + } + }, + }) +} diff --git a/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts new file mode 100644 index 00000000000..0f32d434e12 --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts @@ -0,0 +1,49 @@ +import { + setAsDefaultAddressMutation, + setAsDefaultAddressMutationResponse, + UpdateUserDefaultAddressInput, +} from "__generated__/setAsDefaultAddressMutation.graphql" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { commitMutation, graphql } from "react-relay" + +export const setAsDefaultAddress = (id: UpdateUserDefaultAddressInput["userAddressID"]) => { + return new Promise((resolve, reject) => { + commitMutation(defaultEnvironment, { + variables: { + input: { + userAddressID: id, + }, + }, + mutation: graphql` + mutation setAsDefaultAddressMutation($input: UpdateUserDefaultAddressInput!) { + updateUserDefaultAddress(input: $input) { + userAddressOrErrors { + ... on UserAddress { + id + internalID + isDefault + } + ... on Errors { + errors { + message + } + } + } + } + } + `, + onCompleted: (response, err) => { + if (err?.length) { + reject(err) + } else if (response.updateUserDefaultAddress?.userAddressOrErrors.errors) { + reject(response.updateUserDefaultAddress.userAddressOrErrors.errors) + } else { + resolve(response) + } + }, + onError: (e) => { + reject(e.message) + }, + }) + }) +} diff --git a/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts new file mode 100644 index 00000000000..2914ca38e1e --- /dev/null +++ b/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts @@ -0,0 +1,59 @@ +import { UserAddressAttributes } from "__generated__/addNewAddressMutation.graphql" +import { + updateUserAddressMutation, + updateUserAddressMutationResponse, +} from "__generated__/updateUserAddressMutation.graphql" +import { defaultEnvironment } from "lib/relay/createEnvironment" +import { commitMutation, graphql } from "react-relay" + +export const updateUserAddress = (userAddressID: string, address: UserAddressAttributes) => { + return new Promise((resolve, reject) => { + commitMutation(defaultEnvironment, { + variables: { + input: { + userAddressID, + attributes: address, + }, + }, + mutation: graphql` + mutation updateUserAddressMutation($input: UpdateUserAddressInput!) { + updateUserAddress(input: $input) { + userAddressOrErrors { + ... on UserAddress { + id + internalID + name + addressLine1 + addressLine2 + isDefault + phoneNumber + city + region + postalCode + country + } + ... on Errors { + errors { + code + message + } + } + } + } + } + `, + onCompleted: (response, err) => { + if (err?.length) { + reject(err) + } else if (response.updateUserAddress?.userAddressOrErrors.errors) { + reject(response.updateUserAddress.userAddressOrErrors.errors) + } else { + resolve(response) + } + }, + onError: (e) => { + reject(e.message) + }, + }) + }) +} diff --git a/src/lib/Scenes/Search/AutosuggestResults.tsx b/src/lib/Scenes/Search/AutosuggestResults.tsx index f30b22b064f..4ca73eefa52 100644 --- a/src/lib/Scenes/Search/AutosuggestResults.tsx +++ b/src/lib/Scenes/Search/AutosuggestResults.tsx @@ -8,7 +8,7 @@ import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" import { isPad } from "lib/utils/hardware" -import { Flex, space, Text } from "palette" +import { Flex, Text, useSpace } from "palette" import { useCallback, useEffect, useMemo, useRef } from "react" import React from "react" import { FlatList } from "react-native" @@ -31,6 +31,7 @@ const AutosuggestResultsFlatList: React.FC<{ showResultType?: boolean onResultPress?: OnResultPress }> = ({ query, results: latestResults, relay, showResultType, onResultPress }) => { + const space = useSpace() const loadMore = useCallback(() => relay.loadMore(SUBSEQUENT_BATCH_SIZE), []) // We only want to load more results after the user has started scrolling, and unfortunately diff --git a/src/lib/Scenes/Search/CityGuideCTA.tsx b/src/lib/Scenes/Search/CityGuideCTA.tsx index 1fac5fda694..4009946fa7e 100644 --- a/src/lib/Scenes/Search/CityGuideCTA.tsx +++ b/src/lib/Scenes/Search/CityGuideCTA.tsx @@ -1,6 +1,6 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" -import { color, Flex, Sans, Spacer } from "palette" +import { ClassTheme, Flex, Sans, Spacer } from "palette" import React from "react" import { Image, TouchableOpacity } from "react-native" import { BMWSponsorship } from "../City/CityBMWSponsorship" @@ -9,24 +9,28 @@ export class CityGuideCTA extends React.Component { render() { const cityGuideMapImage = require("../../../../images/city-guide-bg.png") return ( - - - navigate("/local-discovery")}> - - - - - City Guide - - - Browse fairs and shows in different cities - - - - + + {({ color }) => ( + + + navigate("/local-discovery")}> + + + + + City Guide + + + Browse fairs and shows in different cities + + + + + + - - + )} + ) } } diff --git a/src/lib/Scenes/Search/Search.tsx b/src/lib/Scenes/Search/Search.tsx index 8e325aa3090..4f70df31d66 100644 --- a/src/lib/Scenes/Search/Search.tsx +++ b/src/lib/Scenes/Search/Search.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import { SearchInput } from "lib/Components/SearchInput" import { isPad } from "lib/utils/hardware" import { Schema } from "lib/utils/track" -import { color, Flex, Spacer } from "palette" +import { Flex, Spacer, useColor } from "palette" import React, { useState } from "react" import { Platform, ScrollView } from "react-native" import { useTracking } from "react-tracking" @@ -20,6 +20,7 @@ const placeholders = [ ] export const Search: React.FC = () => { + const color = useColor() const [query, setQuery] = useState("") const { trackEvent } = useTracking() const searchProviderValues = useSearchProviderValues(query) diff --git a/src/lib/Scenes/Search/SearchResult.tsx b/src/lib/Scenes/Search/SearchResult.tsx index f5c7ca30fb2..c6b4bb4758f 100644 --- a/src/lib/Scenes/Search/SearchResult.tsx +++ b/src/lib/Scenes/Search/SearchResult.tsx @@ -1,10 +1,11 @@ +import { themeGet } from "@styled-system/theme-get" import GraphemeSplitter from "grapheme-splitter" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { EntityType, navigate, navigateToEntity, navigateToPartner, SlugType } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" import { normalizeText } from "lib/utils/normalizeText" import { Schema } from "lib/utils/track" -import { ArtworkIcon, AuctionIcon, Box, CloseIcon, color, Flex, Sans, Spacer } from "palette" +import { ArtworkIcon, AuctionIcon, Box, CloseIcon, Flex, Sans, Spacer } from "palette" import React, { useContext } from "react" import { Pressable, Text, TouchableOpacity, View } from "react-native" import { useTracking } from "react-tracking" @@ -150,7 +151,7 @@ const QuickNavigationButton = styled(Flex)` justify-content: center; align-items: center; padding: 2px 10px; - border: 1px solid ${color("black30")}; + border: 1px solid ${themeGet("colors.black30")}; ` const splitter = new GraphemeSplitter() diff --git a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx index 2a108ab0c9f..c7a3de56ba8 100644 --- a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx @@ -3,6 +3,7 @@ import { AutosuggestResultsQueryRawResponse } from "__generated__/AutosuggestRes import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { CatchErrors } from "lib/utils/CatchErrors" @@ -103,11 +104,13 @@ const inputBlurMock = jest.fn() const TestWrapper: typeof AutosuggestResults = (props) => ( - - - - - + + + + + + + ) diff --git a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx index 124ca171140..c836c336ba0 100644 --- a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx @@ -76,13 +76,15 @@ const anniAlbers: RecentSearch = { const TestPage = () => { return ( - - - - - - - + + + + + + + + + ) } diff --git a/src/lib/Scenes/Search/__tests__/Search-tests.tsx b/src/lib/Scenes/Search/__tests__/Search-tests.tsx index d345b1798c2..7901f2d82d8 100644 --- a/src/lib/Scenes/Search/__tests__/Search-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/Search-tests.tsx @@ -40,13 +40,15 @@ jest.mock("../RecentSearches", () => ({ const TestWrapper: typeof Search = (props) => { return ( - - - - - - - + + + + + + + + + ) } diff --git a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx index 76e4b1c80ce..ac2cd7d009f 100644 --- a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx +++ b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx @@ -20,7 +20,7 @@ describe(VanityURLPossibleRedirect, () => { it("shows a loading spinner before anything has happened", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://artsy.net/test", + url: "https://www.artsy.net/test", }) const tree = renderWithWrappers() expect(tree.root.findAllByType(Spinner)).toHaveLength(1) @@ -29,13 +29,13 @@ describe(VanityURLPossibleRedirect, () => { it("sends a fetch request", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://artsy.net/test", + url: "https://www.artsy.net/test", }) renderWithWrappers() expect(fetchMock).toHaveBeenCalledTimes(1) expect(fetchMock.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "https://artsy.net/test", + "https://www.artsy.net/test", Object { "headers": Object { "X-Access-Token": "authenticationToken", @@ -59,11 +59,11 @@ describe(VanityURLPossibleRedirect, () => { it("calls `navigate` when the redirect points to a native view", async () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://artsy.net/artist/banksy", + url: "https://www.artsy.net/artist/banksy", }) renderWithWrappers() await flushPromiseQueue() - expect(navigate).toHaveBeenCalledWith("https://artsy.net/artist/banksy") + expect(navigate).toHaveBeenCalledWith("https://www.artsy.net/artist/banksy") }) describe("the error page", () => { @@ -86,7 +86,7 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-fail") + expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-fail") }) it("shows the error page if the response is not `ok`", async () => { @@ -96,19 +96,19 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-not-ok") + expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-not-ok") }) }) it("shows an internal web view when there is no redirect", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/no-redirect" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/no-redirect" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) }) it("shows an internal web view when there is a redirect to a page that is supposed to be shown in a web view", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/categories" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/categories" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) diff --git a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx index 776fc5dbdec..5701d7a8126 100644 --- a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx +++ b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx @@ -1,8 +1,9 @@ +import { themeGet } from "@styled-system/theme-get" import { ViewingRoomViewWorksButton_viewingRoom } from "__generated__/ViewingRoomViewWorksButton_viewingRoom.graphql" import { AnimatedBottomButton } from "lib/Components/AnimatedBottomButton" import { navigate } from "lib/navigation/navigate" import { Schema } from "lib/utils/track" -import { color, Flex, Sans } from "palette" +import { Flex, Sans } from "palette" import React from "react" import { View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -49,7 +50,7 @@ export const ViewingRoomViewWorksButton: React.FC = (props) => { await Share.share({ title: viewingRoom.title, message: `${viewingRoom.title} by ${viewingRoom?.partner?.name} on Artsy`, - url: `https://artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, + url: `https://www.artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, }) } catch (error) { console.error("ViewingRoom.tsx", error) diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx index f2e729a2736..ace65b5f83b 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx @@ -7,7 +7,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" import { ProvideScreenTracking, Schema } from "lib/utils/track" -import { Box, Flex, Sans, Separator, space, Spinner, Text } from "palette" +import { Box, Flex, Sans, Separator, Spinner, Text, useSpace } from "palette" import { Touchable } from "palette" import React, { useMemo, useState } from "react" import { FlatList } from "react-native" @@ -26,6 +26,7 @@ interface ArtworkSection { } export const ViewingRoomArtworks: React.FC = (props) => { + const space = useSpace() const { viewingRoom, relay } = props const [isLoadingMore, setIsLoadingMore] = useState(false) const tracking = useTracking() diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx index ef7086e22a9..a5d85e4c39a 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx @@ -9,7 +9,7 @@ import { PlaceholderBox, PlaceholderText, ProvidePlaceholderContext } from "lib/ import { ProvideScreenTracking, Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import _ from "lodash" -import { Flex, Sans, Separator, space, Spacer } from "palette" +import { Flex, Sans, Separator, Spacer, useSpace } from "palette" import React, { useRef, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { ConnectionConfig } from "react-relay" @@ -48,6 +48,7 @@ interface ViewingRoomsListProps { } export const ViewingRoomsListContainer: React.FC = (props) => { + const space = useSpace() const [queryData, { isLoading, hasMore, loadMore, refetchConnection }] = usePagination(fragmentSpec, props.query) const viewingRooms = extractNodes(queryData.viewingRooms) diff --git a/src/lib/navigation/__tests__/routes-tests.tsx b/src/lib/navigation/__tests__/routes-tests.tsx index 93c9d3bce6a..fbd92214263 100644 --- a/src/lib/navigation/__tests__/routes-tests.tsx +++ b/src/lib/navigation/__tests__/routes-tests.tsx @@ -12,7 +12,7 @@ describe("artsy.net routes", () => { expect(matchRoute("")).toEqual(expected) expect(matchRoute("//")).toEqual(expected) expect(matchRoute("https://www.artsy.net/")).toEqual(expected) - expect(matchRoute("https://artsy.net/")).toEqual(expected) + expect(matchRoute("https://www.artsy.net/")).toEqual(expected) expect(matchRoute("https://staging.artsy.net/")).toEqual(expected) }) @@ -84,7 +84,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://artsy.net/artist/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://www.artsy.net/artist/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artist", "params": Object { @@ -108,7 +108,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://www.artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { @@ -152,7 +152,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://www.artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artwork", "params": Object { @@ -161,7 +161,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute(encodeURIComponent(encodeURIComponent("https://artsy.net/artwork/more%26more")))) + expect(matchRoute(encodeURIComponent(encodeURIComponent("https://www.artsy.net/artwork/more%26more")))) .toMatchInlineSnapshot(` Object { "module": "Artwork", @@ -187,7 +187,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://www.artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { diff --git a/src/lib/navigation/navigate.ts b/src/lib/navigation/navigate.ts index dc04f6a61f5..6b72c78bc40 100644 --- a/src/lib/navigation/navigate.ts +++ b/src/lib/navigation/navigate.ts @@ -95,9 +95,7 @@ export function dismissModal() { export function goBack() { LegacyNativeModules.ARScreenPresenterModule.goBack(unsafe__getSelectedTab()) - if (Platform.OS === "android") { - navigationEvents.emit("goBack") - } + navigationEvents.emit("goBack") } export function popParentViewController() { diff --git a/src/lib/navigation/routes.tsx b/src/lib/navigation/routes.tsx index 15eceac38a2..0de26afc149 100644 --- a/src/lib/navigation/routes.tsx +++ b/src/lib/navigation/routes.tsx @@ -131,7 +131,7 @@ function getDomainMap(): Record { new RouteMatcher("/artist/:artistID/artist-series", "FullArtistSeriesList"), webViewRoute("/artist/:artistID/articles"), new RouteMatcher("/artist/:artistID/*", "Artist"), - // For artists in a gallery context, like https://artsy.net/spruth-magers/artist/astrid-klein . Until we have a native + // For artists in a gallery context, like https://www.artsy.net/spruth-magers/artist/astrid-klein . Until we have a native // version of the gallery profile/context, we will use the normal native artist view instead of showing a web view. new RouteMatcher("/:profile_id_ignored/artist/:artistID", "Artist"), new RouteMatcher("/auction-registration/:saleID", "AuctionRegistration"), @@ -170,6 +170,8 @@ function getDomainMap(): Record { new RouteMatcher("/my-profile/payment/new-card", "MyProfilePaymentNewCreditCard"), new RouteMatcher("/my-profile/push-notifications", "MyProfilePushNotifications"), new RouteMatcher("/my-profile/saved-addresses", "SavedAddresses"), + new RouteMatcher("/my-profile/saved-addresses/new-address", "SavedAddressesForm"), + new RouteMatcher("/my-profile/saved-addresses/edit-address", "SavedAddressesForm"), new RouteMatcher("/local-discovery", "LocalDiscovery"), new RouteMatcher("/privacy-request", "PrivacyRequest"), @@ -220,7 +222,9 @@ function getDomainMap(): Record { unsafe_getFeatureFlag("AROptionsUseReactNativeWebView") ? webViewRoute("/orders/:orderID", { mimicBrowserBackButton: false }) : new RouteMatcher("/orders/:orderID", "Checkout"), + __DEV__ && new RouteMatcher("/storybook", "Storybook"), + // Every other route needs to go above new RouteMatcher("/:slug", "VanityURLEntity"), webViewRoute("/*"), ]) diff --git a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts index f23ce498d2b..c69a644d5e5 100644 --- a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts +++ b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts @@ -74,7 +74,7 @@ describe(errorMiddleware, () => { // @ts-ignore const relayResponse: RelayNetworkLayerResponse = { json: { - errors: [{}], + errors: [{ message: "Tests error" }], }, } diff --git a/src/lib/relay/middlewares/errorMiddleware.ts b/src/lib/relay/middlewares/errorMiddleware.ts index 059fe84feb1..34b02eb72d5 100644 --- a/src/lib/relay/middlewares/errorMiddleware.ts +++ b/src/lib/relay/middlewares/errorMiddleware.ts @@ -14,7 +14,7 @@ const isErrorStatus = (status: number | undefined) => { } const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { - // const formattedError = formatGraphQLErrors(req, res.errors!) + const resJson = res?.json as GraphQLResponse Sentry.withScope((scope) => { scope.setExtra("kind", req.operation.operationKind) scope.setExtra("query-name", req.operation.name) @@ -24,7 +24,7 @@ const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { scope.setExtra("variables", req.variables as any) } console.log(createRequestError(req, res)) - Sentry.captureException(req.operation.name) + Sentry.captureException(resJson.errors && resJson.errors[0]?.message) }) throw createRequestError(req, res) } diff --git a/src/lib/store/AuthModel.ts b/src/lib/store/AuthModel.ts index 5d059868fb9..ec5a1d55ef9 100644 --- a/src/lib/store/AuthModel.ts +++ b/src/lib/store/AuthModel.ts @@ -4,8 +4,10 @@ import { action, Action, Computed, computed, StateMapper, thunk, Thunk, thunkOn, import { isArtsyEmail } from "lib/utils/general" import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { stringify } from "qs" +import { Alert, Linking, Platform } from "react-native" import Config from "react-native-config" import { AccessToken, GraphRequest, GraphRequestManager, LoginManager } from "react-native-fbsdk-next" +import PushNotification from "react-native-push-notification" import { getCurrentEmissionState } from "./GlobalStore" import type { GlobalStoreModel } from "./GlobalStoreModel" type BasicHttpMethod = "GET" | "PUT" | "POST" | "DELETE" @@ -265,6 +267,29 @@ export const getAuthModel = (): AuthModel => ({ }) actions.notifyTracking({ userId: id }) + if (Platform.OS === "android") { + PushNotification.checkPermissions((permissions) => { + if (!permissions.alert) { + // settimeout so alerts show when/immediately after page loads not before. + setTimeout(() => { + Alert.alert( + "Artsy Would Like to Send You Notifications", + "Turn on notifications to get important updates about artists you follow.", + [ + { + text: "Dismiss", + style: "cancel", + }, + { + text: "Settings", + onPress: () => Linking.openSettings(), + }, + ] + ) + }, 3000) + } + }) + } return true } diff --git a/src/lib/store/GlobalStoreModel.ts b/src/lib/store/GlobalStoreModel.ts index 077dc8f0093..724b6897cc5 100644 --- a/src/lib/store/GlobalStoreModel.ts +++ b/src/lib/store/GlobalStoreModel.ts @@ -14,6 +14,7 @@ import { unsafe__getEnvironment } from "./GlobalStore" import { CURRENT_APP_VERSION } from "./migration" import { getNativeModel, NativeModel } from "./NativeModel" import { assignDeep, sanitize } from "./persistence" +import { getToastModel, ToastModel } from "./ToastModel" interface GlobalStoreStateModel { version: number @@ -27,6 +28,7 @@ interface GlobalStoreStateModel { myCollection: MyCollectionModel config: ConfigModel auth: AuthModel + toast: ToastModel } export interface GlobalStoreModel extends GlobalStoreStateModel { rehydrate: Action>> @@ -90,6 +92,7 @@ export const getGlobalStoreModel = (): GlobalStoreModel => ({ myCollection: getMyCollectionModel(), config: getConfigModel(), auth: getAuthModel(), + toast: getToastModel(), // for testing only. noop otherwise. __inject: __TEST__ diff --git a/src/lib/store/NativeModel.ts b/src/lib/store/NativeModel.ts index a91ed1d40da..c8fdd9fd8e4 100644 --- a/src/lib/store/NativeModel.ts +++ b/src/lib/store/NativeModel.ts @@ -2,7 +2,9 @@ import { Action, action, Thunk, thunk } from "easy-peasy" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { NotificationsManager } from "lib/NativeModules/NotificationsManager" import { navigate, navigationEvents } from "lib/navigation/navigate" -import { GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" +import { InfoType } from "lib/utils/track/providers" +import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" +import { getCurrentEmissionState, GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" // These should match the values in emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m export type NativeEvent = @@ -21,6 +23,14 @@ export type NativeEvent = | { type: "MODAL_DISMISSED" } + | { + type: "EVENT_TRACKING" + payload: InfoType + } + | { + type: "IDENTIFY_TRACKING" + payload: InfoType + } export interface NativeState { userID: string @@ -54,9 +64,31 @@ export function listenToNativeEvents(cb: (event: NativeEvent) => void) { listenToNativeEvents((event: NativeEvent) => { switch (event.type) { + case "IDENTIFY_TRACKING": + // Segment should automatically stitch identify calls to existing user even if userid is null + SegmentTrackingProvider.identify ? SegmentTrackingProvider.identify(null, event.payload) : (() => undefined)() + return + case "EVENT_TRACKING": + SegmentTrackingProvider.postEvent(event.payload) + return case "STATE_CHANGED": + const newOnboardingFlow = unsafe_getFeatureFlag("AREnableNewOnboardingFlow") + if (!newOnboardingFlow) { + const prevState = getCurrentEmissionState() + const onboardingChanged = + prevState.onboardingState !== "complete" && event.payload.onboardingState === "complete" + const userIdChanged = !prevState.userID && event.payload.userID + if (onboardingChanged || userIdChanged) { + // weird ts-lint no-unused-expressions lint + SegmentTrackingProvider.identify + ? SegmentTrackingProvider.identify(event.payload.userID, { + is_temporary_user: !event.payload.userID ? 1 : 0, + }) + : (() => undefined)() + } + } GlobalStore.actions.native.setLocalState(event.payload) - if (!unsafe_getFeatureFlag("AREnableNewOnboardingFlow") && event.payload.userEmail !== null) { + if (!newOnboardingFlow && event.payload.userEmail !== null) { GlobalStore.actions.auth.setState({ userEmail: event.payload.userEmail }) } return diff --git a/src/lib/store/ToastModel.ts b/src/lib/store/ToastModel.ts new file mode 100644 index 00000000000..9f1afb7cc47 --- /dev/null +++ b/src/lib/store/ToastModel.ts @@ -0,0 +1,44 @@ +import { action, Action } from "easy-peasy" +import { ToastDetails, ToastOptions, ToastPlacement } from "lib/Components/Toast/types" + +export interface ToastModel { + sessionState: { + nextId: number + toasts: Array> + } + + add: Action< + this, + { + message: string + placement: ToastPlacement + options?: ToastOptions + } + > + remove: Action + removeOldest: Action +} + +export const getToastModel = (): ToastModel => ({ + sessionState: { + nextId: 0, + toasts: [], + }, + + add: action((state, newToast) => { + state.sessionState.toasts.push({ + id: state.sessionState.nextId, + message: newToast.message, + placement: newToast.placement, + ...newToast.options, + }) + + state.sessionState.nextId += 1 + }), + remove: action((state, toastId) => { + state.sessionState.toasts = state.sessionState.toasts.filter((toast) => toast.id !== toastId) + }), + removeOldest: action((state) => { + state.sessionState.toasts.shift() + }), +}) diff --git a/src/lib/store/__tests__/migration-tests.ts b/src/lib/store/__tests__/migration-tests.ts index 9790576b2c4..68a03149432 100644 --- a/src/lib/store/__tests__/migration-tests.ts +++ b/src/lib/store/__tests__/migration-tests.ts @@ -277,3 +277,20 @@ describe("App version Versions.RenameUserEmail", () => { expect(migratedState.auth.userEmail).toEqual("user@ios.com") }) }) + +describe("App version Versions.AddToastModel", () => { + const migrationToTest = Versions.AddToastModel + it("adds session toast storage", () => { + const previousState = migrate({ + state: { version: 0 }, + toVersion: migrationToTest - 1, + }) as any + + const migratedState = migrate({ + state: previousState, + toVersion: migrationToTest, + }) as any + + expect(migratedState.toast).toEqual({}) + }) +}) diff --git a/src/lib/store/config/EnvironmentModel.tsx b/src/lib/store/config/EnvironmentModel.tsx index 6c487e6c036..7a6a4907092 100644 --- a/src/lib/store/config/EnvironmentModel.tsx +++ b/src/lib/store/config/EnvironmentModel.tsx @@ -49,7 +49,7 @@ export const environment = defineEnvironmentOptions({ presets: { local: "http://localhost:5000", staging: "https://staging.artsy.net", - production: "https://artsy.net", + production: "https://www.artsy.net", }, }, causalityURL: { diff --git a/src/lib/store/config/features.ts b/src/lib/store/config/features.ts index 0930750190b..7fe3c3c79a1 100644 --- a/src/lib/store/config/features.ts +++ b/src/lib/store/config/features.ts @@ -103,10 +103,18 @@ export const features = defineFeatures({ }, AREnableSavedSearch: { readyForRelease: true, - // TODO: after implementation of notifications for android we need to change the following line to - // echoFlagKey: "AREnableSavedSearch", - echoFlagKey: Platform.OS === "ios" ? "AREnableSavedSearch" : undefined, - description: "Enable Saved Search", + echoFlagKey: "AREnableSavedSearch", + description: "Enable Saved Search: iOS", + }, + AREnableSavedSearchAndroid: { + readyForRelease: false, + echoFlagKey: "AREnableSavedSearchAndroid", + description: "Enable Saved Search: Android", + showInAdminMenu: true, + }, + AREnableSavedSearchV2: { + readyForRelease: false, + description: "Enable Saved Search V2", showInAdminMenu: true, }, AREnableNewOnboardingFlow: { @@ -159,6 +167,9 @@ export const devToggles = defineDevToggles({ } }, }, + DTShowAnalyticsVisualiser: { + description: "Show analytics visualiser", + }, }) export const isDevToggle = (name: FeatureName | DevToggleName): name is DevToggleName => { diff --git a/src/lib/store/migration.ts b/src/lib/store/migration.ts index c72cfdea0e6..f419a0fbf49 100644 --- a/src/lib/store/migration.ts +++ b/src/lib/store/migration.ts @@ -21,9 +21,10 @@ export const Versions = { AddUserIsDev: 9, AddAuthOnboardingState: 10, RenameUserEmail: 11, + AddToastModel: 12, } -export const CURRENT_APP_VERSION = Versions.RenameUserEmail +export const CURRENT_APP_VERSION = Versions.AddToastModel export type Migrations = Record any> export const artsyAppMigrations: Migrations = { @@ -86,6 +87,9 @@ export const artsyAppMigrations: Migrations = { state.auth.userEmail = state.auth.userEmail ?? null delete state.auth.androidUserEmail }, + [Versions.AddToastModel]: (state) => { + state.toast = {} + }, } export function migrate({ diff --git a/src/lib/tests/renderRelayTree.tsx b/src/lib/tests/renderRelayTree.tsx index 85c18f5a854..f6a42d9b13c 100644 --- a/src/lib/tests/renderRelayTree.tsx +++ b/src/lib/tests/renderRelayTree.tsx @@ -1,5 +1,7 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, RenderUntilPredicate } from "enzyme" +import { GlobalStoreProvider } from "lib/store/GlobalStore" +import { Theme } from "palette" import React from "react" import { Variables } from "relay-runtime" import { LoadingTestID } from "../utils/renderWithLoadProgress" @@ -109,15 +111,19 @@ export function renderRelayTree

+ + + + + ) return mount(wrapper ? wrapper(renderer) : renderer).renderUntil( renderUntilPredicate || RelayFinishedLoading diff --git a/src/lib/utils/AdminMenu.tsx b/src/lib/utils/AdminMenu.tsx index 3835231e81a..120f5700965 100644 --- a/src/lib/utils/AdminMenu.tsx +++ b/src/lib/utils/AdminMenu.tsx @@ -9,7 +9,8 @@ import { environment, EnvironmentKey } from "lib/store/config/EnvironmentModel" import { DevToggleName, devToggles, FeatureName, features } from "lib/store/config/features" import { GlobalStore } from "lib/store/GlobalStore" import { capitalize, compact, sortBy } from "lodash" -import { ChevronIcon, CloseIcon, color, Flex, ReloadIcon, Separator, Spacer, Text } from "palette" +import { ChevronIcon, CloseIcon, Flex, ReloadIcon, Separator, Spacer, Text, useColor } from "palette" +import { DevTogglePaletteFlag } from "palette/PaletteFlag" import React, { useEffect, useState } from "react" import { Alert, @@ -84,6 +85,12 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa navigate("/admin", { modal: true }) }} /> + { + navigate("/storybook") + }} + /> @@ -116,6 +123,7 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa {configurableDevToggleKeys.map((devToggleKey) => { return })} + void }> = ({ onClose }) => { + const color = useColor() const { env, adminOverrides, strings } = GlobalStore.useAppState((store) => store.config.environment) // show custom url options if there are already admin overrides in effect, or if the user has tapped the option // to set custom overrides during the lifetime of this component diff --git a/src/lib/utils/QAInfo.tsx b/src/lib/utils/QAInfo.tsx index 4ec81212449..d26404210a2 100644 --- a/src/lib/utils/QAInfo.tsx +++ b/src/lib/utils/QAInfo.tsx @@ -1,7 +1,7 @@ import Clipboard from "@react-native-community/clipboard" import { useToast } from "lib/Components/Toast/toastHook" import { useDevToggle } from "lib/store/GlobalStore" -import { color, Flex, FlexProps, Text, Touchable } from "palette" +import { Flex, FlexProps, Text, Touchable, useColor } from "palette" import React from "react" export const QAInfoPanel: React.FC & { info: Array<[string, string]> }> = (props) => ( @@ -22,6 +22,7 @@ export const QAInfoManualPanel: React.FC = (props) => { } export const QAInfoRow: React.FC<{ name: string; value: string }> = ({ name, value }) => { + const color = useColor() const toast = useToast() return ( diff --git a/src/lib/utils/__tests__/renderMarkdown-tests.tsx b/src/lib/utils/__tests__/renderMarkdown-tests.tsx index 26ffd729348..eeb9f031545 100644 --- a/src/lib/utils/__tests__/renderMarkdown-tests.tsx +++ b/src/lib/utils/__tests__/renderMarkdown-tests.tsx @@ -7,6 +7,7 @@ import { defaultRules, renderMarkdown } from "../renderMarkdown" import { readFileSync } from "fs" import { navigate } from "lib/navigation/navigate" +import { GlobalStoreProvider } from "lib/store/GlobalStore" import { join } from "path" describe("renderMarkdown", () => { @@ -110,9 +111,11 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - {componentList} - + + + {componentList} + + ) expect(renderedComponent.find(LinkText).length).toEqual(2) @@ -143,9 +146,11 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - {componentList} - + + + {componentList} + + ) expect(renderedComponent.find(LinkText).length).toEqual(2) diff --git a/src/lib/utils/hideBackButtonOnScroll.tsx b/src/lib/utils/hideBackButtonOnScroll.tsx index c629e12271f..8397dbeff6c 100644 --- a/src/lib/utils/hideBackButtonOnScroll.tsx +++ b/src/lib/utils/hideBackButtonOnScroll.tsx @@ -4,7 +4,7 @@ import { unsafe__getSelectedTab } from "lib/store/GlobalStore" import { useContext, useMemo } from "react" import { FlatListProps, Platform } from "react-native" -const SCROLL_UP_TO_SHOW_THRESHOLD = 150 +export const SCROLL_UP_TO_SHOW_THRESHOLD = 150 const SCROLL_DOWN_TO_HIDE_THRESHOLD = 50 type Direction = "up" | "down" | null diff --git a/src/lib/utils/placeholders.tsx b/src/lib/utils/placeholders.tsx index b004da8aae9..a74047f7f8e 100644 --- a/src/lib/utils/placeholders.tsx +++ b/src/lib/utils/placeholders.tsx @@ -1,5 +1,5 @@ import { GenericGridPlaceholder } from "lib/Components/ArtworkGrids/GenericGrid" -import { color, Flex } from "palette" +import { Flex, useColor } from "palette" import React, { useContext, useEffect, useMemo, useRef } from "react" import { View, ViewStyle } from "react-native" import Animated from "react-native-reanimated" @@ -34,6 +34,7 @@ export const ProvidePlaceholderContext: React.FC<{}> = ({ children }) => { } export const PlaceholderBox: React.FC = ({ children, ...styles }) => { + const color = useColor() const ctx = useContext(PlaceholderContext) if (!ctx) { throw new Error("You're using a Placeholder outside of a PlaceholderContext") diff --git a/src/lib/utils/renderMarkdown.tsx b/src/lib/utils/renderMarkdown.tsx index 4e085aab18e..9950b2b81bb 100644 --- a/src/lib/utils/renderMarkdown.tsx +++ b/src/lib/utils/renderMarkdown.tsx @@ -2,7 +2,7 @@ import { decode } from "html-entities" import { LinkText } from "lib/Components/Text/LinkText" import { navigate } from "lib/navigation/navigate" import _ from "lodash" -import { color, Sans, Separator, Serif, space, Text } from "palette" +import { ClassTheme, Sans, Separator, Serif, Text } from "palette" import React from "react" import { Text as RNText, View } from "react-native" import SimpleMarkdown, { ParserRule, ParserRules, ReactNodeOutput } from "simple-markdown" @@ -242,9 +242,13 @@ export function defaultRules({ }, blockQuote: { react: (node, output, state) => ( - - {output(node.content, state)} - + + {({ color, space }) => ( + + {output(node.content, state)} + + )} + ), }, hr: { diff --git a/src/lib/utils/track/SegmentTrackingProvider.ts b/src/lib/utils/track/SegmentTrackingProvider.ts index b63b632dff7..fd54c56f5c8 100644 --- a/src/lib/utils/track/SegmentTrackingProvider.ts +++ b/src/lib/utils/track/SegmentTrackingProvider.ts @@ -1,8 +1,14 @@ +import Clipboard from "@react-native-community/clipboard" import { Analytics } from "@segment/analytics-react-native" +import { addBreadcrumb } from "@sentry/react-native" +import { Toast } from "lib/Components/Toast/Toast" +import { unsafe_getDevToggle } from "lib/store/GlobalStore" import { Platform } from "react-native" import Config from "react-native-config" import { isCohesionScreen, TrackingProvider } from "./providers" +export const SEGMENT_TRACKING_PROVIDER = "SEGMENT_TRACKING_PROVIDER" + let analytics: Analytics.Client export const SegmentTrackingProvider: TrackingProvider = { setup: () => { @@ -10,25 +16,35 @@ export const SegmentTrackingProvider: TrackingProvider = { const Braze = require("@segment/analytics-react-native-appboy").default analytics - .setup(__DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, { - using: [Braze], - }) + .setup( + Platform.select({ + ios: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_IOS : Config.SEGMENT_PRODUCTION_WRITE_KEY_IOS, + android: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, + default: "", + }), + { + using: [Braze], + } + ) .then(() => console.log("Analytics is ready")) .catch((err) => console.error("Something went wrong", err)) }, identify: (userId, traits) => { - // temporary guard - if (Platform.OS !== "android") { - return - } - analytics.identify(userId, traits) }, postEvent: (info) => { - // temporary guard - if (Platform.OS !== "android") { + addBreadcrumb({ + message: `${JSON.stringify(info, null, 2)}`, + category: "analytics", + }) + + // Events bubbled up from ios native + if ("screen_name" in info) { + const { screen_name, ...rest } = info + visualize("Screen", screen_name, info) + analytics.screen(screen_name, rest as any) return } @@ -36,8 +52,10 @@ export const SegmentTrackingProvider: TrackingProvider = { const { action } = info if (isCohesionScreen(info)) { const { context_screen_owner_type } = info + visualize("Screen", context_screen_owner_type, info) analytics.screen(context_screen_owner_type, info as any) } else { + visualize("Track", action, info) analytics.track(action, info as any) } return @@ -45,23 +63,61 @@ export const SegmentTrackingProvider: TrackingProvider = { if ("action_type" in info) { const { action_type, ...rest } = info + visualize("Track", action_type, info) analytics.track(action_type, rest as any) return } if ("name" in info) { const { name, ...rest } = info + visualize("Track", name, info) analytics.track(name, rest as any) return } if ("context_screen" in info) { const { context_screen, ...rest } = info + visualize("Screen", context_screen, info) analytics.screen(context_screen, rest as any) return } + // default check events from ios native + if ("event_name" in info) { + const { event_name, ...rest } = info + visualize("Track", event_name, info) + analytics.track(event_name, rest as any) + return + } + console.warn("oh wow, we are not tracking this event!! we should!", { info }) assertNever(info) }, } + +const visualize = (type: string, name: string, info: { [key: string]: any }) => { + if (!unsafe_getDevToggle("DTShowAnalyticsVisualiser")) { + return + } + + const title = `${type}: ${name}` + const message = JSON.stringify(info, null, 2) + + Toast.show(title, "top", { + onPress: ({ showActionSheetWithOptions }) => { + showActionSheetWithOptions( + { + title, + message, + options: ["Copy description", "Continue"], + cancelButtonIndex: 1, + }, + (buttonIndex) => { + if (buttonIndex === 0) { + Clipboard.setString(message) + } + } + ) + }, + }) +} diff --git a/src/lib/utils/track/providers.tsx b/src/lib/utils/track/providers.tsx index e30c76df92c..e9e26f31a16 100644 --- a/src/lib/utils/track/providers.tsx +++ b/src/lib/utils/track/providers.tsx @@ -6,6 +6,14 @@ interface CohesionAction { // TODO: This can be removed once cohesion provides a global `Action` type. action: string } + +type NativeIOSTrackingEventID = + | { + // identifier for native ios events for tracking + screen_name: string + } + | { event_name: string } + export const isCohesionScreen = (info: CohesionAction | Screen): info is Screen => info.action === ActionType.screen interface LegacyNameAction { @@ -13,7 +21,13 @@ interface LegacyNameAction { name: string } -type InfoType = Schema.PageView | Schema.Entity | CohesionAction | Screen | LegacyNameAction +export type InfoType = + | Schema.PageView + | Schema.Entity + | CohesionAction + | Screen + | LegacyNameAction + | NativeIOSTrackingEventID export interface TrackingProvider { setup?: () => void diff --git a/src/palette/ClassTheme.tsx b/src/palette/ClassTheme.tsx new file mode 100644 index 00000000000..c0df1a33317 --- /dev/null +++ b/src/palette/ClassTheme.tsx @@ -0,0 +1,13 @@ +import React from "react" +import { Theme, useTheme } from "./Theme" + +export const ClassTheme = ({ + theme = "v2", + children, +}: { + theme?: "v2" | "v3" + children: React.ReactNode | ((helpers: ReturnType) => React.ReactNode) +}) => { + const hookStuff = useTheme() + return {typeof children === "function" ? children(hookStuff) : children} +} diff --git a/src/palette/PaletteFlag.tsx b/src/palette/PaletteFlag.tsx new file mode 100644 index 00000000000..ba15db3f7aa --- /dev/null +++ b/src/palette/PaletteFlag.tsx @@ -0,0 +1,59 @@ +import AsyncStorage from "@react-native-community/async-storage" +import { MenuItem } from "lib/Components/MenuItem" +import { Text } from "palette" +import React from "react" +import { Alert } from "react-native" +import create from "zustand" +import { persist } from "zustand/middleware" + +interface PaletteFlagState { + allowV3: boolean + setAllowV3: (value: boolean) => void +} + +export const usePaletteFlagStore = create( + persist( + (set) => ({ + allowV3: __TEST__, + setAllowV3: (value) => set((_state) => ({ allowV3: value })), + }), + { name: "z-devtoggle-palette", getStorage: () => AsyncStorage } + ) +) + +export const DevTogglePaletteFlag = () => { + const currentValue = usePaletteFlagStore((state) => state.allowV3) + const setValue = usePaletteFlagStore((state) => state.setAllowV3) + + const description = "Allow Palette V3" + const valText = currentValue ? "Yes" : "No" + + return ( + { + Alert.alert(description, undefined, [ + { + text: currentValue ? "Keep turned ON" : "Turn ON", + onPress: () => setValue(true), + }, + { + text: currentValue ? "Turn OFF" : "Keep turned OFF", + onPress: () => setValue(false), + }, + ]) + }} + value={ + currentValue ? ( + + {valText} + + ) : ( + + {valText} + + ) + } + /> + ) +} diff --git a/src/palette/Theme.tsx b/src/palette/Theme.tsx index 0e10b7499a1..0b5df0fb6da 100644 --- a/src/palette/Theme.tsx +++ b/src/palette/Theme.tsx @@ -1,28 +1,177 @@ -import tokens from "@artsy/palette-tokens" -import React from "react" -import { TEXT_FONTS } from "./elements/Text/tokens" +import { THEME_V2, THEME_V3 } from "@artsy/palette-tokens" +import _ from "lodash" +import React, { useContext } from "react" +import { ThemeContext, ThemeProvider } from "styled-components/native" +import { TEXT_FONTS_V2, TEXT_FONTS_V3 } from "./elements/Text/tokens" +import { usePaletteFlagStore } from "./PaletteFlag" import { fontFamily } from "./platform/fonts/fontFamily" -import { ThemeProvider } from "./platform/primitives" /** * All of the config for the Artsy theming system, based on the * design system from our design team: * https://www.notion.so/artsy/Master-Library-810612339f474d0997fe359af4285c56 */ -export * from "@artsy/palette-tokens" -export const themeProps = { - ...tokens, - fontFamily, - fonts: TEXT_FONTS, +export { SansSize, SerifSize, TypeSizes } from "@artsy/palette-tokens/dist/themes/v2" + +import { Color as ColorV2, SpacingUnit as SpacingUnitV2 } from "@artsy/palette-tokens/dist/themes/v2" +import { Color as ColorV3, SpacingUnit as SpacingUnitV3Numbers } from "@artsy/palette-tokens/dist/themes/v3" + +type SpacingUnitV3 = `${SpacingUnitV3Numbers}` +export type Color = ColorV2 | ColorV3 +export type SpacingUnit = SpacingUnitV2 | SpacingUnitV3 +export { ColorV2, ColorV3, SpacingUnitV2, SpacingUnitV3 } + +const { + breakpoints: _eigenDoesntCareAboutBreakpoints, + mediaQueries: _eigenDoesntCareAboutMediaQueries, + grid: _eigenDoesntCareAboutGrid, + space: spaceNumbers, + ...eigenUsefulTHEME_V3 +} = THEME_V3 + +// this function is converting the space values that come from palette-tokens +// from a string `"120px"` to a number `120`. +const fixSpaceUnitsV2 = ( + units: typeof THEME_V2.space +): { + 0.3: number + 0.5: number + 1: number + 1.5: number + 2: number + 3: number + 4: number + 5: number + 6: number + 9: number + 12: number + 18: number +} => { + let fixed = units + + fixed = _.mapValues(fixed, (stringValueWithPx) => { + const justStringValue = _.split(stringValueWithPx, "px")[0] + const numberValue = parseInt(justStringValue, 10) + return numberValue + }) as any + + return fixed as any } -interface ThemeProps { - override?: { [key: string]: any } +// this function is converting the space values that come from palette-tokens +// from a string `"120px"` to a number `120`, and the key values +// from a number `0.5` to a string `"0.5"`. +const fixSpaceUnitsV3 = ( + units: typeof spaceNumbers +): { + "0.5": number + "1": number + "2": number + "4": number + "6": number + "12": number +} => { + let fixed = units + + fixed = _.mapKeys(fixed, (_value, numberKey) => `${numberKey}`) as any + + fixed = _.mapValues(fixed, (stringValueWithPx) => { + const justStringValue = _.split(stringValueWithPx, "px")[0] + const numberValue = parseInt(justStringValue, 10) + return numberValue + }) as any + + return fixed as any +} + +const THEMES = { + v2: { ...THEME_V2, fontFamily, fonts: TEXT_FONTS_V2, space: fixSpaceUnitsV2(THEME_V2.space) }, + v3: { + ...eigenUsefulTHEME_V3, + fonts: TEXT_FONTS_V3, + space: fixSpaceUnitsV3(spaceNumbers), + }, // v3 removed `fontFamily`, `fontSizes`, `letterSpacings`, `lineHeights`, `typeSizes` } +type ThemeV2Type = typeof THEMES.v2 +type ThemeV3Type = typeof THEMES.v3 +type ThemeType = ThemeV2Type | ThemeV3Type + /** - * A wrapper component for passing down the Artsy theme context + * Do not use this!! Use any the hooks instead! */ -export const Theme: React.FC = (props) => { - return {props.children} +export const themeProps = THEMES.v2 + +export const Theme: React.FC<{ + theme?: keyof typeof THEMES | ThemeType + override?: DeepPartial | DeepPartial +}> = ({ children, theme = "v2", override = {} }) => { + const allowV3 = usePaletteFlagStore((state) => state.allowV3) + + let actualTheme: ThemeType + if (_.isString(theme)) { + if (allowV3) { + actualTheme = THEMES[theme] + } else { + actualTheme = THEMES.v2 + } + } else { + actualTheme = theme + } + + return {children} } + +export const ThemeV2: React.FC = ({ children }) => {children} +export const ThemeV3: React.FC = ({ children }) => {children} + +interface ColorFuncOverload { + (colorNumber: undefined): undefined + (colorNumber: Color): string + (colorNumber: Color | undefined): string | undefined +} +const color = (theme: ThemeType): ColorFuncOverload => (colorName: any): any => + colorName === undefined + ? undefined + : isThemeV2(theme) + ? theme.colors[colorName as ColorV2] + : // @ts-ignore + theme.colors[colorName as ColorV3] + +const space = (theme: ThemeType) => (spaceName: SpacingUnitV2 | SpacingUnitV3): number => + isThemeV2(theme) + ? ((theme.space[spaceName as SpacingUnitV2] as unknown) as number) + : theme.space[spaceName as SpacingUnitV3] + +export const useTheme = () => { + const theme: ThemeType = useContext(ThemeContext) + + // if we are not wrapped in ``, if we dev, throw error. if we are in prod, just default to v2 to avoid a crash. + if (theme === undefined) { + if (__DEV__ || __TEST__) { + console.error( + "You are trying to use the `Theme` but you have not wrapped your component/screen with ``. Please wrap and try again." + ) + throw new Error("ThemeContext is not defined. Wrap your component with `` and try again.") + } else { + return { theme: THEMES.v2, color: color(THEMES.v2), space: space(THEMES.v2) } + } + } + + // if we are wrapped, then all good. + return { theme, color: color(theme), space: space(theme) } +} + +export const isThemeV2 = (theme: ThemeType): theme is ThemeV2Type => theme.id === "v2" +export const isThemeV3 = (theme: ThemeType): theme is ThemeV3Type => theme.id === "v3" + +/** + * Only use this if it's are absolutely neccessary. + */ +// tslint:disable-next-line:variable-name +export const _test_colorV2 = color(THEMES.v2) +/** + * Only use this if it's are absolutely neccessary. + */ +// tslint:disable-next-line:variable-name +export const _test_colorV3 = color(THEMES.v3) diff --git a/src/palette/elements/Avatar/Avatar.tsx b/src/palette/elements/Avatar/Avatar.tsx index 72f8f1c4e30..e4311836ba3 100644 --- a/src/palette/elements/Avatar/Avatar.tsx +++ b/src/palette/elements/Avatar/Avatar.tsx @@ -1,8 +1,8 @@ +import { themeGet } from "@styled-system/theme-get" import React, { FunctionComponent, ImgHTMLAttributes } from "react" import { Image } from "react-native" +import styled from "styled-components/native" import { borderRadius } from "styled-system" -import { styledWrapper } from "../../platform/primitives" -import { color } from "../../Theme" import { Flex } from "../Flex" import { Text, TextFontSize } from "../Text" @@ -92,8 +92,8 @@ export const BaseAvatar = ({ src, initials, size = "md", renderAvatar }: BaseAva } /** InitialsHolder */ -export const InitialsHolder = styledWrapper(Flex)` - background-color: ${color("black10")}; +export const InitialsHolder = styled(Flex)` + background-color: ${themeGet("colors.black10")}; text-align: center; overflow: hidden; ${borderRadius} diff --git a/src/palette/elements/BorderBox/BorderBox.tsx b/src/palette/elements/BorderBox/BorderBox.tsx index 8b4b4e1a535..c9a9018d5ca 100644 --- a/src/palette/elements/BorderBox/BorderBox.tsx +++ b/src/palette/elements/BorderBox/BorderBox.tsx @@ -1,8 +1,8 @@ +import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" +import styled from "styled-components/native" import { border, BorderProps, space as styledSpace, SpaceProps } from "styled-system" -import { styledWrapper } from "../../platform/primitives" -import { color, space } from "../../Theme" import { Flex, FlexProps } from "../Flex" export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { @@ -13,10 +13,10 @@ export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { * A `View` or `div` (depending on the platform) that has a common border * and padding set by default */ -export const BorderBox = styledWrapper(Flex)` - border: 1px solid ${color("black10")}; +export const BorderBox = styled(Flex)` + border: 1px solid ${themeGet("colors.black10")}; border-radius: 2px; - padding: ${space(2)}px; + padding: ${themeGet("space.2")}px; ${border} ${styledSpace} ` diff --git a/src/palette/elements/Button/Button.stories.tsx b/src/palette/elements/Button/Button.stories.tsx new file mode 100644 index 00000000000..9332fe230e1 --- /dev/null +++ b/src/palette/elements/Button/Button.stories.tsx @@ -0,0 +1,45 @@ +import { action } from "@storybook/addon-actions" +import { storiesOf } from "@storybook/react-native" +import { Button, ButtonSize, ButtonVariant } from "palette" +import React from "react" +import { DList, List } from "storybook/helpers" + +const sizes: ButtonSize[] = ["small", "medium", "large"] + +const variants: ButtonVariant[] = [ + "primaryBlack", + "primaryWhite", + "secondaryGray", + "secondaryOutline", + "secondaryOutlineWarning", + "noOutline", +] + +storiesOf("Button", module) + .add("Sizes", () => ( + ( + + )} + /> + )) + .add("Variants", () => ( + ( + + )} + /> + )) + .add("States", () => ( + + + + + + )) diff --git a/src/palette/elements/Button/Button.test.tsx b/src/palette/elements/Button/Button.test.tsx index 80b9a1cde1c..ebcaf731dde 100644 --- a/src/palette/elements/Button/Button.test.tsx +++ b/src/palette/elements/Button/Button.test.tsx @@ -8,9 +8,11 @@ describe("Button", () => { it("returns variants and sizes", () => { const getWrapper = (props) => { return mount( - - - + + + + + ) } @@ -43,9 +45,11 @@ describe("Button", () => { it("shows spinner if loading is true", () => { const wrapper = mount( - - - + + + + + ) expect(wrapper.find("Spinner").length).toBe(1) expect(wrapper.html()).toContain('class="loading') @@ -55,11 +59,13 @@ describe("Button", () => { const onClickMock = jest.fn() const wrapper = mount( - - - + + + + + ) wrapper.find("Button").simulate("click") @@ -69,12 +75,14 @@ describe("Button", () => { it("passes the `disabled` prop down to the DOM element", () => { const wrapper = mount( - - <> - - - - + + + <> + + + + + ) expect(wrapper.find("button[disabled]")).toHaveLength(1) diff --git a/src/palette/elements/Button/Button.tsx b/src/palette/elements/Button/Button.tsx index 4c0c2c79530..e45cf7e3312 100644 --- a/src/palette/elements/Button/Button.tsx +++ b/src/palette/elements/Button/Button.tsx @@ -1,4 +1,4 @@ -import { color } from "palette" +import { useColor } from "palette/hooks" import React, { ReactNode, useState } from "react" import { GestureResponderEvent, TouchableWithoutFeedback } from "react-native" import Haptic, { HapticFeedbackTypes } from "react-native-haptic-feedback" @@ -19,17 +19,28 @@ export type ButtonVariant = | "secondaryOutline" | "secondaryOutlineWarning" | "noOutline" + /** Default button color variant */ export const defaultVariant: ButtonVariant = "primaryBlack" /** The size of the button */ export type ButtonSize = "small" | "medium" | "large" +/** Icon position */ +export type ButtonIconPosition = "left" | "right" + /** Default button size */ export const defaultSize: ButtonSize = "medium" +/** Default icon position */ +export const defaultIconPosition: ButtonIconPosition = "left" + export interface ButtonProps extends ButtonBaseProps { children: ReactNode + /** The icon component */ + icon?: ReactNode + /** Icon position */ + iconPosition?: ButtonIconPosition /** The size of the button */ size?: ButtonSize /** The theme of the button */ @@ -183,8 +194,10 @@ enum DisplayState { /** A button with various size and color settings */ export const Button: React.FC = (props) => { + const color = useColor() const size = props.size ?? defaultSize const variant = props.variant ?? defaultVariant + const iconPosition = props.iconPosition ?? defaultIconPosition const [previous, setPrevious] = useState(DisplayState.Enabled) const [current, setCurrent] = useState(DisplayState.Enabled) @@ -257,12 +270,13 @@ export const Button: React.FC = (props) => { props.onPress(event) } - const { children, loading, disabled, inline, longestText, ...rest } = props + const { children, loading, disabled, inline, longestText, style, icon, ...rest } = props const s = getSize() const variantColors = getColorsForVariant(variant, disabled) const from = variantColors[previous] const to = variantColors[current] + const iconBox = {icon} return ( @@ -290,13 +304,18 @@ export const Button: React.FC = (props) => { px={s.px} > + {iconPosition === "left" && iconBox} {children} + {iconPosition === "right" && iconBox} - - {longestText ? longestText : children} - + + {icon} + + {longestText ? longestText : children} + + {!!loading && } @@ -320,10 +339,14 @@ const VisibleTextContainer = styled(Box)` height: 100%; ` -const HiddenText = styled(Sans)` +const HiddenContainer = styled(Box)` + display: flex; + flex-direction: row; opacity: 0; ` +const LongestText = styled(Sans)`` + const Container = styled(Box)` align-items: center; justify-content: center; diff --git a/src/palette/elements/Cards/CardTag.tsx b/src/palette/elements/Cards/CardTag.tsx index 03a727d383d..2f84839942d 100644 --- a/src/palette/elements/Cards/CardTag.tsx +++ b/src/palette/elements/Cards/CardTag.tsx @@ -2,10 +2,9 @@ import React from "react" import { View } from "react-native" import { StyleProp, ViewStyle } from "react-native" import { PositionProps } from "styled-system" - -import { Sans } from ".." -import { color } from "../../Theme" +import { useColor } from "../../hooks" import { Color } from "../../Theme" +import { Sans } from "../Typography" export interface CardTagProps extends PositionProps { text: string @@ -19,6 +18,7 @@ export interface CardTagProps extends PositionProps { * `CardTag` is used for the Cards, and is controlled by their `tag` prop. */ export const CardTag: React.FC = ({ text, textColor, color: bgColor, borderColor, style }) => { + const color = useColor() return ( = ({ image, title, subtitle, tag }) => { + const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/MediumCard.tsx b/src/palette/elements/Cards/MediumCard.tsx index dc1369e74bd..714df5b76df 100644 --- a/src/palette/elements/Cards/MediumCard.tsx +++ b/src/palette/elements/Cards/MediumCard.tsx @@ -1,8 +1,11 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" -import { color, Flex, Sans, space, Spacer } from "palette" +import { useTheme } from "palette/Theme" import React from "react" import LinearGradient from "react-native-linear-gradient" import { Box, BoxProps } from "../Box" +import { Flex } from "../Flex" +import { Spacer } from "../Spacer" +import { Sans } from "../Typography" import { CardTag, CardTagProps } from "./CardTag" export interface MediumCardProps extends BoxProps { @@ -17,6 +20,7 @@ export interface MediumCardProps extends BoxProps { * at the bottom. */ export const MediumCard: React.FC = ({ image, title, subtitle, tag, ...rest }) => { + const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/SmallCard.tsx b/src/palette/elements/Cards/SmallCard.tsx index ce0a3f46e9b..404eaea0e12 100644 --- a/src/palette/elements/Cards/SmallCard.tsx +++ b/src/palette/elements/Cards/SmallCard.tsx @@ -1,8 +1,9 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" +import { useSpace } from "palette/hooks" import React from "react" -import { Box, Spacer, Text } from ".." -import { space } from "../../Theme" -import { BoxProps } from "../Box" +import { Box, BoxProps } from "../Box" +import { Spacer } from "../Spacer" +import { Text } from "../Text" import { CardTag, CardTagProps } from "./CardTag" export interface SmallCardProps extends BoxProps { @@ -18,6 +19,7 @@ export interface SmallCardProps extends BoxProps { * at the bottom. */ export const SmallCard: React.FC = ({ images, title, subtitle, tag, ...rest }) => { + const space = useSpace() return ( `` +export const Flex = styled(Box)`` Flex.defaultProps = { display: "flex", diff --git a/src/palette/elements/Message/Message.tsx b/src/palette/elements/Message/Message.tsx index 13dd9a74ff8..b7c43f942ce 100644 --- a/src/palette/elements/Message/Message.tsx +++ b/src/palette/elements/Message/Message.tsx @@ -1,6 +1,7 @@ +import { themeGet } from "@styled-system/theme-get" import React from "react" -import { styledWrapper } from "../../platform/primitives" -import { color } from "../../Theme" +import styled from "styled-components/native" +import { useColor } from "../../hooks" import { SansSize } from "../../Theme" import { Flex, FlexProps } from "../Flex" import { Sans } from "../Typography" @@ -13,8 +14,8 @@ interface MessageProps extends FlexProps { textSize?: SansSize } -const StyledFlex = styledWrapper(Flex)` - background-color: ${color("black5")}; +const StyledFlex = styled(Flex)` + background-color: ${themeGet("colors.black5")}; border-radius: 2px; ` @@ -22,6 +23,7 @@ const StyledFlex = styledWrapper(Flex)` * A generic message window for displaying ZerStates, notices, errors, etc. */ export const Message: React.FC = ({ children, textSize = "3t", ...others }) => { + const color = useColor() return ( diff --git a/src/palette/elements/Radio/RadioDot.tsx b/src/palette/elements/Radio/RadioDot.tsx index f0b9a50e374..1b5ca300aa9 100644 --- a/src/palette/elements/Radio/RadioDot.tsx +++ b/src/palette/elements/Radio/RadioDot.tsx @@ -1,4 +1,4 @@ -import { color } from "@artsy/palette-tokens" +import { themeGet } from "@styled-system/theme-get" import React from "react" import styled, { css } from "styled-components/native" import { Box } from "../Box" @@ -7,55 +7,55 @@ const RADIO_DOT_MODES = { default: { resting: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black10")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black10")}; `, selected: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black100")}; - background-color: ${color("black100")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black100")}; + background-color: ${themeGet("colors.black100")}; `, }, disabled: { resting: css` border: 2px solid; color: transparent; - border-color: ${color("black10")}; - background-color: ${color("black10")}; + border-color: ${themeGet("colors.black10")}; + background-color: ${themeGet("colors.black10")}; `, selected: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black10")}; - background-color: ${color("black10")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black10")}; + background-color: ${themeGet("colors.black10")}; `, }, error: { resting: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("red100")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.red100")}; `, selected: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black100")}; - background-color: ${color("black100")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black100")}; + background-color: ${themeGet("colors.black100")}; `, }, hover: { resting: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black10")}; - background-color: ${color("black10")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black10")}; + background-color: ${themeGet("colors.black10")}; `, selected: css` border: 2px solid; - color: ${color("white100")}; - border-color: ${color("black100")}; - background-color: ${color("black100")}; + color: ${themeGet("colors.white100")}; + border-color: ${themeGet("colors.black100")}; + background-color: ${themeGet("colors.black100")}; `, }, } @@ -119,7 +119,7 @@ const Dot = styled(Box)` } return css` - background-color: ${color("white100")}; + background-color: ${themeGet("colors.white100")}; ` }}; ` diff --git a/src/palette/elements/Separator/Separator.tsx b/src/palette/elements/Separator/Separator.tsx index 44b98a471d5..070c8bd5c46 100644 --- a/src/palette/elements/Separator/Separator.tsx +++ b/src/palette/elements/Separator/Separator.tsx @@ -1,17 +1,16 @@ +import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" - +import styled from "styled-components/native" import { border, BorderProps, space, SpaceProps, width, WidthProps } from "styled-system" -import { styled as primitives } from "../../platform/primitives" -import { color } from "../../Theme" export interface SeparatorProps extends SpaceProps, WidthProps, BorderProps {} /** * A horizontal divider whose width and spacing can be adjusted */ -export const Separator = primitives.View` - border: 1px solid ${color("black10")}; +export const Separator = styled.View` + border: 1px solid ${themeGet("colors.black10")}; border-bottom-width: 0; ${space}; ${width}; diff --git a/src/palette/elements/Spinner/Spinner.tsx b/src/palette/elements/Spinner/Spinner.tsx index 248984757ce..26acfd9b69d 100644 --- a/src/palette/elements/Spinner/Spinner.tsx +++ b/src/palette/elements/Spinner/Spinner.tsx @@ -1,7 +1,8 @@ +import { themeGet } from "@styled-system/theme-get" import React, { useEffect, useMemo } from "react" import { Animated, Easing, ViewProps } from "react-native" import styled from "styled-components/native" -import { Color, color as colorResolve } from "../../Theme" +import { Color } from "../../Theme" export interface SpinnerProps extends ViewProps { /** Delay before spinner appears */ @@ -95,9 +96,10 @@ const Bar = styled(Animated.View)` ${(props) => { const { width, height } = getSize(props) + const propColorString = `colors.${props.color}` return ` - background: ${colorResolve(props.color)}; + background: ${themeGet(propColorString)}; width: ${width}px; height: ${height}px; ` diff --git a/src/palette/elements/Text/Text.tsx b/src/palette/elements/Text/Text.tsx index dee11967775..8594148c3ad 100644 --- a/src/palette/elements/Text/Text.tsx +++ b/src/palette/elements/Text/Text.tsx @@ -1,6 +1,7 @@ import { TEXT_LINE_HEIGHTS } from "@artsy/palette-tokens/dist/text" import React from "react" import { TextProps as RNTextProps } from "react-native" +import styled from "styled-components/native" import { color, ColorProps, @@ -12,7 +13,6 @@ import { TypographyProps, variant as systemVariant, } from "styled-system" -import { styled as primitives } from "../../platform/primitives" import { calculateLetterSpacing, calculateLineHeight, @@ -20,6 +20,7 @@ import { isControlledLetterSpacing, isControlledLineHeight, TEXT_VARIANTS, + TextLineHeight, TextVariant, TREATMENTS, } from "./tokens" @@ -43,7 +44,7 @@ export const textMixin = compose(typography, color, textColor, space) /** TextProps */ export type TextProps = BaseTextProps & RNTextProps -const InnerText = primitives.Text` +const InnerText = styled.Text` ${systemVariant({ variants: TEXT_VARIANTS })} ${textMixin} ` @@ -74,7 +75,7 @@ export const Text: React.FC = ({ children, variant, fontSize, letterS ...(variant && fontSize && typeof fontSize === "number" && !lineHeight ? // Possibly convert the lineHeight { - lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight], + lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight as TextLineHeight], } : {}), ...rest, diff --git a/src/palette/elements/Text/__tests__/Text.test.tsx b/src/palette/elements/Text/__tests__/Text.test.tsx index a11a2fd329f..97714ad66e6 100644 --- a/src/palette/elements/Text/__tests__/Text.test.tsx +++ b/src/palette/elements/Text/__tests__/Text.test.tsx @@ -1,4 +1,3 @@ -import "jest-styled-components" import React from "react" import renderer from "react-test-renderer" import { Theme } from "../../../Theme" @@ -8,9 +7,11 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the variant", () => { const tree = renderer .create( - - hello world - + + + hello world + + ) .toJSON() @@ -22,11 +23,13 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the font-size directly", () => { const tree = renderer .create( - - - hello world - - + + + + hello world + + + ) .toJSON() diff --git a/src/palette/elements/Text/tokens.ts b/src/palette/elements/Text/tokens.ts index 29dd7e1256a..852683af80e 100644 --- a/src/palette/elements/Text/tokens.ts +++ b/src/palette/elements/Text/tokens.ts @@ -2,24 +2,28 @@ import { TEXT_FONT_SIZES, TEXT_LETTER_SPACING, TEXT_LINE_HEIGHTS, - TEXT_TREATMENTS, + TEXT_VARIANT_NAMES as TEXT_TREATMENTS, TEXT_VARIANTS as WEB_TEXT_VARIANTS, - TextFontSize, - TextLetterSpacing, - TextLineHeight, TextTreatment as WebTextTreatment, -} from "@artsy/palette-tokens/dist/text" +} from "@artsy/palette-tokens/dist/typography/v2" import { ResponsiveValue, Theme, TLengthStyledSystem } from "styled-system" -export { TextFontSize } from "@artsy/palette-tokens/dist/text" +// get rid of these three +export type TextFontSize = keyof typeof TEXT_FONT_SIZES +type TextLetterSpacing = keyof typeof TEXT_LETTER_SPACING +export type TextLineHeight = keyof typeof TEXT_LINE_HEIGHTS /** * font-families */ -export const TEXT_FONTS = { +export const TEXT_FONTS_V2 = { sans: "Unica77LL-Regular", serif: "ReactNativeAGaramondPro-Regular", } +export const TEXT_FONTS_V3 = { + sans: "Unica77LL-Regular", +} +export const TEXT_FONTS = TEXT_FONTS_V2 /** * em-units don't exist on React Native so we convert it to a number @@ -75,14 +79,14 @@ export const TEXT_VARIANTS = (Object.keys(TREATMENTS) as Array */ -export const Touchable: React.FC = ({ - children, - flex, - haptic, - noFeedback, - useDefaultTouchable, - onPress, - ...props -}) => { +export const Touchable: React.FC = ({ children, flex, haptic, noFeedback, onPress, ...props }) => { + const color = useColor() const inner = React.Children.count(children) === 1 ? children : {children} const onPressWrapped = (evt: GestureResponderEvent) => { @@ -50,27 +40,13 @@ export const Touchable: React.FC = ({ onPress(evt) } - if (noFeedback) { - const NoFeedbackButton = Platform.select({ - ios: useDefaultTouchable ? RNTouchableWithoutFeedback : TouchableWithoutFeedback, - default: RNTouchableWithoutFeedback, - }) - - return ( - - {inner} - - ) - } - - const HighlightButton = Platform.select({ - ios: useDefaultTouchable ? RNTouchableHighlight : TouchableHighlight, - default: RNTouchableHighlight, - }) - - return ( - + return noFeedback ? ( + + {inner} + + ) : ( + {inner} - + ) } diff --git a/src/palette/elements/Touchable/TouchableHighlightColor.tsx b/src/palette/elements/Touchable/TouchableHighlightColor.tsx index 41e13c50adb..afd186318f2 100644 --- a/src/palette/elements/Touchable/TouchableHighlightColor.tsx +++ b/src/palette/elements/Touchable/TouchableHighlightColor.tsx @@ -1,5 +1,6 @@ -import { Color, Touchable, TouchableProps } from "palette" +import { Color } from "palette/Theme" import React, { useState } from "react" +import { Touchable, TouchableProps } from "./Touchable" interface TouchableHighlightState { color: Color @@ -9,7 +10,7 @@ interface TouchableHighlightState { interface TouchableHighlightColorProps extends TouchableProps { activeColor?: Color normalColor?: Color - render: (state: TouchableHighlightState) => React.ReactNode; + render: (state: TouchableHighlightState) => React.ReactNode } export const TouchableHighlightColor: React.FC = (props) => { diff --git a/src/palette/elements/Typography/Typography.tsx b/src/palette/elements/Typography/Typography.tsx index ff94245dd5f..3f4b1854a63 100644 --- a/src/palette/elements/Typography/Typography.tsx +++ b/src/palette/elements/Typography/Typography.tsx @@ -1,5 +1,5 @@ import React from "react" -import { styled as primitives, styledWrapper } from "../../platform/primitives" +import styled from "styled-components/native" import { SansSize, SerifSize, themeProps, TypeSizes } from "../../Theme" @@ -41,7 +41,7 @@ interface FullTextProps VerticalAlignProps {} /** Base Text component for typography */ -export const BaseText = primitives.Text` +export const BaseText = styled.Text` ${fontSize}; ${lineHeight}; ${color}; @@ -87,24 +87,22 @@ interface StyledTextProps extends Partial { * An optional function that maps weight+italic to a font-family. */ function createStyledText

(fontType: keyof FontFamily) { - return styledWrapper>( - ({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { - const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] - if (fontFamilyString === null) { - throw new Error( - `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` - ) - } - - const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] - - if (fontMetrics == null) { - throw new Error(`"${size}" is not a valid size for ${fontType}`) - } - - return + return styled>(({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { + const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] + if (fontFamilyString === null) { + throw new Error( + `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` + ) } - )`` + + const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] + + if (fontMetrics == null) { + throw new Error(`"${size}" is not a valid size for ${fontType}`) + } + + return + })`` } function stripPx(fontMetrics: { fontSize: string; lineHeight: string }): { fontSize: number; lineHeight: number } { diff --git a/src/palette/helpers/__tests__/color.test.ts b/src/palette/helpers/__tests__/color.test.ts deleted file mode 100644 index ee498248dca..00000000000 --- a/src/palette/helpers/__tests__/color.test.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { color } from "../color" - -describe("color", () => { - it("returns the correct color", () => { - expect(color("black10")).toEqual("#E5E5E5") - expect(color("black30")).toEqual("#C2C2C2") - }) -}) diff --git a/src/palette/helpers/__tests__/color.tests.tsx b/src/palette/helpers/__tests__/color.tests.tsx new file mode 100644 index 00000000000..f2029bfbc08 --- /dev/null +++ b/src/palette/helpers/__tests__/color.tests.tsx @@ -0,0 +1,102 @@ +import { GlobalStoreProvider } from "lib/store/GlobalStore" +import { renderWithWrappers } from "lib/tests/renderWithWrappers" +import React from "react" +import { View } from "react-native" +import { useColor } from "../../hooks" +import { Color, Theme } from "../../Theme" + +describe("color", () => { + const ColorView = ({ name }: { name: Color }) => { + const color = useColor() + return + } + + it("returns the correct color with a Theme provider", () => { + const TestComponent = () => ( + + + + + + ) + + const tree = renderWithWrappers().root + expect(tree.findByType(View).props.style.backgroundColor).toBe("#E5E5E5") + }) + + it("returns the correct color with a Theme provider in v2", () => { + const TestComponent = () => ( + + + <> + + + + + + ) + const tree = renderWithWrappers().root + const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) + expect(bgColors[0]).toBe("#FAE7BA") + expect(bgColors[1]).toBe("#A85F00") + }) + + it("returns the correct color with a Theme provider in v3", () => { + const TestComponent = () => ( + + + <> + + + + + + ) + const tree = renderWithWrappers().root + const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) + expect(bgColors[0]).toBe(undefined) + expect(bgColors[1]).toBe("#7B5927") + }) + + it("returns the correct color with a Theme provider with override", () => { + const TestComponent = () => ( + + + <> + + + + + + ) + const tree = renderWithWrappers().root + const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) + expect(bgColors[0]).toBe("red") + expect(bgColors[1]).toBe("blue") + }) + + it("returns the correct color with nested Theme providers", () => { + const TestComponent = () => ( + + + <> + + + + <> + + + + + + + + ) + const tree = renderWithWrappers().root + const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) + expect(bgColors[0]).toBe("red") + expect(bgColors[1]).toBe("blue") + expect(bgColors[2]).toBe("green") + expect(bgColors[3]).toBe("purple") + }) +}) diff --git a/src/palette/helpers/__tests__/space.test.ts b/src/palette/helpers/__tests__/space.test.ts deleted file mode 100644 index 198b6c4b91f..00000000000 --- a/src/palette/helpers/__tests__/space.test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { space } from "../space" - -describe("space", () => { - it("returns the correct space", () => { - expect(space(1)).toEqual(10) - expect(space(2)).toEqual(20) - expect(space(3)).toEqual(30) - }) -}) diff --git a/src/palette/helpers/__tests__/space.tests.tsx b/src/palette/helpers/__tests__/space.tests.tsx new file mode 100644 index 00000000000..ab17e267ac9 --- /dev/null +++ b/src/palette/helpers/__tests__/space.tests.tsx @@ -0,0 +1,76 @@ +import { GlobalStoreProvider } from "lib/store/GlobalStore" +import { renderWithWrappers } from "lib/tests/renderWithWrappers" +import React from "react" +import { View } from "react-native" +import { useSpace } from "../../hooks" +import { SpacingUnit, Theme } from "../../Theme" + +describe("space", () => { + const SpaceView = ({ name }: { name: SpacingUnit }) => { + const space = useSpace() + return + } + + it("returns the correct space with a Theme provider", () => { + const TestComponent = () => ( + + + + + + ) + + const tree = renderWithWrappers().root + expect(tree.findByType(View).props.style.marginLeft).toBe(10) + }) + + it("returns the correct space with a Theme provider in v2", () => { + const TestComponent = () => ( + + + <> + + + + + + ) + const tree = renderWithWrappers().root + const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) + expect(margins[0]).toBe(3) + expect(margins[1]).toBe(60) + }) + + it("returns the correct space with a Theme provider in v3", () => { + const TestComponent = () => ( + + + <> + {/* @ts-ignore */} + + + + + + ) + const tree = renderWithWrappers().root + const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) + expect(margins[0]).toBe(undefined) + expect(margins[1]).toBe(20) + }) + + it("returns the correct space with a Theme provider with override", () => { + const TestComponent = () => ( + + + <> + + + + + ) + const tree = renderWithWrappers().root + const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) + expect(margins[0]).toBe(12) + }) +}) diff --git a/src/palette/helpers/styled.tsx b/src/palette/helpers/styled.tsx new file mode 100644 index 00000000000..b158495f232 --- /dev/null +++ b/src/palette/helpers/styled.tsx @@ -0,0 +1,6 @@ +import React from "react" +import { StyleProp, ViewStyle } from "react-native" + +export const artsyStyled =

}>(Component: React.ComponentType

) => ( + styleProps: StyleProp +) => (props: P) => diff --git a/src/palette/hooks.ts b/src/palette/hooks.ts new file mode 100644 index 00000000000..80677b33205 --- /dev/null +++ b/src/palette/hooks.ts @@ -0,0 +1,12 @@ +import { usePaletteFlagStore } from "./PaletteFlag" +import { useTheme } from "./Theme" + +export const useColor = () => useTheme().color +export const useSpace = () => useTheme().space + +/** Returns a config specific to the current theme. */ +export const useThemeConfig = ({ v2, v3 }: { v2: T; v3: U }): U | T => { + const { theme = { id: "v2" } } = useTheme() + const allowV3 = usePaletteFlagStore((state) => state.allowV3) + return theme.id === "v2" ? v2 : allowV3 ? v3 : v2 +} diff --git a/src/palette/index.tsx b/src/palette/index.tsx index ed29f9aab9c..60f3ba0329c 100644 --- a/src/palette/index.tsx +++ b/src/palette/index.tsx @@ -2,6 +2,8 @@ export * from "./elements" export * from "./helpers" export * from "./svgs" export * from "./Theme" +export * from "./hooks" +export * from "./ClassTheme" // Helpers import * as _AllIcons from "./svgs" diff --git a/src/palette/platform/primitives.ts b/src/palette/platform/primitives.ts deleted file mode 100644 index 18e41f3ee20..00000000000 --- a/src/palette/platform/primitives.ts +++ /dev/null @@ -1,12 +0,0 @@ -/* tslint:disable:completed-docs */ - -import styles, { ThemeProvider as NativeThemeProvider } from "styled-components/native" - -export const styled = { - Image: styles.Image, - Text: styles.Text, - View: styles.View, -} - -export const ThemeProvider = NativeThemeProvider -export const styledWrapper = styles as typeof styles diff --git a/src/palette/svgs/AddCircleFillIcon.tsx b/src/palette/svgs/AddCircleFillIcon.tsx index e331897f780..c907492ab4a 100644 --- a/src/palette/svgs/AddCircleFillIcon.tsx +++ b/src/palette/svgs/AddCircleFillIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** AddCircleFillIcon */ export const AddCircleFillIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/AlertCircleFillIcon.tsx b/src/palette/svgs/AlertCircleFillIcon.tsx index 00698ab3908..0fbc34e9970 100644 --- a/src/palette/svgs/AlertCircleFillIcon.tsx +++ b/src/palette/svgs/AlertCircleFillIcon.tsx @@ -1,9 +1,9 @@ -import { color } from "palette" +import { useColor } from "palette/hooks" import React from "react" import { Icon, IconProps, Path } from "./Icon" -/** AlertCircleFillIcon */ export const AlertCircleFillIcon: React.FC = ({ title = "AlertCircleFillIcon", ...props }) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( ( - - - -) - -/** ArrowUpCircleFillIcon */ -export const ArrowUpCircleFillIcon: React.FC = (props) => { - return -} -/** ArrowDownCircleFillIcon */ -export const ArrowDownCircleFillIcon: React.FC = (props) => { - return +const FilledArrowCircle = ({ rotate, ...props }: IconProps & { rotate?: string }) => { + const color = useColor() + return ( + + + + ) } + +export const ArrowUpCircleFillIcon: React.FC = (props) => + +export const ArrowDownCircleFillIcon: React.FC = (props) => diff --git a/src/palette/svgs/ArrowDownCircleIcon.tsx b/src/palette/svgs/ArrowDownCircleIcon.tsx index 07560846978..dc8182f667c 100644 --- a/src/palette/svgs/ArrowDownCircleIcon.tsx +++ b/src/palette/svgs/ArrowDownCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowDownCircleIcon */ export const ArrowDownCircleIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArrowLeftCircleIcon.tsx b/src/palette/svgs/ArrowLeftCircleIcon.tsx index d5f265e3d8b..aa35775b6c3 100644 --- a/src/palette/svgs/ArrowLeftCircleIcon.tsx +++ b/src/palette/svgs/ArrowLeftCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowLeftCircleIcon */ export const ArrowLeftCircleIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArrowRightCircleIcon.tsx b/src/palette/svgs/ArrowRightCircleIcon.tsx index 148e6a63f69..bd77b71390d 100644 --- a/src/palette/svgs/ArrowRightCircleIcon.tsx +++ b/src/palette/svgs/ArrowRightCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowRightCircleIcon */ export const ArrowRightCircleIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArrowUpCircleIcon.tsx b/src/palette/svgs/ArrowUpCircleIcon.tsx index d13ce5f3b6d..9de83cf8969 100644 --- a/src/palette/svgs/ArrowUpCircleIcon.tsx +++ b/src/palette/svgs/ArrowUpCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowUpCircleIcon */ export const ArrowUpCircleIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoBlackIcon.tsx b/src/palette/svgs/ArtsyLogoBlackIcon.tsx index e4baa13fba8..4427d6f32d6 100644 --- a/src/palette/svgs/ArtsyLogoBlackIcon.tsx +++ b/src/palette/svgs/ArtsyLogoBlackIcon.tsx @@ -1,13 +1,13 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" interface ArtsyLogoBlackIconProps extends Omit { scale?: number } -/** ArtsyLogoBlackIcon */ export const ArtsyLogoBlackIcon: React.FC = ({ scale = 1, title = "Artsy", ...props }) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx index 60d72c65460..d11a4047147 100644 --- a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx @@ -1,7 +1,6 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" -/** ArtsyLogoWhiteIcon */ export const ArtsyLogoWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtsyMarkBlackIcon.tsx b/src/palette/svgs/ArtsyMarkBlackIcon.tsx index d17da9c7ae2..7d8e8af7fbc 100644 --- a/src/palette/svgs/ArtsyMarkBlackIcon.tsx +++ b/src/palette/svgs/ArtsyMarkBlackIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** ArtsyMarkBlackIcon */ export const ArtsyMarkBlackIcon: React.FC = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx index 9cddb933fc2..4ed51bfc338 100644 --- a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx @@ -1,7 +1,6 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" -/** ArtsyMarkWhiteIcon */ export const ArtsyMarkWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtworkIcon.tsx b/src/palette/svgs/ArtworkIcon.tsx index 42faff054e3..c6d54a160fe 100644 --- a/src/palette/svgs/ArtworkIcon.tsx +++ b/src/palette/svgs/ArtworkIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArtworkIcon */ export const ArtworkIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/DocumentIcon.tsx b/src/palette/svgs/DocumentIcon.tsx index f68a4049746..3c6cd9b6680 100644 --- a/src/palette/svgs/DocumentIcon.tsx +++ b/src/palette/svgs/DocumentIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** DocumentIcon */ export const DocumentIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/EnterIcon.tsx b/src/palette/svgs/EnterIcon.tsx index acfd13b5de6..2e933b5cf5e 100644 --- a/src/palette/svgs/EnterIcon.tsx +++ b/src/palette/svgs/EnterIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EnterIcon */ export const EnterIcon: React.FC = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/EnvelopeIcon.tsx b/src/palette/svgs/EnvelopeIcon.tsx index 53fd8b24f38..83983ec88f1 100644 --- a/src/palette/svgs/EnvelopeIcon.tsx +++ b/src/palette/svgs/EnvelopeIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** EnvelopeIcon */ export const EnvelopeIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/EyeOpenedIcon.tsx b/src/palette/svgs/EyeOpenedIcon.tsx index bae70a5fd3c..8abc6f68475 100644 --- a/src/palette/svgs/EyeOpenedIcon.tsx +++ b/src/palette/svgs/EyeOpenedIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EyeOpenedIcon */ export const EyeOpenedIcon: React.FC = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/FacebookIcon.tsx b/src/palette/svgs/FacebookIcon.tsx index 878de5b6bc3..3357ec9fd5a 100644 --- a/src/palette/svgs/FacebookIcon.tsx +++ b/src/palette/svgs/FacebookIcon.tsx @@ -1,9 +1,9 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" -/** FacebookIcon */ export const FacebookIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/LoaderIcon.tsx b/src/palette/svgs/LoaderIcon.tsx index 08f4f97e812..9fe2a2bc544 100644 --- a/src/palette/svgs/LoaderIcon.tsx +++ b/src/palette/svgs/LoaderIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** LoaderIcon */ export const LoaderIcon: React.FC = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/LockIcon.tsx b/src/palette/svgs/LockIcon.tsx index 7db7a685564..e8b70499391 100644 --- a/src/palette/svgs/LockIcon.tsx +++ b/src/palette/svgs/LockIcon.tsx @@ -1,9 +1,9 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" -/** LockIcon */ export const LockIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( @@ -16,7 +16,3 @@ export const LogoutIcon: React.FC = (props) => { ) } - -// TODO: remove this alias once clients have been updated -/** PowerIcon */ -export const PowerIcon = LogoutIcon diff --git a/src/palette/svgs/MagnifyingGlassIcon.tsx b/src/palette/svgs/MagnifyingGlassIcon.tsx index 295af4068d5..9c0ee605f9b 100644 --- a/src/palette/svgs/MagnifyingGlassIcon.tsx +++ b/src/palette/svgs/MagnifyingGlassIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** MagnifyingGlassIcon */ export const MagnifyingGlassIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/MessageIcon.tsx b/src/palette/svgs/MessageIcon.tsx index 9d82a9a9664..7e355cfd1c5 100644 --- a/src/palette/svgs/MessageIcon.tsx +++ b/src/palette/svgs/MessageIcon.tsx @@ -1,10 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" import { Path } from "react-native-svg" -import { color } from "../Theme" import { Icon, IconProps } from "./Icon" -/** MessageIcon */ export const MessageIcon: React.FC = (props) => { + const color = useColor() return ( = ({ ...props }) => { +export const MoneyFillIcon: React.FC = ({ ...props }) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { ) } - -// TODO: remove this alias once clients have been updated -/** BookIcon */ -export const BookIcon = PublicationIcon diff --git a/src/palette/svgs/QuestionCircleIcon.tsx b/src/palette/svgs/QuestionCircleIcon.tsx index 816d4f52a06..9f419df65c4 100644 --- a/src/palette/svgs/QuestionCircleIcon.tsx +++ b/src/palette/svgs/QuestionCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** QuestionCircleIcon */ export const QuestionCircleIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/TrashIcon.tsx b/src/palette/svgs/TrashIcon.tsx index 7d75a34b8a5..f0bfbc0d2e6 100644 --- a/src/palette/svgs/TrashIcon.tsx +++ b/src/palette/svgs/TrashIcon.tsx @@ -1,9 +1,9 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" -/** TrashIcon */ export const TrashIcon: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => ( diff --git a/src/palette/svgs/XCircleIcon.tsx b/src/palette/svgs/XCircleIcon.tsx index 1dce64c12dd..d4e2c368103 100644 --- a/src/palette/svgs/XCircleIcon.tsx +++ b/src/palette/svgs/XCircleIcon.tsx @@ -1,9 +1,10 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../Theme" import { Circle, Icon, IconProps, Path } from "./Icon" /** XCircleIcon */ export const XCircleIcon: React.FC = (props) => { + const color = useColor() return ( diff --git a/src/palette/svgs/sf/BoltCircleFill.tsx b/src/palette/svgs/sf/BoltCircleFill.tsx index 2f2fa767cf1..8d5ce03ac6c 100644 --- a/src/palette/svgs/sf/BoltCircleFill.tsx +++ b/src/palette/svgs/sf/BoltCircleFill.tsx @@ -1,10 +1,11 @@ +import { useColor } from "palette/hooks" import React from "react" import { EMaskUnits } from "react-native-svg" -import { color } from "../../Theme" import { Icon, IconProps, Mask, Path, Rect } from "../Icon" /** BoltCircleFill */ export const BoltCircleFill: React.FC = (props) => { + const color = useColor() console.warn(EMaskUnits) return ( diff --git a/src/palette/svgs/sf/BoltFill.tsx b/src/palette/svgs/sf/BoltFill.tsx index d1cfb1e8e69..db5388971f6 100644 --- a/src/palette/svgs/sf/BoltFill.tsx +++ b/src/palette/svgs/sf/BoltFill.tsx @@ -1,9 +1,9 @@ +import { useColor } from "palette/hooks" import React from "react" -import { color } from "../../Theme" import { Icon, IconProps, Path } from "../Icon" -/** BoltFill */ export const BoltFill: React.FC = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( = (props) => { + const color = useColor() return ( ({ })) jest.mock("./lib/NativeModules/Events.tsx", () => ({ - postEvent: jest.fn(), userHadMeaningfulInteraction: jest.fn(), - NativeAnalyticsProvider: { - postEvent: jest.fn(), - }, })) jest.mock("react-native-share", () => ({ @@ -273,7 +269,6 @@ function getNativeModules(): OurNativeModules { presentModal: jest.fn(), }, AREventsModule: { - postEvent: jest.fn(), requestAppStoreRating: jest.fn(), }, ArtsyNativeModule: { @@ -519,7 +514,28 @@ jest.mock("react-native-config", () => ({ })) jest.mock("react-native-view-shot", () => ({})) -jest.mock("@segment/analytics-react-native", () => ({})) + +// MOCKS FOR TRACKING +jest.mock("@segment/analytics-react-native", () => ({ + setup: () => null, + identify: () => null, + reset: () => null, +})) + +jest.mock("@segment/analytics-react-native-appboy", () => ({})) + +jest.mock("lib/utils/track/SegmentTrackingProvider", () => ({ + SegmentTrackingProvider: { + setup: () => null, + identify: () => null, + postEvent: () => null, + }, +})) + +jest.mock("lib/utils/track/providers.tsx", () => ({ + postEventToProviders: jest.fn(), + _addTrackingProvider: jest.fn(), +})) jest.mock("react-native-push-notification", () => ({ configure: jest.fn(), diff --git a/src/storybook/addons.js b/src/storybook/addons.js new file mode 100644 index 00000000000..38233e7be5f --- /dev/null +++ b/src/storybook/addons.js @@ -0,0 +1 @@ +import "@storybook/addon-actions/register" diff --git a/src/storybook/helpers.tsx b/src/storybook/helpers.tsx new file mode 100644 index 00000000000..09a45d9af6a --- /dev/null +++ b/src/storybook/helpers.tsx @@ -0,0 +1,46 @@ +import { Spacer } from "palette" +import React from "react" +import { FlatList, ScrollView } from "react-native" + +export const DList = ({ + data, + keyExtractor, + renderItem, +}: { + data: ItemT[] + keyExtractor?: (item: ItemT, index: number) => string + renderItem: (info: { item: ItemT; index: number }) => React.ReactElement | null +}) => ( + `${item}`)} + renderItem={renderItem} + ItemSeparatorComponent={() => } + contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} + /> +) + +export const List = ({ children }: { children: React.ReactElement[] }) => ( + `${index}`} + renderItem={({ item: child }) => child} + ItemSeparatorComponent={() => } + contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} + /> +) + +export const CenterView = ({ children }: { children: React.ReactNode }) => { + return ( + + {children} + + ) +} diff --git a/src/storybook/index.js b/src/storybook/index.js new file mode 100644 index 00000000000..dd0383b01ce --- /dev/null +++ b/src/storybook/index.js @@ -0,0 +1,5 @@ +import { AppRegistry } from "react-native" + +import StorybookUIRoot from "./storybook-ui" + +AppRegistry.registerComponent("Artsy", () => StorybookUIRoot) diff --git a/src/storybook/package.json b/src/storybook/package.json new file mode 100644 index 00000000000..38803d2c8a1 --- /dev/null +++ b/src/storybook/package.json @@ -0,0 +1,3 @@ +{ + "name": "storybook" +} diff --git a/src/storybook/rn-addons.js b/src/storybook/rn-addons.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/storybook/storyLoader.js b/src/storybook/storyLoader.js new file mode 100644 index 00000000000..15ea6f5ed2b --- /dev/null +++ b/src/storybook/storyLoader.js @@ -0,0 +1,15 @@ +// Auto-generated file created by react-native-storybook-loader +// Do not edit. +// +// https://github.com/elderfo/react-native-storybook-loader.git + +function loadStories() { + require("../palette/elements/Button/Button.stories") +} + +const stories = ["../palette/elements/Button/Button.stories"] + +module.exports = { + loadStories, + stories, +} diff --git a/src/storybook/storybook-ui.js b/src/storybook/storybook-ui.js new file mode 100644 index 00000000000..b552b47f82d --- /dev/null +++ b/src/storybook/storybook-ui.js @@ -0,0 +1,17 @@ +import { addDecorator, configure, getStorybookUI } from "@storybook/react-native" +import "./rn-addons" +import { loadStories } from "./storyLoader" + +// import stories +configure(() => { + loadStories() +}, module) + +// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters +// To find allowed options for getStorybookUI +const StorybookUIRoot = getStorybookUI({ + onDeviceUI: false, + asyncStorage: null, +}) + +export default StorybookUIRoot diff --git a/tsconfig.json b/tsconfig.json index 97fe90f321f..8084851eee4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,14 +5,20 @@ "baseUrl": "src", "experimentalDecorators": true, "incremental": true, - "lib": ["es2015"], + "lib": [ + "es2015" + ], "jsx": "react", "module": "commonjs", "moduleResolution": "node", "noUnusedLocals": true, "noUnusedParameters": true, "outDir": "build", - "plugins": [{ "name": "typescript-styled-plugin" }], + "plugins": [ + { + "name": "typescript-styled-plugin" + } + ], "pretty": true, "resolveJsonModule": true, "strict": true, @@ -21,7 +27,11 @@ "noFallthroughCasesInSwitch": true, "strictFunctionTypes": true, "target": "es6", - "types": ["jest", "react", "react-native"], + "types": [ + "jest", + "react", + "react-native" + ], "noEmit": true }, "include": [ diff --git a/typings/storybook.d.ts b/typings/storybook.d.ts new file mode 100644 index 00000000000..eb0368c7193 --- /dev/null +++ b/typings/storybook.d.ts @@ -0,0 +1,7 @@ +declare module "storybook-router" { + global { + interface Window { + location: any + } + } +} diff --git a/typings/styled-components.native.d.ts b/typings/styled-components.native.d.ts index f73f24c063d..9bb2ab6616e 100644 --- a/typings/styled-components.native.d.ts +++ b/typings/styled-components.native.d.ts @@ -1,12 +1,14 @@ declare module "styled-components/native" { - import * as ReactNative from "react-native" import * as React from "react" + import * as ReactNative from "react-native" export { css, DefaultTheme, isStyledComponent, ThemeConsumer, + // @ts-ignore + ThemeContext, ThemeProps, ThemeProvider, withTheme, @@ -17,6 +19,7 @@ declare module "styled-components/native" { isStyledComponent, ThemedCssFunction, ThemedStyledFunction, + ThemedStyledInterface, ThemeProviderComponent, WithThemeFnInterface, } from "styled-components" @@ -29,13 +32,11 @@ declare module "styled-components/native" { > = ThemedStyledFunction, T> // Copied over from "ThemedBaseStyledInterface" in index.d.ts in order to remove DOM element typings - interface ReactNativeThemedBaseStyledInterface { - >( - // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` - // causes tests to fail in TS 3.1 - component: C - ): ThemedStyledFunction, T> - } + type ReactNativeThemedBaseStyledInterface = >( + // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` + // causes tests to fail in TS 3.1 + component: C + ) => ThemedStyledFunction, T> type ReactNativeThemedStyledInterface = ReactNativeThemedBaseStyledInterface> @@ -87,6 +88,11 @@ declare module "styled-components/native" { css: ThemedCssFunction + withTheme: WithThemeFnInterface + ThemeProvider: ThemeProviderComponent + ThemeConsumer: React.Consumer + ThemeContext: React.Context + // This could be made to assert `target is StyledComponent` instead, but that feels not type safe isStyledComponent: typeof isStyledComponent } diff --git a/yarn.lock b/yarn.lock index ce6b301fbe7..59ed4f393ce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,27 +2,22 @@ # yarn lockfile v1 -"@artsy/auto-config@1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@artsy/auto-config/-/auto-config-1.0.2.tgz#b79f6fd0d0bda0c5e0764ced55e014cf58174d6f" - integrity sha512-mJyuKNDMYZcgc2oLIkvmpVIr1RexklV71JmU+to5qs3Y9pv5dsj4WHl8+wf9g74EQNOyhWH2SYMGBm1JoPYh/Q== - -"@artsy/cohesion@2.7.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.7.0.tgz#974d34831d8a66c834a83a2975f7c03e6203b9f4" - integrity sha512-i1t0vUYhHqYgw2IamNKhfqSHfmOIZmXRXnnxXaQBk+B7ZTUBeDhBduxfHfgA2W29sIVEr5N1ne2/vmpgrPGoog== +"@artsy/cohesion@2.13.0": + version "2.13.0" + resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.13.0.tgz#418ee07bdba21451445668f9f71c617e7009f60f" + integrity sha512-TyoDJW6ctpN/ZsV9d7tD9YoPr3B7xVnoAyL6ag0xFxH1TZHK6nNIxpUneUx812K6jyWLZkwOnNUfjETEu/45tA== dependencies: core-js "3" -"@artsy/palette-tokens@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-1.3.1.tgz#8e1f4652f9ae53bf5567630e036b650355ec9c95" - integrity sha512-aKkIKkYkK2+AEUhoIuiXJFaac7QkAbkfA5NKWDBP3H0yj/7ZZ8p8+qWL+aa6w9kuMLZuQGuy2JkvS3W/G1MWjw== +"@artsy/palette-tokens@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-2.1.2.tgz#0225ad2646009a0a3fde0a014dd7d3477c561bf1" + integrity sha512-6/wb2305/pqCpEKLABUG0m3dxLpPG8xp4Gp1YTuVU7HwdZ8zvS6HC2d2sZEeVIgLGjFedQzSj2TQe3R2XqRstg== -"@artsy/update-repo@0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.0.tgz#c978d475fa4e2e1be0cc40fe57a7581f0d8f690b" - integrity sha512-S7pM46T6/pAaHVD5R5nCc4UXIQQo3kG4KQk2B75RYbOb8LMk7dyFKwsm36R3nriv7Xhb4E2jEN6J/srpataLFQ== +"@artsy/update-repo@0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.1.tgz#7b82e393c7eee59f60deaf7fc6f77661e36dbd04" + integrity sha512-sco76cOeJbp/Opv9NsZi2Ra9FcDX6PFjms5gqdlokgBA3ig/lIiBXVEB26alMMuckrVYjYtL1Y86EktofH5pfg== dependencies: "@octokit/rest" "^17.2.0" kleur "^3.0.3" @@ -84,6 +79,13 @@ deepmerge "^4.0.0" tslib "1.10.0" +"@babel/code-frame@7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -98,6 +100,13 @@ dependencies: "@babel/highlight" "^7.10.4" +"@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -105,6 +114,11 @@ dependencies: "@babel/highlight" "^7.8.3" +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== + "@babel/core@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" @@ -145,25 +159,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.2": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helpers" "^7.1.5" - "@babel/parser" "^7.1.6" - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.6" - "@babel/types" "^7.1.6" - convert-source-map "^1.1.0" - debug "^4.1.0" - json5 "^2.1.0" - lodash "^4.17.10" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -230,16 +225,6 @@ source-map "^0.5.0" trim-right "^1.0.1" -"@babel/generator@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" - dependencies: - "@babel/types" "^7.1.6" - jsesc "^2.5.1" - lodash "^4.17.10" - source-map "^0.5.0" - trim-right "^1.0.1" - "@babel/generator@^7.11.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" @@ -258,6 +243,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" + integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== + dependencies: + "@babel/types" "^7.14.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/generator@^7.5.0": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" @@ -285,6 +279,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-annotate-as-pure@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" + integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" @@ -293,6 +294,14 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" + integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-builder-react-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" @@ -310,6 +319,16 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -333,6 +352,18 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" + integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-create-class-features-plugin@^7.8.3": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" @@ -345,6 +376,14 @@ "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -354,6 +393,20 @@ "@babel/types" "^7.0.0" lodash "^4.17.10" +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" @@ -362,6 +415,13 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-explode-assignable-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" + integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -380,6 +440,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -403,6 +472,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -417,6 +493,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" @@ -438,6 +521,13 @@ dependencies: "@babel/types" "^7.12.7" +"@babel/helper-member-expression-to-functions@^7.14.5": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -466,6 +556,13 @@ dependencies: "@babel/types" "^7.12.5" +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -500,6 +597,20 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" + integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -527,6 +638,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -544,6 +662,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" @@ -567,6 +690,15 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-remap-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" + integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-wrap-function" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-replace-supers@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" @@ -597,6 +729,16 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-replace-supers@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" @@ -622,6 +764,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" + integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -630,6 +779,13 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" + integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" @@ -644,6 +800,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -656,6 +819,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" + integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" @@ -666,6 +834,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + "@babel/helper-wrap-function@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" @@ -676,6 +849,16 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-wrap-function@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" + integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helpers@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" @@ -685,14 +868,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.1.2" -"@babel/helpers@^7.1.5": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.5.tgz#68bfc1895d685f2b8f1995e788dbfe1f6ccb1996" - dependencies: - "@babel/template" "^7.1.2" - "@babel/traverse" "^7.1.5" - "@babel/types" "^7.1.5" - "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" @@ -738,6 +913,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -752,10 +936,6 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== -"@babel/parser@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" - "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" @@ -766,11 +946,25 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== +"@babel/parser@^7.14.5", "@babel/parser@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" + integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== + "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" + integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-external-helpers@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0.tgz#61ee7ba5dba27d7cad72a13d46bec23c060b762e" @@ -778,6 +972,15 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-proposal-async-generator-functions@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" + integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-proposal-class-properties@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" @@ -798,6 +1001,23 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" +"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.7.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" + integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-proposal-decorators@7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" @@ -807,6 +1027,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-decorators" "^7.10.4" +"@babel/plugin-proposal-dynamic-import@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" + integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz#a057bbfd4649facfe39f33a537e18554bdd2b5da" @@ -815,6 +1043,30 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-export-default-from" "^7.0.0" +"@babel/plugin-proposal-export-namespace-from@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" + integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" + integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" + integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz#b72ec31adf612d062dc0348316246127a451e45f" @@ -823,6 +1075,22 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" + integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" + integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" @@ -831,6 +1099,17 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" +"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" @@ -839,6 +1118,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" +"@babel/plugin-proposal-optional-catch-binding@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" + integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-proposal-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz#3d344d4152253379b8758e7d041148e8787c4a9d" @@ -847,6 +1134,48 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" +"@babel/plugin-proposal-optional-chaining@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" + integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" + integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-proposal-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" + integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" + integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-bigint@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" @@ -861,6 +1190,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-decorators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" @@ -875,6 +1218,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz#084b639bce3d42f3c5bf3f68ccb42220bb2d729d" @@ -882,6 +1232,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-flow@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" @@ -903,6 +1260,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" @@ -917,6 +1281,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz#b60931d5a15da82625fff6657c39419969598743" @@ -924,6 +1295,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -931,6 +1316,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" @@ -938,6 +1330,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + "@babel/plugin-syntax-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz#1e6ecba124310b5d3a8fc1e00d50b1c4c2e05e68" @@ -945,6 +1344,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" @@ -966,6 +1386,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-arrow-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" + integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-async-to-generator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" @@ -975,6 +1402,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" +"@babel/plugin-transform-async-to-generator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" + integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-remap-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" @@ -982,6 +1418,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-block-scoped-functions@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" + integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-block-scoping@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" @@ -990,6 +1433,13 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" +"@babel/plugin-transform-block-scoping@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" + integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-classes@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" @@ -1004,6 +1454,19 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" + integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" @@ -1011,6 +1474,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-computed-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" + integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-destructuring@^7.0.0": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" @@ -1018,6 +1488,28 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-destructuring@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" + integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" + integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-duplicate-keys@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" + integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" @@ -1026,6 +1518,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-exponentiation-operator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" + integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-flow-strip-types@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" @@ -1049,6 +1549,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-for-of@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" + integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-function-name@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" @@ -1057,6 +1564,14 @@ "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" + integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== + dependencies: + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" @@ -1064,6 +1579,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" + integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-member-expression-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.0.0.tgz#96a265bf61a9ed6f75c39db0c30d41ef7aabf072" @@ -1071,6 +1593,22 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-member-expression-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" + integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-modules-amd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" + integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" @@ -1080,6 +1618,49 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" +"@babel/plugin-transform-modules-commonjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" + integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" + integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + dependencies: + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" + integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== + dependencies: + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" + integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + +"@babel/plugin-transform-new-target@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" + integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-object-assign@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0.tgz#fca6d7500d9675c42868b8f3882979201b9a5ad8" @@ -1095,6 +1676,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" +"@babel/plugin-transform-object-super@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" + integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/plugin-transform-parameters@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" @@ -1104,6 +1693,13 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-parameters@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" + integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-property-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.0.0.tgz#0b95a91dbd1f0be5b5a99ed86571ef5b5ae77009" @@ -1111,6 +1707,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-property-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" + integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-react-constant-elements@^7.2.0": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" + integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-react-display-name@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" @@ -1150,6 +1760,20 @@ dependencies: regenerator-transform "^0.13.3" +"@babel/plugin-transform-regenerator@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" + integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" + integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-runtime@7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" @@ -1177,6 +1801,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-shorthand-properties@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" + integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" @@ -1184,6 +1815,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-spread@^7.14.6": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" + integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" + "@babel/plugin-transform-sticky-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" @@ -1192,6 +1831,13 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" +"@babel/plugin-transform-sticky-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" + integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-template-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" @@ -1200,6 +1846,20 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-template-literals@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" + integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-typeof-symbol@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" + integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" @@ -1218,6 +1878,13 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" +"@babel/plugin-transform-unicode-escapes@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" + integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" @@ -1227,6 +1894,14 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" +"@babel/plugin-transform-unicode-regex@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" + integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/polyfill@^7.2.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" @@ -1235,6 +1910,96 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" +"@babel/preset-env@^7.4.5": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" + integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-async-generator-functions" "^7.14.7" + "@babel/plugin-proposal-class-properties" "^7.14.5" + "@babel/plugin-proposal-class-static-block" "^7.14.5" + "@babel/plugin-proposal-dynamic-import" "^7.14.5" + "@babel/plugin-proposal-export-namespace-from" "^7.14.5" + "@babel/plugin-proposal-json-strings" "^7.14.5" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" + "@babel/plugin-proposal-numeric-separator" "^7.14.5" + "@babel/plugin-proposal-object-rest-spread" "^7.14.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" + "@babel/plugin-proposal-optional-chaining" "^7.14.5" + "@babel/plugin-proposal-private-methods" "^7.14.5" + "@babel/plugin-proposal-private-property-in-object" "^7.14.5" + "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.14.5" + "@babel/plugin-transform-async-to-generator" "^7.14.5" + "@babel/plugin-transform-block-scoped-functions" "^7.14.5" + "@babel/plugin-transform-block-scoping" "^7.14.5" + "@babel/plugin-transform-classes" "^7.14.5" + "@babel/plugin-transform-computed-properties" "^7.14.5" + "@babel/plugin-transform-destructuring" "^7.14.7" + "@babel/plugin-transform-dotall-regex" "^7.14.5" + "@babel/plugin-transform-duplicate-keys" "^7.14.5" + "@babel/plugin-transform-exponentiation-operator" "^7.14.5" + "@babel/plugin-transform-for-of" "^7.14.5" + "@babel/plugin-transform-function-name" "^7.14.5" + "@babel/plugin-transform-literals" "^7.14.5" + "@babel/plugin-transform-member-expression-literals" "^7.14.5" + "@babel/plugin-transform-modules-amd" "^7.14.5" + "@babel/plugin-transform-modules-commonjs" "^7.14.5" + "@babel/plugin-transform-modules-systemjs" "^7.14.5" + "@babel/plugin-transform-modules-umd" "^7.14.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" + "@babel/plugin-transform-new-target" "^7.14.5" + "@babel/plugin-transform-object-super" "^7.14.5" + "@babel/plugin-transform-parameters" "^7.14.5" + "@babel/plugin-transform-property-literals" "^7.14.5" + "@babel/plugin-transform-regenerator" "^7.14.5" + "@babel/plugin-transform-reserved-words" "^7.14.5" + "@babel/plugin-transform-shorthand-properties" "^7.14.5" + "@babel/plugin-transform-spread" "^7.14.6" + "@babel/plugin-transform-sticky-regex" "^7.14.5" + "@babel/plugin-transform-template-literals" "^7.14.5" + "@babel/plugin-transform-typeof-symbol" "^7.14.5" + "@babel/plugin-transform-unicode-escapes" "^7.14.5" + "@babel/plugin-transform-unicode-regex" "^7.14.5" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.5" + babel-plugin-polyfill-corejs2 "^0.2.2" + babel-plugin-polyfill-corejs3 "^0.2.2" + babel-plugin-polyfill-regenerator "^0.2.2" + core-js-compat "^3.15.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + "@babel/preset-typescript@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" @@ -1278,6 +2043,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4": + version "7.14.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" + integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.3.1": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" @@ -1342,6 +2114,15 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" +"@babel/template@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -1381,24 +2162,10 @@ globals "^11.1.0" lodash "^4.17.10" -"@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.1.6" - "@babel/helper-function-name" "^7.1.0" - "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.1.6" - "@babel/types" "^7.1.6" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.10" - -"@babel/traverse@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/traverse@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.11.5" @@ -1425,6 +2192,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" + integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.7" + "@babel/types" "^7.14.5" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" @@ -1449,14 +2231,6 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" -"@babel/types@^7.1.5", "@babel/types@^7.1.6": - version "7.1.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -1475,6 +2249,14 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.14.5", "@babel/types@^7.4.4": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" + integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + to-fast-properties "^2.0.0" + "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" @@ -1517,6 +2299,49 @@ version "0.1.6" resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz#e4a9856c1057f0aff7d443b8536477c243abe28c" +"@emotion/cache@^10.0.27": + version "10.0.29" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" + integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== + dependencies: + "@emotion/sheet" "0.9.4" + "@emotion/stylis" "0.8.5" + "@emotion/utils" "0.11.3" + "@emotion/weak-memoize" "0.2.5" + +"@emotion/core@^10.0.20": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3" + integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/cache" "^10.0.27" + "@emotion/css" "^10.0.27" + "@emotion/serialize" "^0.11.15" + "@emotion/sheet" "0.9.4" + "@emotion/utils" "0.11.3" + +"@emotion/css@^10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" + integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== + dependencies: + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + babel-plugin-emotion "^10.0.27" + +"@emotion/hash@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" + integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== + +"@emotion/is-prop-valid@0.8.8": + 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@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -1529,11 +2354,84 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== +"@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/native@^10.0.14": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/native/-/native-10.0.27.tgz#67c2c0ceeeed873c849c611d9a6497a006d43a8f" + integrity sha512-3qxR2XFizGfABKKbX9kAYc0PHhKuCEuyxshoq3TaMEbi9asWHdQVChg32ULpblm4XAf9oxaitAU7J9SfdwFxtw== + dependencies: + "@emotion/primitives-core" "10.0.27" + +"@emotion/primitives-core@10.0.27": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/primitives-core/-/primitives-core-10.0.27.tgz#7a5fae07fe06a046ced597f5c0048f22d5c45842" + integrity sha512-fRBEDNPSFFOrBJ0OcheuElayrNTNdLF9DzMxtL0sFgsCFvvadlzwJHhJMSwEJuxwARm9GhVLr1p8G8JGkK98lQ== + dependencies: + css-to-react-native "^2.2.1" + +"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": + version "0.11.16" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" + integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== + dependencies: + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/unitless" "0.7.5" + "@emotion/utils" "0.11.3" + csstype "^2.5.7" + +"@emotion/sheet@0.9.4": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" + integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== + +"@emotion/styled-base@^10.0.27": + version "10.0.31" + resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" + integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/is-prop-valid" "0.8.8" + "@emotion/serialize" "^0.11.15" + "@emotion/utils" "0.11.3" + +"@emotion/styled@^10.0.17": + version "10.0.27" + resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" + integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== + dependencies: + "@emotion/styled-base" "^10.0.27" + babel-plugin-emotion "^10.0.27" + +"@emotion/stylis@0.8.5": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@0.7.5": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@emotion/unitless@^0.7.0": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" integrity sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg== +"@emotion/utils@0.11.3": + version "0.11.3" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" + integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== + +"@emotion/weak-memoize@0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" + integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== + "@expo/react-native-action-sheet@^3.8.0": version "3.8.0" resolved "https://registry.yarnpkg.com/@expo/react-native-action-sheet/-/react-native-action-sheet-3.8.0.tgz#0db8b70ea8550ceb2983abda8584efa3a61d7389" @@ -1574,6 +2472,14 @@ dependencies: "@hapi/hoek" "^8.3.0" +"@hypnosphi/create-react-context@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" + integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + "@invertase/react-native-apple-authentication@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@invertase/react-native-apple-authentication/-/react-native-apple-authentication-2.1.2.tgz#af5ffde838a0e3151364b80418f6d25668a05107" @@ -2452,6 +3358,16 @@ resolved "https://registry.yarnpkg.com/@ptomasroos/react-native-multi-slider/-/react-native-multi-slider-2.2.2.tgz#35a97fb8c355627c6a2ded010b360ac5728b44ad" integrity sha512-HWyCnRD3Z3SbHK2FLWYmBBqd1B4iXipeKv1+AK0FoY/CElEDTEixHE8hN60TsqxalPrznn798LE2Q4tHuCiyaA== +"@reach/router@^1.2.1": + version "1.3.4" + resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" + integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== + dependencies: + create-react-context "0.3.0" + invariant "^2.2.3" + prop-types "^15.6.1" + react-lifecycles-compat "^3.0.4" + "@react-native-community/async-storage@1.6.3": version "1.6.3" resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.6.3.tgz#1a713e8c5cacd543ab8539080a5ce57ad917da88" @@ -2708,15 +3624,15 @@ lodash "^4.17.15" lodash-es "^4.17.15" -"@segment/analytics-react-native-appboy@^1.4.8": - version "1.4.8" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.4.8.tgz#ecbbeb658036975352d84d197d7fc099e02b871e" - integrity sha512-czX4H1/cfDhWeLL9I4MlbqxXT/xqaNpVw5uo70GgHD5ZZOEB1Y3hC5g81oBwgh6G/y/cn7ZS/XXCmJhG4EV8Gw== +"@segment/analytics-react-native-appboy@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.5.0.tgz#0aa635710cf6d8198990f9cf5d27112af1f9ed82" + integrity sha512-de4NCfopobxziH/sDmGEsZ7VWevNObkFMtDsqhmrbYrjRMs4LGJ/GWo2TX0GhzYqPJurBrNPIoiQlrTaX7rIfg== -"@segment/analytics-react-native@^1.4.4": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.4.4.tgz#1c5e4f18ac46dd899947c758f104004fc7d5ffce" - integrity sha512-zSgoGvw3VNqam0QoumOGiNr97ar3tutSwuMJPj2Da6mcJBVohMYHQcpShyufWfsiDeX8oMnu+UJx5eo+cxskrw== +"@segment/analytics-react-native@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.5.0.tgz#14538b8c018202ef62daf8c5b3898312a057fbde" + integrity sha512-hW93MKffFfkqNec615jQUB5wJHb5KyIcZitIVF5L7cZZxBCM7rQjVdwV9Jdk3KGFwjnWGRkAjDD2DkJZYqz7KQ== "@sentry/browser@6.2.0": version "6.2.0" @@ -2852,6 +3768,364 @@ dependencies: type-detect "4.0.8" +"@storybook/addon-actions@^5.3": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.21.tgz#16eed3eb24996adfcbf70bd476a261324d6de593" + integrity sha512-6SAF/j8UBZaAbRz/rYUlcCXda+c4LQvvNlbVJc9GHjNNNMJQQVc3/EU+M7PyFz6uDUxudAW1+AFchGk04ACJ2g== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/client-api" "5.3.21" + "@storybook/components" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/theming" "5.3.21" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + polished "^3.3.1" + prop-types "^15.7.2" + react "^16.8.3" + react-inspector "^4.0.0" + uuid "^3.3.2" + +"@storybook/addons@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.21.tgz#ee312c738c33e8c34dc11777ef93522c3c36e56a" + integrity sha512-Ji/21WADTLVbTbiKcZ64BcL0Es+h1Afxx3kNmGJqPSTUYroCwIFCT9mUzCqU6G+YyWaISAmTii5UJkTwMkChwA== + dependencies: + "@storybook/api" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + core-js "^3.0.1" + global "^4.3.2" + util-deprecate "^1.0.2" + +"@storybook/api@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" + integrity sha512-K1o4an/Rx8daKRDooks6qzN6ZGyqizeacZZbair3F8CsSfTgrr2zCcf9pgKojLQa9koEmMHlcdb2KnS+GwPEgA== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + fast-deep-equal "^2.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + prop-types "^15.6.2" + react "^16.8.3" + semver "^6.0.0" + shallow-equal "^1.1.0" + store2 "^2.7.1" + telejson "^3.2.0" + util-deprecate "^1.0.2" + +"@storybook/channel-postmessage@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz#9c08bf1c108ff973dbca18e582680d25178db1d4" + integrity sha512-CfoP7aEbZtJ35R9zeujMRdIwprETUi+Ve+y84DhXYQ2uJ0rR3vO4zHLZnxMMyJ5VnYOfuO042uch07+EKBz40Q== + dependencies: + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + core-js "^3.0.1" + global "^4.3.2" + telejson "^3.2.0" + +"@storybook/channel-websocket@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-5.3.21.tgz#2ffc670563de672c087c05dc1007253d9b9f55ed" + integrity sha512-9TcsCvgZMdCZu2urudyLhshuQxjCsFUd8pu6ZzcxBFn5a8kgb1oKEv9pD0A9S+uQ2ramYgtqykRiG4Z3/JeuyA== + dependencies: + "@storybook/channels" "5.3.21" + core-js "^3.0.1" + global "^4.3.2" + telejson "^3.2.0" + +"@storybook/channels@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.21.tgz#53ba622b171d68b3b102983a62aa05149a49497b" + integrity sha512-OXoFs9XtBVg/cCk6lYMrxkzaNlJRf54ABdorp7YAAj7S9tRL1JxOZHxmjNQwEoiRvssmem2rAWtEAxfuEANsAA== + dependencies: + core-js "^3.0.1" + +"@storybook/client-api@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.21.tgz#5b218a28f24219c32ab4b92a6af2a3e452fb8089" + integrity sha512-vS4DfA2Avvl7JNQymO4e3RUNoTWIGVfZJ70Irnd6PTAZNojbCXTYuigDavrmyf83F3g5rQpwmSAPjuoi/X/FRA== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/channel-postmessage" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@types/webpack-env" "^1.15.0" + core-js "^3.0.1" + eventemitter3 "^4.0.0" + global "^4.3.2" + is-plain-object "^3.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + stable "^0.1.8" + ts-dedent "^1.1.0" + util-deprecate "^1.0.2" + +"@storybook/client-logger@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.21.tgz#912c83b0d358e70acad1ad4abe199de4c38b109f" + integrity sha512-OzQkwpZ5SK9cXD9Mv6lxPGPot+hSZvnkEW12kpt1AHfJz4ET26YTDOI3oetPsjfRJo6qYLeQX8+wF7rklfXbzA== + dependencies: + core-js "^3.0.1" + +"@storybook/components@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" + integrity sha512-42QQk6qZl6wrtajP8yNCfmNS2t8Iod5QY+4V/l6iNnnT9O+j6cWOlnO+ZyvjNv0Xm0zIOt+VyVjdkKh8FUjQmA== + dependencies: + "@storybook/client-logger" "5.3.21" + "@storybook/theming" "5.3.21" + "@types/react-syntax-highlighter" "11.0.4" + "@types/react-textarea-autosize" "^4.3.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.11.4" + memoizerific "^1.11.3" + polished "^3.3.1" + popper.js "^1.14.7" + prop-types "^15.7.2" + react "^16.8.3" + react-dom "^16.8.3" + react-focus-lock "^2.1.0" + react-helmet-async "^1.0.2" + react-popper-tooltip "^2.8.3" + react-syntax-highlighter "^11.0.2" + react-textarea-autosize "^7.1.0" + simplebar-react "^1.0.0-alpha.6" + ts-dedent "^1.1.0" + +"@storybook/core-events@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.21.tgz#41d81c3f107302a032545fc86ff344230c04b9e9" + integrity sha512-/Zsm1sKAh6pzQv8jQUmuhM7nuM01ZljIRKy8p2HjPNlMjDB5yaRkBfyeAUXUg+qXNI6aHVWa4jGdPEdwwY4oLA== + dependencies: + core-js "^3.0.1" + +"@storybook/core@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.21.tgz#da963166ea24601f318266a3aa6bbc06fc8fb175" + integrity sha512-plD47WIsn/JoyRJDOpmH7N7mEMo/jiA8ZlOitLW55zYvzUn8UrVpRFpMYo91OJxiCT6JFoaEh3XtNdhbgUwnPA== + dependencies: + "@babel/plugin-proposal-class-properties" "^7.7.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-transform-react-constant-elements" "^7.2.0" + "@babel/preset-env" "^7.4.5" + "@storybook/addons" "5.3.21" + "@storybook/channel-postmessage" "5.3.21" + "@storybook/client-api" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/csf" "0.0.1" + "@storybook/node-logger" "5.3.21" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + "@storybook/ui" "5.3.21" + airbnb-js-shims "^2.2.1" + ansi-to-html "^0.6.11" + autoprefixer "^9.7.2" + babel-plugin-add-react-displayname "^0.0.5" + babel-plugin-emotion "^10.0.20" + babel-plugin-macros "^2.7.0" + babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" + boxen "^4.1.0" + case-sensitive-paths-webpack-plugin "^2.2.0" + chalk "^3.0.0" + cli-table3 "0.5.1" + commander "^4.0.1" + core-js "^3.0.1" + corejs-upgrade-webpack-plugin "^2.2.0" + css-loader "^3.0.0" + detect-port "^1.3.0" + dotenv-webpack "^1.7.0" + ejs "^2.7.4" + express "^4.17.0" + file-loader "^4.2.0" + file-system-cache "^1.0.5" + find-cache-dir "^3.0.0" + find-up "^4.1.0" + fs-extra "^8.0.1" + glob-base "^0.3.0" + global "^4.3.2" + html-webpack-plugin "^4.0.0-beta.2" + inquirer "^7.0.0" + interpret "^2.0.0" + ip "^1.1.5" + json5 "^2.1.1" + lazy-universal-dotenv "^3.0.1" + micromatch "^4.0.2" + node-fetch "^2.6.0" + open "^7.0.0" + pnp-webpack-plugin "1.5.0" + postcss-flexbugs-fixes "^4.1.0" + postcss-loader "^3.0.0" + pretty-hrtime "^1.0.3" + qs "^6.6.0" + raw-loader "^3.1.0" + react-dev-utils "^9.0.0" + regenerator-runtime "^0.13.3" + resolve "^1.11.0" + resolve-from "^5.0.0" + semver "^6.0.0" + serve-favicon "^2.5.0" + shelljs "^0.8.3" + style-loader "^1.0.0" + terser-webpack-plugin "^2.1.2" + ts-dedent "^1.1.0" + unfetch "^4.1.0" + url-loader "^2.0.1" + util-deprecate "^1.0.2" + webpack "^4.33.0" + webpack-dev-middleware "^3.7.0" + webpack-hot-middleware "^2.25.0" + webpack-virtual-modules "^0.2.0" + +"@storybook/csf@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" + integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== + dependencies: + lodash "^4.17.15" + +"@storybook/node-logger@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.21.tgz#f11d45042bd57dc69e9037d8f374d9fd0aad8071" + integrity sha512-8xibncy873JXePCK5MC0qem1MKtWI1Lc4hv6rwURSwYpZtkO7yElay3XAFGUSfz8qFJkoDBmMTxBR3fp4Dln7g== + dependencies: + "@types/npmlog" "^4.1.2" + chalk "^3.0.0" + core-js "^3.0.1" + npmlog "^4.1.2" + pretty-hrtime "^1.0.3" + regenerator-runtime "^0.13.3" + +"@storybook/react-native-server@^5.3.23": + version "5.3.23" + resolved "https://registry.yarnpkg.com/@storybook/react-native-server/-/react-native-server-5.3.23.tgz#27ef61a74ec991b3d56690cd1dd9eba30718f3a5" + integrity sha512-1jGHwikc6BVoEW8tdJeYvnY1N2+cHyzit9xiXL9WXofiiYERoL4ENj1pgVp+AGA+yUYBsuSzeN7Hqp/LwdJ1Ug== + dependencies: + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/channel-websocket" "5.3.21" + "@storybook/core" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/ui" "5.3.21" + commander "^4.0.1" + core-js "^3.0.1" + global "^4.3.2" + react "^16.6.0" + react-dom "^16.8.3" + uuid "^3.3.2" + webpack "^4.33.0" + ws "^7.1.2" + +"@storybook/react-native@^5.3.25": + version "5.3.25" + resolved "https://registry.yarnpkg.com/@storybook/react-native/-/react-native-5.3.25.tgz#681c9cdcadba7eda88716f5d383ea47558367825" + integrity sha512-KPctJdk1++k4byblqTwULmxKDADsRAMat9BgMTx3Gewk4PjMbsbKCvRK7+AlJeNjz/kEsf9L6Y25y8lrw3rPXA== + dependencies: + "@emotion/core" "^10.0.20" + "@emotion/native" "^10.0.14" + "@storybook/addons" "5.3.21" + "@storybook/channel-websocket" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-api" "5.3.21" + "@storybook/core-events" "5.3.21" + core-js "^3.0.1" + emotion-theming "^10.0.19" + react-native-swipe-gestures "^1.0.4" + +"@storybook/router@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.21.tgz#32b08e5daa90a6ffa024bb670b874525a712a901" + integrity sha512-c29m5UikK5Q1lyd6FltOGFhIcpd6PIb855YS3OUNe3F6ZA1tfJ+aNKrCBc65d1c+fvCGG76dYYYv0RvwEmKXXg== + dependencies: + "@reach/router" "^1.2.1" + "@storybook/csf" "0.0.1" + "@types/reach__router" "^1.2.3" + core-js "^3.0.1" + global "^4.3.2" + lodash "^4.17.15" + memoizerific "^1.11.3" + qs "^6.6.0" + util-deprecate "^1.0.2" + +"@storybook/theming@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.21.tgz#ae2dc101aa57c3be4df1724ae729e11bad118e0b" + integrity sha512-FZbxjizqdO9lV5LUixPio/7+6UdPiswCzTJn8Hcot9uwwgfnrViRdN7xyjmSYRqv9nHP3OlYbtdeCAgZ4aPq8g== + dependencies: + "@emotion/core" "^10.0.20" + "@emotion/styled" "^10.0.17" + "@storybook/client-logger" "5.3.21" + core-js "^3.0.1" + deep-object-diff "^1.1.0" + emotion-theming "^10.0.19" + global "^4.3.2" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + resolve-from "^5.0.0" + ts-dedent "^1.1.0" + +"@storybook/ui@5.3.21": + version "5.3.21" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.21.tgz#b42568e03353b47aaab1b6449311f38858585f81" + integrity sha512-OUf8JYY9LN+XfzLSZE6KtboITGDL6C8Z0W9QOXM5LJwFLv4PkANK/f9qsB5vVHFm7vhoO96butFzs6SjTKhxkw== + dependencies: + "@emotion/core" "^10.0.20" + "@storybook/addons" "5.3.21" + "@storybook/api" "5.3.21" + "@storybook/channels" "5.3.21" + "@storybook/client-logger" "5.3.21" + "@storybook/components" "5.3.21" + "@storybook/core-events" "5.3.21" + "@storybook/router" "5.3.21" + "@storybook/theming" "5.3.21" + copy-to-clipboard "^3.0.8" + core-js "^3.0.1" + core-js-pure "^3.0.1" + emotion-theming "^10.0.19" + fast-deep-equal "^2.0.1" + fuse.js "^3.4.6" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.11.4" + memoizerific "^1.11.3" + polished "^3.3.1" + prop-types "^15.7.2" + qs "^6.6.0" + react "^16.8.3" + react-dom "^16.8.3" + react-draggable "^4.0.3" + react-helmet-async "^1.0.2" + react-hotkeys "2.0.0" + react-sizeme "^2.6.7" + regenerator-runtime "^0.13.2" + resolve-from "^5.0.0" + semver "^6.0.0" + store2 "^2.7.1" + telejson "^3.2.0" + util-deprecate "^1.0.2" + "@styled-system/background@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" @@ -2927,6 +4201,13 @@ dependencies: "@styled-system/core" "^5.1.2" +"@styled-system/theme-get@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049" + integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ== + dependencies: + "@styled-system/core" "^5.1.2" + "@styled-system/typography@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" @@ -3153,6 +4434,16 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" +"@types/html-minifier-terser@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== + +"@types/is-function@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" + integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -3193,10 +4484,15 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/lodash@4.14.170": - version "4.14.170" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" - integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== +"@types/json-schema@^7.0.5": + version "7.0.8" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" + integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== + +"@types/lodash@4.14.149": + version "4.14.149" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" + integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== "@types/luxon@1.15.2": version "1.15.2" @@ -3230,6 +4526,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== +"@types/npmlog@^4.1.2": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.3.tgz#9c24b49a97e25cf15a890ff404764080d7942132" + integrity sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -3255,6 +4556,13 @@ resolved "https://registry.yarnpkg.com/@types/query-string/-/query-string-5.0.1.tgz#6cb41c724cb1644d56c2d1dae7c7b204e706b39e" integrity sha512-qlH3YtJ5ipp6z5SU9G0LJsBnNEZqTKPeGjNIyMcGD5Dhbooz0CCsW/sILsgb+LBRrDeTehRtQviXV2kfLm3dqg== +"@types/reach__router@^1.2.3": + version "1.3.9" + resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.9.tgz#d3aaac0072665c81063cc6c557c18dadd642b226" + integrity sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w== + dependencies: + "@types/react" "*" + "@types/react-native-push-notification@^7.3.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@types/react-native-push-notification/-/react-native-push-notification-7.3.0.tgz#5c998134347c1e8a2ddb28524349acf12cfbb243" @@ -3275,6 +4583,13 @@ "@types/react" "*" "@types/relay-runtime" "*" +"@types/react-syntax-highlighter@11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz#d86d17697db62f98046874f62fdb3e53a0bbc4cd" + integrity sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg== + dependencies: + "@types/react" "*" + "@types/react-test-renderer@^16.9.3": version "16.9.3" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" @@ -3282,6 +4597,13 @@ dependencies: "@types/react" "*" +"@types/react-textarea-autosize@^4.3.3": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.6.tgz#f56f7b41aee9fb0310b6e32a8d2a77eb9a5893db" + integrity sha512-cTf8tCem0c8A7CERYbTuF+bRFaqYu7N7HLCa6ZhUhDx8XnUsTpGx5udMWljt87JpciUKuUkImKPEsy6kcKhrcQ== + dependencies: + "@types/react" "*" + "@types/react-tracking@7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@types/react-tracking/-/react-tracking-7.0.1.tgz#aa431b621c9fbee5d5a56844039216bfbfe3f713" @@ -3328,6 +4650,11 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -3338,20 +4665,25 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/styled-components@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.2.tgz#4d60af452fd35e6be6bc7a46d1a317daaab613ea" - integrity sha512-LIm9OqdtG4WHDGkdPDOGpeIlIVYs2IBxXsW5xgt4tKwY/VGY40YvmlUq69GbHkvX+i35236GOcXh6DmYCFDrDg== +"@types/styled-components@4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.3.tgz#8287e54e446302369eecc521243a2f32cf9122ee" + integrity sha512-LzntHlOKEOxUxMkVmQPNG88TsldeHO2NlwNkzHnw4wL8qhHQgd7u+u3yw84hZgoFh4ugsLCbFtjYcbP7v5WC5Q== dependencies: "@types/node" "*" "@types/react" "*" -"@types/styled-system@5.1.9": - version "5.1.9" - resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.9.tgz#8baac8f6eca9e0bd5768c175ca5ce1f2d6f61ade" - integrity sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ== +"@types/styled-system@5.1.12": + version "5.1.12" + resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.12.tgz#4f3ca8da3dffe3c5a6cc3b2a97f51b41464c104a" + integrity sha512-7x4BYKKfK9QewfsFC2x5r9BK/OrfX+JF/1P21jKPMHruawDw9gvG7bTZgTVk6YkzDO2JUlsk4i8hdiAepAhD0g== dependencies: - csstype "^2.6.9" + csstype "^3.0.2" + +"@types/styled-system__theme-get@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz#c3884e8f15641603503dc1d49f9d282dce11e5fb" + integrity sha512-+i4VZ5wuYKMU8oKPmUlzc9r2RhpSNOK061Khtrr7X0sOQEcIyhUtrDusuMkp5ZR3D05Xopn3zybTPyUSQkKGAA== "@types/supercluster@5.0.0": version "5.0.0" @@ -3360,6 +4692,44 @@ dependencies: "@types/geojson" "*" +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== + +"@types/uglify-js@*": + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== + dependencies: + source-map "^0.6.1" + +"@types/webpack-env@^1.15.0": + version "1.16.2" + resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.2.tgz#8db514b059c1b2ae14ce9d7bb325296de6a9a0fa" + integrity sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw== + +"@types/webpack-sources@*": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" + integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" + +"@types/webpack@^4.41.8": + version "4.41.30" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" + integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== + dependencies: + "@types/node" "*" + "@types/tapable" "^1" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + anymatch "^3.0.0" + source-map "^0.6.0" + "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -3391,11 +4761,166 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.3.tgz#5a85024796bffe0eb01601bfc180fe218356dba4" integrity sha512-XxZFKnxzTfm+DR8MMBA35UUXfUPmjPpi8HJ90VZg7q/LIbtiOhVGJ26gNnATcflcpnIyf2Qm9A+oEhswaqoDpA== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== + dependencies: + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== + +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== + dependencies: + "@webassemblyjs/ast" "1.9.0" + +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== + +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== + +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/helper-wasm-section" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-opt" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + "@webassemblyjs/wast-printer" "1.9.0" + +"@webassemblyjs/wasm-gen@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-buffer" "1.9.0" + "@webassemblyjs/wasm-gen" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/ieee754" "1.9.0" + "@webassemblyjs/leb128" "1.9.0" + "@webassemblyjs/utf8" "1.9.0" + +"@webassemblyjs/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/floating-point-hex-parser" "1.9.0" + "@webassemblyjs/helper-api-error" "1.9.0" + "@webassemblyjs/helper-code-frame" "1.9.0" + "@webassemblyjs/helper-fsm" "1.9.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" + "@xtuc/long" "4.2.2" + "@xobotyi/scrollbar-width@^1.9.5": version "1.9.5" resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -3439,6 +4964,14 @@ accepts@~1.3.4: mime-types "~2.1.16" negotiator "0.6.1" +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -3457,11 +4990,21 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + acorn@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + agent-base@4, agent-base@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" @@ -3491,6 +5034,29 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +airbnb-js-shims@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" + integrity sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== + dependencies: + array-includes "^3.0.3" + array.prototype.flat "^1.2.1" + array.prototype.flatmap "^1.2.1" + es5-shim "^4.5.13" + es6-shim "^0.35.5" + function.prototype.name "^1.1.0" + globalthis "^1.0.0" + object.entries "^1.1.0" + object.fromentries "^2.0.0 || ^1.0.0" + object.getownpropertydescriptors "^2.0.3" + object.values "^1.1.0" + promise.allsettled "^1.0.0" + promise.prototype.finally "^3.1.0" + string.prototype.matchall "^4.0.0 || ^3.0.1" + string.prototype.padend "^3.0.0" + string.prototype.padstart "^3.0.0" + symbol.prototype.description "^1.0.0" + airbnb-prop-types@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz#43147a5062dd2a4a5600e748a47b64004cc5f7fc" @@ -3507,11 +5073,22 @@ airbnb-prop-types@^2.13.2: prop-types-exact "^1.2.0" react-is "^16.8.6" -ajv@^6.5.3: - version "6.5.5" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -3531,6 +5108,13 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-colors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" @@ -3538,7 +5122,7 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^3.2.1: +ansi-colors@^3.0.0, ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== @@ -3595,6 +5179,11 @@ ansi-gray@^0.1.1: dependencies: ansi-wrap "0.1.0" +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" @@ -3659,6 +5248,13 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-to-html@^0.6.11: + version "0.6.15" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7" + integrity sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ== + dependencies: + entities "^2.0.0" + ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -3677,6 +5273,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.0, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + anymatch@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -3698,7 +5302,12 @@ apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: dependencies: fast-json-stable-stringify "^2.0.0" -aproba@^1.0.3: +app-root-dir@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" + integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= + +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -3781,15 +5390,21 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-iterate@^1.0.0: +array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6" - integrity sha1-hlv3+K851rCYLGCQKRSsdrwBCPY= + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-includes@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" + integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.1.1" + is-string "^1.0.5" array-map@~0.0.0: version "0.0.0" @@ -3839,6 +5454,27 @@ array.prototype.flat@^1.2.1: es-abstract "^1.10.0" function-bind "^1.1.1" +array.prototype.flatmap@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +array.prototype.map@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" + integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.5" + arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -3849,6 +5485,16 @@ asap@~2.0.3, asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -3859,6 +5505,14 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -3874,6 +5528,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-retry@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" @@ -3881,11 +5540,6 @@ async-retry@1.2.3: dependencies: retry "0.12.0" -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= - async@^2.4.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" @@ -3939,16 +5593,18 @@ auto@7.12.3: signale "^1.4.0" tslib "1.10.0" -autoprefixer@^9.0.0: - version "9.3.1" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.3.1.tgz#71b622174de2b783d5fd99f9ad617b7a3c78443e" +autoprefixer@^9.7.2: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== dependencies: - browserslist "^4.3.3" - caniuse-lite "^1.0.30000898" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.5" - postcss-value-parser "^3.3.1" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" await-to-js@^2.1.1: version "2.1.1" @@ -3987,6 +5643,41 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-helper-evaluate-path@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" + integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== + +babel-helper-flip-expressions@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" + integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= + +babel-helper-is-nodes-equiv@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" + integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= + +babel-helper-is-void-0@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" + integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= + +babel-helper-mark-eval-scopes@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" + integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= + +babel-helper-remove-or-void@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" + integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= + +babel-helper-to-multiple-sequence-expressions@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" + integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== + babel-jest@25.2.6, babel-jest@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.2.6.tgz#fe67ff4d0db3626ca8082da8881dd5e84e07ae75" @@ -4000,6 +5691,44 @@ babel-jest@25.2.6, babel-jest@^25.2.6: chalk "^3.0.0" slash "^3.0.0" +babel-loader@^8.2.2: + version "8.2.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" + integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-add-react-displayname@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" + integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: + version "10.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" + integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.16" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + babel-plugin-import-graphql@2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/babel-plugin-import-graphql/-/babel-plugin-import-graphql-2.7.0.tgz#984b2330afa05cce5ff81e577f7d82cdb86aea6d" @@ -4025,7 +5754,7 @@ babel-plugin-jest-hoist@^25.2.6: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.0.0: +babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -4034,6 +5763,106 @@ babel-plugin-macros@^2.0.0: cosmiconfig "^6.0.0" resolve "^1.12.0" +babel-plugin-minify-builtins@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" + integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== + +babel-plugin-minify-constant-folding@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" + integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-minify-dead-code-elimination@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" + integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-mark-eval-scopes "^0.4.3" + babel-helper-remove-or-void "^0.4.3" + lodash "^4.17.11" + +babel-plugin-minify-flip-comparisons@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" + integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-minify-guarded-expressions@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" + integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + +babel-plugin-minify-infinity@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" + integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= + +babel-plugin-minify-mangle-names@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" + integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== + dependencies: + babel-helper-mark-eval-scopes "^0.4.3" + +babel-plugin-minify-numeric-literals@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" + integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= + +babel-plugin-minify-replace@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" + integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== + +babel-plugin-minify-simplify@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" + integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== + dependencies: + babel-helper-evaluate-path "^0.5.0" + babel-helper-flip-expressions "^0.4.3" + babel-helper-is-nodes-equiv "^0.0.1" + babel-helper-to-multiple-sequence-expressions "^0.5.0" + +babel-plugin-minify-type-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" + integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= + dependencies: + babel-helper-is-void-0 "^0.4.3" + +babel-plugin-polyfill-corejs2@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" + integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.14.0" + +babel-plugin-polyfill-regenerator@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + babel-plugin-relay@10.1.3: version "10.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-relay/-/babel-plugin-relay-10.1.3.tgz#3c52f06869c2295766f4df63736b9ad887386af3" @@ -4061,6 +5890,65 @@ babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== +babel-plugin-transform-inline-consecutive-adds@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" + integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= + +babel-plugin-transform-member-expression-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" + integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= + +babel-plugin-transform-merge-sibling-variables@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" + integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= + +babel-plugin-transform-minify-booleans@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" + integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= + +babel-plugin-transform-property-literals@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" + integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= + dependencies: + esutils "^2.0.2" + +babel-plugin-transform-regexp-constructors@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" + integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= + +babel-plugin-transform-remove-console@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" + integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= + +babel-plugin-transform-remove-debugger@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" + integrity sha1-QrcnYxyXl44estGZp67IShgznvI= + +babel-plugin-transform-remove-undefined@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" + integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== + dependencies: + babel-helper-evaluate-path "^0.5.0" + +babel-plugin-transform-simplify-comparison-operators@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" + integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= + +babel-plugin-transform-undefined-to-void@^6.9.4: + version "6.9.4" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" + integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= + babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" @@ -4103,10 +5991,34 @@ babel-preset-jest@^25.2.6: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^25.2.6" -bail@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" - integrity sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q= +"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" + integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== + dependencies: + babel-plugin-minify-builtins "^0.5.0" + babel-plugin-minify-constant-folding "^0.5.0" + babel-plugin-minify-dead-code-elimination "^0.5.1" + babel-plugin-minify-flip-comparisons "^0.4.3" + babel-plugin-minify-guarded-expressions "^0.4.4" + babel-plugin-minify-infinity "^0.4.3" + babel-plugin-minify-mangle-names "^0.5.0" + babel-plugin-minify-numeric-literals "^0.4.3" + babel-plugin-minify-replace "^0.5.0" + babel-plugin-minify-simplify "^0.5.1" + babel-plugin-minify-type-constructors "^0.4.3" + babel-plugin-transform-inline-consecutive-adds "^0.4.3" + babel-plugin-transform-member-expression-literals "^6.9.4" + babel-plugin-transform-merge-sibling-variables "^6.9.4" + babel-plugin-transform-minify-booleans "^6.9.4" + babel-plugin-transform-property-literals "^6.9.4" + babel-plugin-transform-regexp-constructors "^0.4.3" + babel-plugin-transform-remove-console "^6.9.4" + babel-plugin-transform-remove-debugger "^6.9.4" + babel-plugin-transform-remove-undefined "^0.5.0" + babel-plugin-transform-simplify-comparison-operators "^6.9.4" + babel-plugin-transform-undefined-to-void "^6.9.4" + lodash "^4.17.11" balanced-match@^1.0.0: version "1.0.0" @@ -4118,16 +6030,16 @@ base-64@0.1.0: resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= +base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base64-js@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw== -base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -4141,6 +6053,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +batch-processor@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" + integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= + bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -4163,6 +6080,21 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + binaryextensions@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" @@ -4182,11 +6114,42 @@ bluebird@2.9.6: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.9.6.tgz#1fc3a6b1685267dc121b5ec89b32ce069d81ab7d" integrity sha1-H8OmsWhSZ9wSG17ImzLOBp2Bq30= +bluebird@^3.3.5, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + bmp-js@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -4209,6 +6172,20 @@ bower-config@^1.4.0: untildify "^2.1.0" wordwrap "^0.0.3" +boxen@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + bplist-creator@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" @@ -4248,7 +6225,7 @@ braces@^2.3.0: split-string "^3.0.2" to-regex "^3.0.1" -braces@^2.3.1: +braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -4264,13 +6241,18 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" @@ -4282,13 +6264,86 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserslist@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.4.tgz#4477b737db6a1b07077275b24791e680d4300425" +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== dependencies: - caniuse-lite "^1.0.30000899" - electron-to-chromium "^1.3.82" - node-releases "^1.0.1" + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== + dependencies: + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" + +browserslist@^4.12.0, browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" bser@^2.0.0: version "2.0.0" @@ -4339,6 +6394,20 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -4347,16 +6416,71 @@ buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^12.0.2: + version "12.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" + integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^13.0.1: + version "13.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" + integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== + dependencies: + chownr "^1.1.2" + figgy-pudding "^3.5.1" + fs-minipass "^2.0.0" + glob "^7.1.4" + graceful-fs "^4.2.2" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^7.0.0" + unique-filename "^1.1.1" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -4372,6 +6496,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -4399,30 +6531,19 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= +camel-case@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" + pascal-case "^3.1.2" + tslib "^2.0.3" camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -camelcase@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -4433,9 +6554,15 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -caniuse-lite@^1.0.30000898, caniuse-lite@^1.0.30000899: - version "1.0.30000912" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz#08e650d4090a9c0ab06bfd2b46b7d3ad6dcaea28" +can-use-dom@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" + integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= + +caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: + version "1.0.30001244" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz#a6dc49ad5fa02d81d04373ec3f5ceabc3da06abf" + integrity sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q== capture-exit@^2.0.0: version "2.0.0" @@ -4452,16 +6579,16 @@ card-validator@^3.0.0: credit-card-type "^5.0.0" lodash "3.10.1" +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -ccount@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" - integrity sha1-U7ai+BW7d7nChx97mnLDol8djok= - chalk@*, chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4482,7 +6609,7 @@ chalk@0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -4539,11 +6666,6 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== -character-entities-html4@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" - integrity sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA= - character-entities-legacy@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" @@ -4603,20 +6725,67 @@ cheerio@0.22.0, cheerio@^1.0.0-rc.2: lodash.reject "^4.4.0" lodash.some "^4.4.0" +chokidar@^2.0.4, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== +chownr@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" class-utils@^0.3.5: version "0.3.6" @@ -4628,6 +6797,18 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classnames@^2.2.5: + version "2.3.1" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" + integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== + +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + clean-stack@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" @@ -4638,6 +6819,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -4662,6 +6848,16 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== +cli-table3@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" @@ -4682,14 +6878,19 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^3.0.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +clipboard@^2.0.0: + version "2.0.8" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" + integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" cliui@^4.0.0: version "4.1.0" @@ -4723,14 +6924,6 @@ clone-buffer@^1.0.0: resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw== - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -4775,11 +6968,6 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -collapse-white-space@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" - integrity sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw= - collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -4843,6 +7031,11 @@ colorette@^1.0.7: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== +colorette@^1.2.1, colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" @@ -4872,6 +7065,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + command-exists@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" @@ -4926,6 +7124,16 @@ commander@^2.18.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1, commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -4976,6 +7184,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" @@ -5008,11 +7226,33 @@ connect@^3.6.5: parseurl "~1.3.2" utils-merge "1.0.1" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -5020,6 +7260,13 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" +convert-source-map@^1.5.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -5027,18 +7274,53 @@ convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3.3.1: +copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== dependencies: toggle-selection "^1.0.6" +core-js-compat@^3.14.0, core-js-compat@^3.15.0: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" + integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + +core-js-pure@^3.0.1: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" + integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== + core-js@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -5074,6 +7356,11 @@ core-js@^3.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" integrity sha512-MQx/7TLgmmDVamSyfE+O+5BHvG1aUGj/gHhLn1wVtm2B5u1eVIPvh7vkfjwWKNCjrTJB8+He99IntSQ1qP+vYQ== +core-js@^3.0.1, core-js@^3.0.4: + version "3.15.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" + integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== + core-js@^3.3.2: version "3.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.1.tgz#76dd6828412900ab27c8ce0b22e6114d7ce21b18" @@ -5084,6 +7371,14 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +corejs-upgrade-webpack-plugin@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" + integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== + dependencies: + resolve-from "^5.0.0" + webpack "^4.38.0" + cosmiconfig@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -5145,6 +7440,37 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-react-class@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" @@ -5154,6 +7480,14 @@ create-react-class@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" +create-react-context@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" + integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== + dependencies: + gud "^1.0.0" + warning "^4.0.3" + credit-card-type@^5.0.0: version "5.0.4" resolved "https://registry.yarnpkg.com/credit-card-type/-/credit-card-type-5.0.4.tgz#2dd9df280411ce2bb91ed95ac31e814605717aed" @@ -5166,6 +7500,17 @@ cross-fetch@^3.0.4, cross-fetch@^3.0.6: dependencies: node-fetch "2.6.1" +cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-0.2.9.tgz#bd67f96c07efb6303b7fe94c1e979f88478e0a39" @@ -5182,17 +7527,6 @@ cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" @@ -5211,6 +7545,23 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -5224,6 +7575,25 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" +css-loader@^3.0.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" @@ -5234,6 +7604,17 @@ css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-select@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" + integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -5244,6 +7625,15 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" +css-to-react-native@^2.2.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" + integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^3.3.0" + css-to-react-native@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.1.tgz#cf0f61e0514846e2d4dc188b0886e29d8bef64a2" @@ -5279,15 +7669,15 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== -css@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" - integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== - dependencies: - inherits "^2.0.3" - source-map "^0.6.1" - source-map-resolve "^0.5.2" - urix "^0.1.0" +css-what@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssom@^0.4.1: version "0.4.4" @@ -5311,28 +7701,31 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== -csstype@^2.6.9: - version "2.6.10" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" - integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== +csstype@^2.5.7: + version "2.6.17" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" + integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== + +csstype@^3.0.2: + version "3.0.8" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" + integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== csstype@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - cycle@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + danger-plugin-jest@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/danger-plugin-jest/-/danger-plugin-jest-1.3.0.tgz#7340e3c45f9f1707a57d031d8e5581e23f68199d" @@ -5423,7 +7816,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -5444,6 +7837,13 @@ debug@4, debug@^4.3.1: dependencies: ms "2.1.2" +debug@^3.0.0, debug@^3.2.5: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -5451,22 +7851,14 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: +debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -5493,6 +7885,18 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= +deep-equal@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -5503,6 +7907,11 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-object-diff@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" + integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== + deepmerge@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -5559,24 +7968,16 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -5606,6 +8007,14 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -5631,6 +8040,35 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== +detect-node-es@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" + integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" + integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-secrets@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/detect-secrets/-/detect-secrets-1.0.6.tgz#ce6f46840e666f7d396ffb9b458c29ce9fdb5afd" + integrity sha512-bAEmXtMJNS/By/TCg9uSW9Sp0V1Z0N+uwlQWFUMbCVri5Yq5rM8gVs+2zzNIjNOy36o5kANZRrMc+22Zf6eRFQ== + dependencies: + debug "^4.1.0" + which "^1.3.1" + devtools-protocol@0.0.847576: version "0.0.847576" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.847576.tgz#2f201bfb68aa9ef4497199fbd7f5d5dfde3b200b" @@ -5656,6 +8094,15 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + dir-glob@2.0.0, dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" @@ -5664,6 +8111,13 @@ dir-glob@2.0.0, dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -5672,6 +8126,15 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" +dom-serializer@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -5685,6 +8148,11 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domelementtype@1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -5700,6 +8168,11 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== +domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -5714,6 +8187,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + domutils@1.5.1, domutils@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -5730,18 +8210,52 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -dot-prop@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" - integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== +domutils@^2.5.2, domutils@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" + integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dotenv-defaults@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz#032c024f4b5906d9990eb06d722dc74cc60ec1bd" + integrity sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q== dependencies: - is-obj "^1.0.0" + dotenv "^6.2.0" + +dotenv-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" + integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== + +dotenv-webpack@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" + integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== + dependencies: + dotenv-defaults "^1.0.2" dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== +dotenv@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" + integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== + dotenv@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" @@ -5757,6 +8271,21 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + easy-peasy@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/easy-peasy/-/easy-peasy-3.3.0.tgz#1ae7cbaa834dad5aa404f1437726fb8c0eed3cef" @@ -5804,9 +8333,35 @@ ejs@^2.5.9: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -electron-to-chromium@^1.3.82: - version "1.3.85" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.85.tgz#5c46f790aa96445cabc57eb9d17346b1e46476fe" +ejs@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" + integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== + +electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.723: + version "1.3.774" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz#4d6661a23119e35151646c9543b346bb3beca423" + integrity sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA== + +element-resize-detector@^1.2.1: + version "1.2.3" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.3.tgz#5078d9b99398fe4c589f8c8df94ff99e5d413ff3" + integrity sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ== + dependencies: + batch-processor "1.0.0" + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^7.0.1: version "7.0.3" @@ -5823,6 +8378,20 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emotion-theming@^10.0.19: + version "10.0.27" + resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" + integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== + dependencies: + "@babel/runtime" "^7.5.5" + "@emotion/weak-memoize" "0.2.5" + hoist-non-react-statics "^3.3.0" + encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -5840,7 +8409,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -5857,6 +8426,15 @@ enhanced-resolve@3.3.0: object-assign "^4.0.1" tapable "^0.2.5" +enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + enquirer@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.1.tgz#f1bf52ea38470525f41412d723a62ba6868559c6" @@ -5965,6 +8543,13 @@ errno@^0.1.3: dependencies: prr "~1.0.1" +errno@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -6018,6 +8603,28 @@ es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0: is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.6.1: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -6029,6 +8636,25 @@ es-abstract@^1.6.1: is-callable "^1.1.3" is-regex "^1.0.4" +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-get-iterator@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.0" + has-symbols "^1.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" + is-string "^1.0.5" + isarray "^2.0.5" + es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -6038,6 +8664,20 @@ es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-shim@^4.5.13: + version "4.5.15" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.15.tgz#6a26869b261854a3b045273f5583c52d390217fe" + integrity sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw== + es6-promise@^4.0.3: version "4.2.4" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" @@ -6050,21 +8690,31 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" +es6-shim@^0.35.5: + version "0.35.6" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" + integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== -escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -6082,6 +8732,14 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -6092,11 +8750,28 @@ esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esrecurse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= +estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -6117,11 +8792,36 @@ eventemitter3@^3.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.1.tgz#4ce66c3fc5b5a6b9f2245e359e1938f1ab10f960" integrity sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA== +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + events@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +eventsource@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" + integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" @@ -6171,14 +8871,6 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execall@^1.0.0: - name execa - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= - dependencies: - clone-regexp "^1.0.0" - exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" @@ -6221,6 +8913,42 @@ expect@^25.2.7: jest-message-util "^25.2.6" jest-regex-util "^25.2.6" +express@^4.17.0: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -6243,11 +8971,6 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" - integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= - extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -6380,6 +9103,20 @@ fastest-stable-stringify@^2.0.2: resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== +fault@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" + integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== + dependencies: + format "^0.2.0" + +faye-websocket@~0.11.1: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -6455,6 +9192,11 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +figgy-pudding@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" + integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -6462,26 +9204,40 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.2.0: +figures@^3.0.0, figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= +file-loader@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" + integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + loader-utils "^1.2.3" + schema-utils "^2.5.0" + +file-system-cache@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" + integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= + dependencies: + bluebird "^3.3.5" + fs-extra "^0.30.0" + ramda "^0.21.0" file-type@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== +filesize@3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -6517,6 +9273,19 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -6526,6 +9295,24 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -6533,20 +9320,25 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^3.0.0: +find-up@3.0.0, find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -6587,21 +9379,26 @@ first-chunk-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -flat-cache@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" - integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + inherits "^2.0.3" + readable-stream "^2.3.6" fn-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== +focus-lock@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.9.1.tgz#e8ec7d4821631112193ae09258107f531588da01" + integrity sha512-/2Nj60Cps6yOLSO+CkVbeSKfwfns5XbX6HOedIK9PdzODP04N9c3xqOcPXayN0WsT9YjJvAnXmI0NdqNIDf5Kw== + dependencies: + tslib "^2.0.3" + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -6612,6 +9409,20 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +fork-ts-checker-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" + integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^2.0.4" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + form-data@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -6638,6 +9449,11 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" +format@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" + integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= + formik@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570" @@ -6652,6 +9468,11 @@ formik@2.1.4: tiny-warning "^1.0.2" tslib "^1.10.0" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -6664,6 +9485,14 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -6674,6 +9503,17 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" @@ -6701,7 +9541,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.1.0: +fs-extra@^8.0.1, fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -6727,6 +9567,23 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -6745,6 +9602,11 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -6759,6 +9621,11 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" +fuse.js@^3.4.6: + version "3.6.1" + resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" + integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -6798,6 +9665,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-monorepo-packages@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz#3eee88d30b11a5f65955dec6ae331958b2a168e4" @@ -6912,6 +9788,21 @@ gitlog@^3.1.2: debug "^3.1.0" lodash.assign "^4.2.0" +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -6920,6 +9811,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -6961,6 +9859,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -6979,7 +9884,16 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global@~4.4.0: +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.2, global@^4.4.0, global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== @@ -6992,66 +9906,44 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= +globalthis@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" + integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== dependencies: - array-union "^1.0.1" - dir-glob "^2.0.0" - glob "^7.1.2" - ignore "^3.3.5" - pify "^3.0.0" - slash "^1.0.0" + define-properties "^1.1.3" -globby@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" +globby@8.0.2, globby@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== dependencies: array-union "^1.0.1" - dir-glob "^2.0.0" + dir-glob "2.0.0" fast-glob "^2.0.2" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -globby@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= dependencies: array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" + dir-glob "^2.0.0" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= - -gonzales-pe@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" - integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw== +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: - minimist "1.1.x" + delegate "^3.1.2" got@^7.0.0: version "7.1.0" @@ -7078,6 +9970,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.2.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + grapheme-splitter@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -7126,6 +10023,19 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +gzip-size@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -7153,6 +10063,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -7177,6 +10092,11 @@ has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -7227,11 +10147,48 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hastscript@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" + integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + hasurl@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37" integrity sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ== +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + hermes-engine@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.5.1.tgz#601115e4b1e0a17d9aa91243b96277de4e926e09" @@ -7244,6 +10201,20 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" +highlight.js@~9.13.0: + version "9.13.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" + integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoist-non-react-statics@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" @@ -7289,6 +10260,11 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" +html-entities@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" @@ -7299,12 +10275,35 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= - -htmlparser2@^3.9.1, htmlparser2@^3.9.2: +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + camel-case "^4.1.1" + clean-css "^4.2.3" + commander "^4.1.1" + he "^1.2.0" + param-case "^3.0.3" + relateurl "^0.2.7" + terser "^4.6.3" + +html-webpack-plugin@^4.0.0-beta.2: + version "4.5.2" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" + integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== + dependencies: + "@types/html-minifier-terser" "^5.0.0" + "@types/tapable" "^1.0.5" + "@types/webpack" "^4.41.8" + html-minifier-terser "^5.0.1" + loader-utils "^1.2.3" + lodash "^4.17.20" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.9.1: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= @@ -7316,6 +10315,27 @@ htmlparser2@^3.9.1, htmlparser2@^3.9.2: inherits "^2.0.1" readable-stream "^2.0.2" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -7326,6 +10346,22 @@ http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-parser-js@>=0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" + integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -7343,6 +10379,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" @@ -7420,11 +10461,23 @@ iconv-lite@^0.4.17: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== -ieee754@^1.1.13: +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.13, ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -7437,10 +10490,6 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== -ignore@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" - image-q@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" @@ -7461,6 +10510,11 @@ immer-peasy@3.1.3: resolved "https://registry.yarnpkg.com/immer-peasy/-/immer-peasy-3.1.3.tgz#d0ea8d388f47ec6b15ab2ca19ffb9f0bf4310110" integrity sha512-WzoZ96A93jOmcDOLNChMWAqy+ZU8vEYQx2DcKjgo7P5SToiJs+GL+5yQbWzH8X02Lhvv6xrGgVNa1xbki66Eow== +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + immutable@^4.0.0-rc.12: version "4.0.0-rc.12" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" @@ -7471,6 +10525,13 @@ immutable@~3.7.6: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + import-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" @@ -7501,6 +10562,13 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + import-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -7508,10 +10576,6 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -7525,7 +10589,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.0.0, indent-string@^3.2.0: +indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -7535,10 +10599,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= +infer-owner@^1.0.3, infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" @@ -7548,21 +10612,21 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.4, inherits@~2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= -ini@^1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -7575,6 +10639,25 @@ inline-style-prefixer@^6.0.0: dependencies: css-in-js-utils "^2.0.0" +inquirer@6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -7633,23 +10716,51 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= -invariant@2.2.4, invariant@^2.2.4: +interpret@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +invariant@2.2.4, invariant@^2.2.3, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -7665,6 +10776,11 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -7684,11 +10800,6 @@ is-alphabetical@^1.0.0: resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" integrity sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg= -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= - is-alphanumerical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" @@ -7697,6 +10808,13 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" +is-arguments@^1.0.4, is-arguments@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" + integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + dependencies: + call-bind "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -7707,27 +10825,51 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= -is-buffer@^1.1.4, is-buffer@^1.1.5: +is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== + dependencies: + call-bind "^1.0.2" + +is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= - dependencies: - builtin-modules "^1.0.0" - is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" +is-callable@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -7789,6 +10931,19 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-docker@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-dom@^1.0.9: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" + integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== + dependencies: + is-object "^1.0.1" + is-window "^1.0.2" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -7801,6 +10956,11 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -7833,6 +10993,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== +is-glob@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -7847,6 +11014,13 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" @@ -7857,10 +11031,25 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== +is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -7873,7 +11062,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.0, is-obj@^1.0.1: +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -7890,25 +11079,6 @@ is-odd@^1.0.0: dependencies: is-number "^3.0.0" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" - integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= - dependencies: - path-is-inside "^1.0.1" - is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -7940,6 +11110,14 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -7950,6 +11128,11 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + is-scoped@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" @@ -7957,6 +11140,11 @@ is-scoped@^1.0.0: dependencies: scoped-regex "^1.0.0" +is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -7971,16 +11159,16 @@ is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== + is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ== - is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -7988,6 +11176,13 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -8003,21 +11198,16 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-whitespace-character@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" - integrity sha1-muAXbzKCtlRXoZks2whPil+DPjs= +is-window@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" + integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== -is-word-character@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" - integrity sha1-WgP6HqkazopusMfNdw64bWXIvvs= - is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -8028,11 +11218,16 @@ is-wsl@^2.1.1: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isbinaryfile@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -8141,6 +11336,19 @@ iterall@^1.1.3, iterall@^1.2.2: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== +iterate-iterator@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" + integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== + +iterate-value@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" + integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== + dependencies: + es-get-iterator "^1.0.2" + iterate-iterator "^1.0.1" + java-properties@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" @@ -8601,13 +11809,6 @@ jest-snapshot@test: natural-compare "^1.4.0" pretty-format "21.3.0-beta.15" -jest-styled-components@7.0.0-2: - version "7.0.0-2" - resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.0-2.tgz#c827ab84a3e69c03579b32963f9e55f0b72f75a4" - integrity sha512-5Rtv9C1qaqamc1RNwg0IquGS+CGSVXbySVOtC3vs4XjcfI+RWTb+5V1lqIU+Qj4dAyk/3x+seiLvnJ+X80n8Gw== - dependencies: - css "^2.2.4" - jest-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" @@ -8734,6 +11935,14 @@ jest-worker@^25.2.6: merge-stream "^2.0.0" supports-color "^7.0.0" +jest-worker@^25.4.0: + version "25.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" + integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + jest@25.2.7: version "25.2.7" resolved "https://registry.yarnpkg.com/jest/-/jest-25.2.7.tgz#3929a5f35cdd496f7756876a206b99a94e1e09ae" @@ -8784,14 +11993,6 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.10.0: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -8860,7 +12061,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -8886,6 +12087,11 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + json5@2.1.0, json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -8898,6 +12104,20 @@ json5@^0.5.0: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" @@ -9043,10 +12263,6 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -known-css-properties@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.9.0.tgz#28f8a7134cfa3b0aa08b1e5edf64a57f64fc23af" - ky-universal@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" @@ -9060,12 +12276,16 @@ ky@^0.12.0: resolved "https://registry.yarnpkg.com/ky/-/ky-0.12.0.tgz#c05be95e6745ba422a6d2cc8ae964164962279f9" integrity sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ== -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= +lazy-universal-dotenv@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" + integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== dependencies: - invert-kv "^1.0.0" + "@babel/runtime" "^7.5.0" + app-root-dir "^1.0.2" + core-js "^3.0.4" + dotenv "^8.0.0" + dotenv-expand "^5.1.0" lcid@^2.0.0: version "2.0.0" @@ -9074,18 +12294,6 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" -leprechaun@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/leprechaun/-/leprechaun-0.0.2.tgz#8b96514a9e634c53fbe59a8094f3378c8fb2084d" - integrity sha1-i5ZRSp5jTFP75ZqAlPM3jI+yCE0= - dependencies: - log-symbols "^1.0.2" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -9183,6 +12391,20 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -9192,6 +12414,24 @@ loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" +loader-utils@^1.2.3, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + localforage@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" @@ -9262,6 +12502,11 @@ lodash.compact@^3.0.1: resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -9365,7 +12610,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0, lodash.merge@^4.6.1: +lodash.merge@^4.4.0: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -9395,11 +12640,6 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= - lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -9445,7 +12685,7 @@ lodash@3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15: +lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -9460,20 +12700,6 @@ lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= - dependencies: - chalk "^1.0.0" - -log-symbols@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" - integrity sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ== - dependencies: - chalk "^2.0.1" - log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -9515,11 +12741,6 @@ lolex@^5.0.0: dependencies: "@sinonjs/commons" "^1.7.0" -longest-streak@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" - integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA== - loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -9534,19 +12755,26 @@ loose-envify@^1.1.0: dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" + tslib "^2.0.3" lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= +lowlight@~1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" + integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== + dependencies: + fault "^1.0.2" + highlight.js "~9.13.0" + lru-cache@^2.5.0: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" @@ -9560,6 +12788,13 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -9591,6 +12826,14 @@ make-dir@^1.1.0: dependencies: pify "^3.0.0" +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" @@ -9598,6 +12841,13 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" +make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + make-error@^1.1.1: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" @@ -9622,16 +12872,6 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" @@ -9644,28 +12884,22 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-escapes@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" - integrity sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg= - -markdown-table@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" - integrity sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw= - -mathml-tag-names@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578" - integrity sha1-jUEmgWi/htEQK5gQnijlMeejRXg= +markdown-to-jsx@^6.11.4: + version "6.11.4" + resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" + integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== + dependencies: + prop-types "^15.6.2" + unquote "^1.1.0" -mdast-util-compact@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" - integrity sha1-zbX4TitqLTEU3zO9BdnLMuPECDo= +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== dependencies: - unist-util-modify-children "^1.0.0" - unist-util-visit "^1.1.0" + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" mdn-data@2.0.14: version "2.0.14" @@ -9682,6 +12916,11 @@ meant@^1.0.1: resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + mem-fs-editor@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-5.1.0.tgz#51972241640be8567680a04f7adaffe5fc603667" @@ -9734,7 +12973,7 @@ memoizerific@^1.11.3: dependencies: map-or-similar "^1.5.0" -memory-fs@^0.4.0: +memory-fs@^0.4.0, memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -9742,19 +12981,18 @@ memory-fs@^0.4.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= merge-stream@^1.0.1: version "1.0.1" @@ -9772,6 +13010,11 @@ merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + metro-babel-register@0.58.0: version "0.58.0" resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.58.0.tgz#5c44786d49a044048df56cf476a2263491d4f53a" @@ -10139,6 +13382,11 @@ metro@0.58.0, metro@^0.58.0: xpipe "^1.0.5" yargs "^14.2.0" +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + micromatch@^3.0.3: version "3.1.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.4.tgz#bb812e741a41f982c854e42b421a7eac458796f4" @@ -10193,6 +13441,19 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.48.0: + version "1.48.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" + integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== + "mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -10240,12 +13501,19 @@ mime-types@~2.1.19: dependencies: mime-db "~1.37.0" +mime-types@~2.1.24: + version "2.1.31" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" + integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== + dependencies: + mime-db "1.48.0" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@^1.3.4: +mime@1.6.0, mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -10255,6 +13523,11 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== +mime@^2.4.4: + version "2.5.2" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -10277,31 +13550,28 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= - minimist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" @@ -10317,6 +13587,27 @@ minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -10325,6 +13616,13 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" +minipass@^3.0.0, minipass@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" + integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== + dependencies: + yallist "^4.0.0" + minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -10332,6 +13630,22 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -10352,7 +13666,7 @@ mkdirp@^0.5.0: dependencies: minimist "0.0.8" -mkdirp@^0.5.1, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -10376,11 +13690,28 @@ mout@^1.0.0: resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d" integrity sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA== +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -10406,6 +13737,11 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -10469,16 +13805,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -nconf@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/nconf/-/nconf-0.10.0.tgz#da1285ee95d0a922ca6cee75adcf861f48205ad2" - integrity sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q== - dependencies: - async "^1.4.0" - ini "^1.3.0" - secure-keys "^1.0.0" - yargs "^3.19.0" - nearley@^2.7.10: version "2.11.0" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" @@ -10502,11 +13828,29 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" @@ -10535,6 +13879,35 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -10567,11 +13940,10 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.4.tgz#2d585de8c6c81d00017e063e7810a63889aa6756" - dependencies: - semver "^5.3.0" +node-releases@^1.1.29, node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== node-stream-zip@^1.9.1: version "1.11.3" @@ -10604,16 +13976,6 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^2.3.4: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" - integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== - dependencies: - hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -10621,7 +13983,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -10631,11 +13993,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -10663,7 +14020,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.2: +npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -10680,6 +14037,13 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" @@ -10736,6 +14100,11 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.10.3, object-inspect@^1.9.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + object-inspect@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -10756,6 +14125,11 @@ object-keys@^1.0.12: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -10773,6 +14147,16 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" @@ -10803,6 +14187,25 @@ object.fromentries@^2.0.0: function-bind "^1.1.1" has "^1.0.1" +"object.fromentries@^2.0.0 || ^1.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -10880,13 +14283,21 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^6.2.0: +open@^6.2.0, open@^6.3.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== dependencies: is-wsl "^1.1.0" +open@^7.0.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + opencollective-postinstall@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" @@ -10943,18 +14354,23 @@ ora@^5.4.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" +original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -11027,7 +14443,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.1.0: +p-limit@^2.0.0, p-limit@^2.1.0, p-limit@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -11062,6 +14478,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -11086,11 +14509,28 @@ p-try@^2.0.0, p-try@^2.1.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.5: +pako@^1.0.5, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -11098,6 +14538,17 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-author@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" @@ -11128,21 +14579,10 @@ parse-diff@^0.7.0: resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== -parse-entities@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" - integrity sha1-gRLYhHExnyerrk1klksSL+ThuJA= - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-entities@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" +parse-entities@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -11215,6 +14655,19 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -11238,6 +14691,11 @@ patch-package@6.2.1: slash "^2.0.0" tmp "^0.0.33" +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -11258,11 +14716,6 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -11278,6 +14731,11 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -11290,6 +14748,17 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -11310,12 +14779,17 @@ picomatch@^2.0.4, picomatch@^2.0.5: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + picomatch@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== -pify@^2.0.0, pify@^2.3.0: +pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -11325,7 +14799,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.0, pify@^4.0.1: +pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -11382,13 +14856,27 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^4.2.0: +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" +pkg-up@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -11426,110 +14914,105 @@ pngjs@^3.0.0, pngjs@^3.3.3: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== +pnp-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" + integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== + dependencies: + ts-pnp "^1.1.2" + +polished@^3.3.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/polished/-/polished-3.7.2.tgz#ec5ddc17a7d322a574d5e10ddd2a6f01d3e767d1" + integrity sha512-pQKtpZGmsZrW8UUpQMAnR7s3ppHeMQVNyMDKtUyKwuvDmklzcEyM5Kllb3JyE/sE/x7arDmyd35i+4vp99H6sQ== + dependencies: + "@babel/runtime" "^7.12.5" + +popper.js@^1.14.4, popper.js@^1.14.7: + version "1.16.1" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" + integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-html@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" - dependencies: - htmlparser2 "^3.9.2" - -postcss-jsx@^0.35.0: - version "0.35.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" +postcss-flexbugs-fixes@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" + integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== dependencies: - "@babel/core" "^7.1.2" - optionalDependencies: - postcss-styled ">=0.34.0" + postcss "^7.0.26" -postcss-less@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" +postcss-load-config@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== dependencies: - postcss "^7.0.3" + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" -postcss-markdown@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== dependencies: - remark "^9.0.0" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" -postcss-reporter@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== dependencies: - chalk "^2.0.1" - lodash "^4.17.4" - log-symbols "^2.0.0" - postcss "^7.0.2" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + postcss "^7.0.5" -postcss-safe-parser@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" +postcss-modules-local-by-default@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" + integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== dependencies: - postcss "^7.0.0" + icss-utils "^4.1.1" + postcss "^7.0.32" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== dependencies: - postcss "^7.0.0" + icss-utils "^4.0.0" + postcss "^7.0.6" -postcss-selector-parser@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" - integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.6" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" + integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== dependencies: - dot-prop "^4.1.1" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-styled@>=0.34.0, postcss-styled@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" - -postcss-syntax@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" + cssesc "^3.0.0" + util-deprecate "^1.0.2" postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= -postcss-value-parser@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - -postcss@^6.0.14: - version "6.0.14" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" - integrity sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog== - dependencies: - chalk "^2.3.0" - source-map "^0.6.1" - supports-color "^4.4.0" +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== postcss@^7.0.0: version "7.0.14" @@ -11540,7 +15023,16 @@ postcss@^7.0.0: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5: +postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.6: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +postcss@^7.0.5: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" dependencies: @@ -11563,6 +15055,11 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= +prettier@^2.0.5: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== + prettier@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.0.tgz#8a03c7777883b29b37fb2c4348c66a78e980418b" @@ -11573,6 +15070,14 @@ pretty-bytes@^5.1.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.2.0.tgz#96c92c6e95a0b35059253fb33c03e260d40f5a1f" integrity sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w== +pretty-error@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" + integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== + dependencies: + lodash "^4.17.20" + renderkid "^2.0.4" + pretty-format@21.3.0-beta.15: version "21.3.0-beta.15" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.3.0-beta.15.tgz#702708a64be53619b2c10138dc5a594056fd1569" @@ -11629,6 +15134,11 @@ pretty-format@^26.0.1, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" +pretty-hrtime@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= + prettyjson@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289" @@ -11637,6 +15147,18 @@ prettyjson@^1.2.1: colors "^1.1.2" minimist "^1.2.0" +prismjs@^1.8.4: + version "1.24.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" + integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== + +prismjs@~1.17.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" + integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== + optionalDependencies: + clipboard "^2.0.0" + private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -11657,11 +15179,37 @@ progress@^2.0.1, progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + promise-polyfill@^8.1.3: version "8.2.0" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" integrity sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g== +promise.allsettled@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" + integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== + dependencies: + array.prototype.map "^1.0.3" + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.0.2" + iterate-value "^1.0.2" + +promise.prototype.finally@^3.1.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" + integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.0" + function-bind "^1.1.1" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -11693,7 +15241,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -11707,6 +15255,21 @@ property-expr@^2.0.2: resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== +property-information@^5.0.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -11727,6 +15290,18 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + pull-lock@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pull-lock/-/pull-lock-1.0.0.tgz#6a0ab2719a3b7e6f49838b52168a30b8fdd84188" @@ -11736,6 +15311,14 @@ pull-lock@1.0.0: debug "^4.1.1" execa "^1.0.0" +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -11744,11 +15327,25 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -11772,6 +15369,18 @@ puppeteer@^7.1.0: unbzip2-stream "^1.3.3" ws "^7.2.3" +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@^6.6.0: + version "6.10.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" + integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + dependencies: + side-channel "^1.0.4" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -11803,15 +15412,25 @@ query-string@^6.8.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== quickselect@^1.0.1: version "1.1.1" @@ -11852,11 +15471,49 @@ randexp@^0.4.2: drange "^1.0.0" ret "^0.2.0" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-loader@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" + integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== + dependencies: + loader-utils "^1.1.0" + schema-utils "^2.0.1" + rbush@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" @@ -11874,6 +15531,44 @@ rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-clientside-effect@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.5.tgz#e2c4dc3c9ee109f642fac4f5b6e9bf5bcd2219a3" + integrity sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA== + dependencies: + "@babel/runtime" "^7.12.13" + +react-dev-utils@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" + integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== + dependencies: + "@babel/code-frame" "7.5.5" + address "1.1.2" + browserslist "4.7.0" + chalk "2.4.2" + cross-spawn "6.0.5" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.6.1" + find-up "3.0.0" + fork-ts-checker-webpack-plugin "1.5.0" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "6.5.0" + is-root "2.1.0" + loader-utils "1.2.3" + open "^6.3.0" + pkg-up "2.0.0" + react-error-overlay "^6.0.3" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + sockjs-client "1.4.0" + strip-ansi "5.2.0" + text-table "0.2.0" + react-devtools-core@^4.6.0: version "4.8.2" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.8.2.tgz#4465f2e8de7795564aa20f28b2f3a9737586db23" @@ -11892,11 +15587,78 @@ react-dom@16.8.3: prop-types "^15.6.2" scheduler "^0.13.3" +react-dom@^16.8.3: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" + integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.19.1" + +react-draggable@^4.0.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" + integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== + dependencies: + classnames "^2.2.5" + prop-types "^15.6.0" + +react-error-overlay@^6.0.3: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + react-fast-compare@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== +react-fast-compare@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" + integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== + +react-focus-lock@^2.1.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.5.2.tgz#f1e4db5e25cd8789351f2bd5ebe91e9dcb9c2922" + integrity sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ== + dependencies: + "@babel/runtime" "^7.0.0" + focus-lock "^0.9.1" + prop-types "^15.6.2" + react-clientside-effect "^1.2.5" + use-callback-ref "^1.2.5" + use-sidecar "^1.0.5" + +react-helmet-async@^1.0.2: + version "1.0.9" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.9.tgz#5b9ed2059de6b4aab47f769532f9fbcbce16c5ca" + integrity sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-hotkeys@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0.tgz#a7719c7340cbba888b0e9184f806a9ec0ac2c53f" + integrity sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q== + dependencies: + prop-types "^15.6.1" + +react-inspector@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-4.0.1.tgz#0f888f78ff7daccbc7be5d452b20c96dc6d5fbb8" + integrity sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg== + dependencies: + "@babel/runtime" "^7.6.3" + is-dom "^1.0.9" + prop-types "^15.6.1" + react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -11917,10 +15679,15 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-native-appboy-sdk@^1.29.1: - version "1.29.1" - resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.29.1.tgz#ff38f7e02e3928fa804e55c6ec5034384cf63dd3" - integrity sha512-FwnbOqxWwivJyXL/XcWpfXIqb72/d0DVgpRDTSDJk5shze24EujvoYV9m7HNHl8rvKYLEu9QQ5Xzn7X34Fgsag== +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-native-appboy-sdk@^1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.30.0.tgz#ccebdcb297c887d30bd7fb75afab88022e243884" + integrity sha512-IP6QgYZsgGkk7EyTuEzIgr/b/GyHWP2YSmcOcB06S6PTF6tUPyHobHDT1+MyC85UZpwVHkdXJ9k6GvMxHiJo3w== react-native-bootsplash@^3.2.0: version "3.2.0" @@ -12051,6 +15818,17 @@ react-native-share@5.1.0: resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-5.1.0.tgz#6431f0aa6952e13fc74afbc756c2b37f06cb7feb" integrity sha512-QGMWOPlwboAGd/5uUh2l0jXIDhZ2q8J4CIa063NDE7ihsZRQlF/w6kd90i3bi6GF6aedvhynqZPmezwqjiyU7g== +react-native-storybook-loader@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-native-storybook-loader/-/react-native-storybook-loader-2.0.4.tgz#37bf37193e69b42a0b2aa0daeed4de8dbfeeae28" + integrity sha512-MmBdO7ugBkHEZa4F1qXFgjB7ejURmKGTZ/3o6zXPgUpaoMdh8tT5LLliJH9uOFzh7oY13TfTMZ9HyCa3E/dqLg== + dependencies: + colors "^1.1.2" + find-up "^4.1.0" + glob "^7.1.1" + prettier "^2.0.5" + yargs "^15.4.1" + react-native-svg@9.13.3: version "9.13.3" resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-9.13.3.tgz#6414b337d55af169ac2487ab70f3108404434446" @@ -12059,6 +15837,11 @@ react-native-svg@9.13.3: css-select "^2.0.2" css-tree "^1.0.0-alpha.37" +react-native-swipe-gestures@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz#a172cb0f3e7478ccd681fd36b8bfbcdd098bde7c" + integrity sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw== + react-native-view-shot@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825" @@ -12105,6 +15888,27 @@ react-native@0.63.3: use-subscription "^1.0.0" whatwg-fetch "^3.0.0" +react-popper-tooltip@^2.8.3: + version "2.11.1" + resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" + integrity sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ== + dependencies: + "@babel/runtime" "^7.9.2" + react-popper "^1.3.7" + +react-popper@^1.3.7: + version "1.3.11" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" + integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== + dependencies: + "@babel/runtime" "^7.1.2" + "@hypnosphi/create-react-context" "^0.3.1" + deep-equal "^1.1.1" + popper.js "^1.14.4" + prop-types "^15.6.1" + typed-styles "^0.0.7" + warning "^4.0.2" + react-refresh@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334" @@ -12128,6 +15932,16 @@ react-relay@^10.0.1: nullthrows "^1.1.1" relay-runtime "10.0.1" +react-sizeme@^2.6.7: + version "2.6.12" + resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e" + integrity sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw== + dependencies: + element-resize-detector "^1.2.1" + invariant "^2.2.4" + shallowequal "^1.1.0" + throttle-debounce "^2.1.0" + react-spring@8.0.23: version "8.0.23" resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-8.0.23.tgz#2a0ddaeb0816ea9e21898d04d3b8da7d1a3daa14" @@ -12136,6 +15950,17 @@ react-spring@8.0.23: "@babel/runtime" "^7.3.1" prop-types "^15.5.8" +react-syntax-highlighter@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz#4e3f376e752b20d2f54e4c55652fd663149e4029" + integrity sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww== + dependencies: + "@babel/runtime" "^7.3.1" + highlight.js "~9.13.0" + lowlight "~1.11.0" + prismjs "^1.8.4" + refractor "^2.4.1" + react-test-renderer@16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" @@ -12156,6 +15981,14 @@ react-test-renderer@^16.0.0-0: react-is "^16.8.4" scheduler "^0.13.4" +react-textarea-autosize@^7.1.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" + integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== + dependencies: + "@babel/runtime" "^7.1.2" + prop-types "^15.6.0" + react-timer-mixin@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" @@ -12204,6 +16037,15 @@ react@16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" +react@^16.6.0, react@^16.8.3: + version "16.14.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" + integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + read-chunk@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca" @@ -12219,14 +16061,6 @@ read-env@^1.3.0: dependencies: camelcase "5.0.0" -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -12244,6 +16078,19 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + "readable-stream@2 || 3": version "3.3.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" @@ -12266,7 +16113,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0: +readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -12275,6 +16122,22 @@ readable-stream@^3.1.1, readable-stream@^3.4.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + readline-sync@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" @@ -12297,13 +16160,12 @@ recursive-readdir-sync@1.0.6: resolved "https://registry.yarnpkg.com/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz#1dbf6d32f3c5bb8d3cde97a6c588d547a9e13d56" integrity sha1-Hb9tMvPFu4083pemxYjVR6nhPVY= -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" + minimatch "3.0.4" reduce-flatten@^2.0.0: version "2.0.0" @@ -12343,6 +16205,15 @@ reflect.ownkeys@^0.2.0: resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= +refractor@^2.4.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" + integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== + dependencies: + hastscript "^5.0.0" + parse-entities "^1.1.2" + prismjs "~1.17.0" + regenerate-unicode-properties@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" @@ -12350,6 +16221,13 @@ regenerate-unicode-properties@^8.0.2: dependencies: regenerate "^1.4.0" +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -12381,6 +16259,13 @@ regenerator-transform@^0.13.3: dependencies: private "^0.1.6" +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -12389,6 +16274,14 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + regexpu-core@^4.1.3: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" @@ -12401,6 +16294,18 @@ regexpu-core@^4.1.3: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + registry-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" @@ -12413,6 +16318,11 @@ regjsgen@^0.5.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -12420,6 +16330,18 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + relay-compiler-language-typescript@13.0.3: version "13.0.3" resolved "https://registry.yarnpkg.com/relay-compiler-language-typescript/-/relay-compiler-language-typescript-13.0.3.tgz#81c0ef35910514c7ae1a3252e0d7a802cdcdc76c" @@ -12497,53 +16419,6 @@ relay-test-utils@^10.0.1: fbjs "^1.0.0" relay-runtime "10.0.1" -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - remove-markdown@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.1.0.tgz#cf8b66e9e6fcb4acc9721048adeee7a357698ba9" @@ -12559,12 +16434,23 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= +renderkid@^2.0.4: + version "2.0.7" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" + integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^3.0.1" + repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.5.4, repeat-string@^1.6.1: +repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -12574,7 +16460,7 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= -replace-ext@1.0.0, replace-ext@^1.0.0: +replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= @@ -12641,6 +16527,11 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -12692,7 +16583,7 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: dependencies: path-parse "^1.0.6" -resolve@^1.12.0: +resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -12745,7 +16636,7 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.6.1: +rimraf@^2.6.1, rimraf@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -12764,6 +16655,14 @@ rimraf@~2.2.6: resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + rn-fetch-blob@0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.12.0.tgz#ec610d2f9b3f1065556b58ab9c106eeb256f3cba" @@ -12799,11 +16698,18 @@ run-async@^2.0.0: dependencies: is-promise "^2.1.0" -run-async@^2.2.0: +run-async@^2.2.0, run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -12828,7 +16734,7 @@ rxjs@^5.4.3: dependencies: symbol-observable "1.0.1" -rxjs@^6.4.0, rxjs@^6.6.7: +rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -12840,11 +16746,16 @@ safe-buffer@5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -12852,7 +16763,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -12908,6 +16819,24 @@ scheduler@^0.18.0: loose-envify "^1.1.0" object-assign "^4.1.1" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -12918,10 +16847,10 @@ screenfull@^5.1.0: resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8" integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA== -secure-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/secure-keys/-/secure-keys-1.0.0.tgz#f0c82d98a3b139a8776a8808050b824431087fca" - integrity sha1-8MgtmKOxOah3aogIBQuCRDEIf8o= +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= semver-compare@^1.0.0: version "1.0.0" @@ -12937,6 +16866,11 @@ semver-regex@^2.0.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -12947,7 +16881,7 @@ semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -12978,11 +16912,58 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +serve-favicon@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" + integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= + dependencies: + etag "~1.8.1" + fresh "0.5.2" + ms "2.1.1" + parseurl "~1.3.2" + safe-buffer "5.1.1" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + serve-static@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" @@ -13023,7 +17004,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -13033,6 +17014,29 @@ setprototypeof@1.0.3: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-equal@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" + integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -13067,6 +17071,11 @@ shell-quote@1.6.1, shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + shelljs@^0.8.0: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" @@ -13076,11 +17085,29 @@ shelljs@^0.8.0: interpret "^1.0.0" rechoir "^0.6.2" +shelljs@^0.8.3: + version "0.8.4" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" + integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -13123,6 +17150,26 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +simplebar-react@^1.0.0-alpha.6: + version "1.2.3" + resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" + integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== + dependencies: + prop-types "^15.6.1" + simplebar "^4.2.3" + +simplebar@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" + integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== + dependencies: + can-use-dom "^0.1.0" + core-js "^3.0.1" + lodash.debounce "^4.0.8" + lodash.memoize "^4.1.2" + lodash.throttle "^4.1.1" + resize-observer-polyfill "^1.5.1" + sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" @@ -13143,21 +17190,10 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -slice-ansi@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" - integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== - dependencies: - is-fullwidth-code-point "^2.0.0" - slice-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" slice-ansi@^3.0.0: version "3.0.0" @@ -13222,7 +17258,24 @@ snapshot-diff@0.2.2: pretty-format "^20.0.3" strip-ansi "^4.0.0" -source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== @@ -13255,6 +17308,14 @@ source-map-support@^0.5.9: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.12: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -13265,12 +17326,12 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -13285,6 +17346,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -13311,10 +17377,6 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -13347,6 +17409,26 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +ssri@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== + dependencies: + figgy-pudding "^3.5.1" + +ssri@^7.0.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" + integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== + dependencies: + figgy-pudding "^3.5.1" + minipass "^3.1.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + stack-generator@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" @@ -13395,11 +17477,6 @@ stacktrace-parser@^0.1.3: dependencies: type-fest "^0.7.1" -state-toggle@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" - integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -13408,7 +17485,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2": +"statuses@>= 1.3.1 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -13428,11 +17505,48 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +store2@^2.7.1: + version "2.12.0" + resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" + integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -13495,6 +17609,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -13504,6 +17627,38 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +"string.prototype.matchall@^4.0.0 || ^3.0.1": + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.padend@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" + integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.padstart@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz#f9b9ce66bedd7c06acb40ece6e34c6046e1a019d" + integrity sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -13513,6 +17668,29 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + +string_decoder@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -13527,16 +17705,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -13546,6 +17714,13 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" +strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -13562,17 +17737,10 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: strip-ansi@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - ansi-regex "^4.1.0" + ansi-regex "^3.0.0" strip-ansi@^6.0.0: version "6.0.0" @@ -13616,25 +17784,23 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= +style-loader@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== + dependencies: + loader-utils "^2.0.0" + schema-utils "^2.7.0" -styled-components@4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.0.tgz#811fbbec4d64c7189f6c7482b9eb6fefa7fefef7" - integrity sha512-L/LzkL3ZbBhqIVHdR7DbYujy4tqvTNRfc+4JWDCYyhTatI+8CRRQUmdaR0+ARl03DWsfKLhjewll5uNLrqrl4A== +styled-components@4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.1.tgz#494e35525b5557f7ce7b3c0040fcb0a46af40886" + integrity sha512-zBSMOJW1zfQ1rASGHJ5dHXIkn3VoOGLtQAYhkd4Ib7e+eI//uwMJWsI65JRe3aGrN2Xx8IT9jxxnVSXt9LaLCw== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/is-prop-valid" "^0.7.3" @@ -13667,86 +17833,6 @@ styled-system@5.1.5: "@styled-system/variant" "^5.1.5" object-assign "^4.1.1" -stylelint-config-recommended@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" - integrity sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA== - -stylelint-config-standard@18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06" - integrity sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA== - dependencies: - stylelint-config-recommended "^2.1.0" - -stylelint-config-styled-components@0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" - integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q== - -stylelint-processor-styled-components@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.5.1.tgz#c3ab94eb0ea234750003ab648f2d3a17f79e1c61" - integrity sha512-gDsr2PCwc82lN2RkK2fq108lEIGFqnX0ZB+KVhHn4i+Lisb9W0f9gHChQK8peMo9/DVksb6QYNTLOwCb9OwcKg== - dependencies: - "@babel/parser" "^7.0.0" - "@babel/traverse" "^7.0.0" - postcss "^6.0.14" - -stylelint@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.8.0.tgz#bfdade6360d82afe820d6b15251b01acf8ffd04d" - integrity sha512-qYYgP9UnZ6S4uaXrfEGPIMeNv21gP4t3E7BtnYfJIiHKvz7AbrCP0vj1wPgD6OFyxLT5txQxtoznfSkm2vsUkQ== - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^2.0.0" - get-stdin "^6.0.0" - global-modules "^1.0.0" - globby "^8.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.9.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.0" - postcss-html "^0.34.0" - postcss-jsx "^0.35.0" - postcss-less "^3.0.1" - postcss-markdown "^0.34.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-styled "^0.34.0" - postcss-syntax "^0.34.0" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^2.1.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -13767,12 +17853,6 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - dependencies: - postcss "^7.0.2" - supercluster@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.1.tgz#4c0177d96daa195d58a5bad9f55dbf12fb727a4c" @@ -13790,13 +17870,6 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" - integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= - dependencies: - has-flag "^2.0.0" - supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -13834,11 +17907,6 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" @@ -13854,6 +17922,16 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= +symbol.prototype.description@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz#c30edd3fe8c040d941cf7dc15842be15adf66855" + integrity sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww== + dependencies: + call-bind "^1.0.2" + es-abstract "^1.18.0-next.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.2" + synchronous-promise@^2.0.10: version "2.0.13" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702" @@ -13869,20 +17947,16 @@ table-layout@^1.0.0: typical "^5.0.0" wordwrapjs "^4.0.0" -table@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" - dependencies: - ajv "^6.5.3" - lodash "^4.17.10" - slice-ansi "1.0.0" - string-width "^2.1.1" - tapable@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tapable@^2.0.0-beta.2: version "2.0.0-beta.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0-beta.8.tgz#0a8d42f6895d43d5a895de15d9a9e3e425f72a0a" @@ -13922,6 +17996,20 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" +telejson@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" + integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== + dependencies: + "@types/is-function" "^1.0.0" + global "^4.4.0" + is-function "^1.0.1" + is-regex "^1.0.4" + is-symbol "^1.0.3" + isobject "^4.0.0" + lodash "^4.17.15" + memoizerific "^1.11.3" + temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -13930,6 +18018,11 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -13938,6 +18031,45 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" +terser-webpack-plugin@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" + integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser-webpack-plugin@^2.1.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" + integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== + dependencies: + cacache "^13.0.1" + find-cache-dir "^3.3.1" + jest-worker "^25.4.0" + p-limit "^2.3.0" + schema-utils "^2.6.6" + serialize-javascript "^4.0.0" + source-map "^0.6.1" + terser "^4.6.12" + webpack-sources "^1.4.3" + +terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -13947,7 +18079,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: +text-table@0.2.0, text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -13967,6 +18099,11 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throttle-debounce@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" + integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== + throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" @@ -14002,11 +18139,23 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + timm@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -14040,6 +18189,11 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -14082,6 +18236,11 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -14111,30 +18270,15 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -trim-trailing-lines@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" - integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trough@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" - integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== +ts-dedent@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.2.0.tgz#6aa2229d837159bb6d635b6b233002423b91e0b0" + integrity sha512-6zSJp23uQI+Txyz5LlXMXAHpUhY4Hi0oluXny0OgIR7g/Cromq4vDBnhtbBdyIV34g0pgwxUvnvg+jLJe4c1NA== ts-easing@^0.2.0: version "0.2.0" @@ -14152,6 +18296,11 @@ ts-node@8.4.1: source-map-support "^0.5.6" yn "^3.0.0" +ts-pnp@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" + integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== + ts-toolbelt@^6.1.6: version "6.15.5" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" @@ -14177,6 +18326,11 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" + integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== + tslib@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -14218,6 +18372,11 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -14257,6 +18416,24 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-styles@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" + integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== + typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -14276,24 +18453,25 @@ typescript-memoize@^1.0.0-alpha.3: dependencies: core-js "2.4.1" -typescript-styled-plugin@0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.13.0.tgz#e5d3d1293b9b85cffd473f01a7f4917ad6035ee5" - integrity sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg== +typescript-styled-plugin@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.18.0.tgz#4e20e99bd7938f693ee37ad20682cc2401d06898" + integrity sha512-GopdOs3twyZkuLMU2ActiZQAtCgyibmwmQczULoe47qJ2URIaHSWxtUIDwuv6QhKPLBIrV6jSo/qp+184hlwLg== dependencies: - typescript-template-language-service-decorator "^2.0.0" - vscode-css-languageservice "^3.0.12" + typescript-template-language-service-decorator "^2.2.0" + vscode-css-languageservice "^5.1.1" vscode-emmet-helper "1.2.11" - vscode-languageserver-types "^3.13.0" + vscode-languageserver-types "^3.16.0" -typescript-template-language-service-decorator@^2.0.0: +typescript-template-language-service-decorator@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-2.2.0.tgz#4ee6d580f307fb9239978e69626f2775b8a59b2a" + integrity sha512-xiolqt1i7e22rpqMaprPgSFVgU64u3b9n6EJlAaUYE61jumipKAdI1+O5khPlWslpTUj80YzjUKjJ2jxT0D74w== -typescript@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" - integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== +typescript@4.3.5: + version "4.3.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" + integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== typical@^4.0.0: version "4.0.0" @@ -14328,6 +18506,16 @@ ultron@1.0.x: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -14341,13 +18529,10 @@ underscore@~1.4.4: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= -unherit@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" - integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== - dependencies: - inherits "^2.0.1" - xtend "^4.0.1" +unfetch@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -14367,23 +18552,16 @@ unicode-match-property-value-ecmascript@^1.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -14394,54 +18572,19 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -unist-util-find-all-after@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" - dependencies: - unist-util-is "^2.0.0" - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" - integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== - -unist-util-modify-children@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.3.tgz#d764a935f612dfb21b1bb92b0ea24321dc19a5f7" - integrity sha512-Aw3Us+NPrJGYWyLhcaqYzgxd/pryIanDNHVVvwdtTEEQ3Yfa/+sjnT2EeAAHbtTMAaYEdPW3XN6jxbzVWAo/BQ== - dependencies: - array-iterate "^1.0.0" - -unist-util-remove-position@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" - integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-visit-parents@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" - integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: - unist-util-is "^2.1.2" + unique-slug "^2.0.0" -unist-util-visit@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" - integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: - unist-util-visit-parents "^2.0.0" + imurmurhash "^0.1.4" universal-url@^2.0.0: version "2.0.0" @@ -14475,11 +18618,16 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@~1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unquote@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -14500,6 +18648,11 @@ untildify@^3.0.3: resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -14517,6 +18670,15 @@ url-join@^4.0.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== +url-loader@^2.0.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" + integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== + dependencies: + loader-utils "^1.2.3" + mime "^2.4.4" + schema-utils "^2.5.0" + url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -14524,6 +18686,14 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-parse@^1.4.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" + integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -14537,6 +18707,19 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-callback-ref@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5" + integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg== + +use-sidecar@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b" + integrity sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA== + dependencies: + detect-node-es "^1.1.0" + tslib "^1.9.3" + use-subscription@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" @@ -14563,11 +18746,38 @@ utif@^2.0.1: dependencies: pako "^1.0.5" -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +util.promisify@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -14613,28 +18823,6 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vfile-location@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" - integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - vinyl-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" @@ -14673,17 +18861,25 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -vscode-apollo-relay@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.0.tgz#cd427a49093c3c055ef0f0028bd46deb1e225fc0" - integrity sha512-NWOEEmB0s1PZgIntLlpHPuRA95TPvVJfw4bSePphr+rY0e+4XvuvVvxe+EE/9BirM8G2cGY1UM4yukWpP778Qg== +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +vscode-apollo-relay@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.1.tgz#6c98bef9a127c5bb80d10f6de35dd60ab851415e" + integrity sha512-+tEyseQVbjEqFR7wda9taij5bayVxE1x9XkgCAtBK2qqCq+V/5ohbEsrOdFRL0Ir3o9U+i+I2gz7y7Jn4dDiPA== -vscode-css-languageservice@^3.0.12: - version "3.0.12" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.12.tgz#fb4aac5ae3c5b761b1db1d7224b78ff824284dc3" +vscode-css-languageservice@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.4.tgz#07e4c63f1c3bb06e6f3f329c32b490d20a601bab" + integrity sha512-fIJZJMXbaBsK0ifBb2RmSiLtzwn6NrZnKn7O+0ziIjwAY+rPvSK9St2qqQXFU3reZVRAt/I4GBp40dC/THcUDA== dependencies: - vscode-languageserver-types "^3.13.0" - vscode-nls "^4.0.0" + vscode-languageserver-textdocument "^1.0.1" + vscode-languageserver-types "^3.16.0" + vscode-nls "^5.0.0" + vscode-uri "^3.0.2" vscode-emmet-helper@1.2.11: version "1.2.11" @@ -14693,13 +18889,29 @@ vscode-emmet-helper@1.2.11: jsonc-parser "^1.0.0" vscode-languageserver-types "^3.6.0-next.1" -vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.6.0-next.1: +vscode-languageserver-textdocument@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" + integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== + +vscode-languageserver-types@^3.16.0: + version "3.16.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" + integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== + +vscode-languageserver-types@^3.6.0-next.1: version "3.13.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4" -vscode-nls@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002" +vscode-nls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" + integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== + +vscode-uri@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" + integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== w3c-hr-time@^1.0.1: version "1.0.1" @@ -14729,6 +18941,31 @@ warn-once@^0.1.0: resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.0.tgz#4f58d89b84f968d0389176aa99e0cf0f14ffd4c8" integrity sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA== +warning@^4.0.2, warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.7.4: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -14741,6 +18978,93 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== +webpack-dev-middleware@^3.7.0: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-hot-middleware@^2.25.0: + version "2.25.0" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" + integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== + dependencies: + ansi-html "0.0.7" + html-entities "^1.2.0" + querystring "^0.2.0" + strip-ansi "^3.0.0" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-virtual-modules@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" + integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== + dependencies: + debug "^3.0.0" + +webpack@^4.33.0, webpack@^4.38.0: + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== + dependencies: + "@webassemblyjs/ast" "1.9.0" + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/wasm-edit" "1.9.0" + "@webassemblyjs/wasm-parser" "1.9.0" + acorn "^6.4.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.5.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.3" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.3" + watchpack "^1.7.4" + webpack-sources "^1.4.1" + +websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -14766,6 +19090,17 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -14810,10 +19145,12 @@ widest-line@^2.0.1: dependencies: string-width "^2.1.1" -window-size@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" - integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" windows-release@^3.1.0: version "3.2.0" @@ -14849,6 +19186,20 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.0.0" +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -14917,13 +19268,6 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= - dependencies: - mkdirp "^0.5.1" - ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -14937,16 +19281,16 @@ ws@^7, ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== +ws@^7.1.2: + version "7.5.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" + integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== + ws@^7.2.3: version "7.4.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - xcode@2.0.0, xcode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2" @@ -15020,16 +19364,11 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: +xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= -y18n@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - "y18n@^3.2.1 || ^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" @@ -15045,7 +19384,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -15055,35 +19394,17 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml-lint@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/yaml-lint/-/yaml-lint-1.2.4.tgz#0dec2d1ef4e5ec999bba1e34d618fc60498d1bc5" - integrity sha512-qpKE0szyKsE9TrlVPi+bxKxVAjl30QjNAOyOxy7noQdf/WCCYUlT4xiCRxMG48eyeBzMBtBN6PgGfaB0MJePNw== - dependencies: - glob "^7.1.2" - js-yaml "^3.10.0" - leprechaun "0.0.2" - lodash.merge "^4.6.1" - lodash.snakecase "^4.1.1" - nconf "^0.10.0" - -yaml@1.9.2, yaml@^1.7.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" - integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== - dependencies: - "@babel/runtime" "^7.9.2" - yaml@^1.10.0: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" +yaml@^1.7.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" + integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== dependencies: - camelcase "^4.1.0" + "@babel/runtime" "^7.9.2" yargs-parser@^11.1.1: version "11.1.1" @@ -15152,7 +19473,7 @@ yargs@^14.2.0: y18n "^4.0.0" yargs-parser "^15.0.0" -yargs@^15.1.0: +yargs@^15.1.0, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -15186,19 +19507,6 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" -yargs@^3.19.0: - version "3.32.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" - integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= - dependencies: - camelcase "^2.0.1" - cliui "^3.0.3" - decamelize "^1.1.1" - os-locale "^1.4.0" - string-width "^1.0.1" - window-size "^0.1.4" - y18n "^3.2.0" - yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -15286,3 +19594,8 @@ zen-observable-ts@^0.8.10: zen-observable@^0.8.0: version "0.8.11" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.11.tgz#d3415885eeeb42ee5abb9821c95bb518fcd6d199" + +zustand@^3.5.7: + version "3.5.7" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.7.tgz#add5e8d0ba031ce6e0ddf9cb76ef15306efb665f" + integrity sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g== From 051f130f6e30fda706110efe6f4d30e61ef331c7 Mon Sep 17 00:00:00 2001 From: George Kartalis Date: Thu, 29 Jul 2021 23:29:05 +0200 Subject: [PATCH 14/14] Revert "Merge branch 'master' into gkartalis/rn-testing-library" This reverts commit 420315693696059beb27e56e6cc9b53928dd5b37, reversing changes made to 4a6a7e443b90a5da2fb84cbbfd90e904c1fcbd8e. --- .circleci/config.yml | 12 +- .gitignore | 2 - .secrets.baseline | 103 - .stylelintrc | 21 + .vscode/settings.json | 2 + Artsy.xcodeproj/project.pbxproj | 44 +- Artsy/App/ARAnalyticsVisualizer.h | 7 + Artsy/App/ARAnalyticsVisualizer.m | 72 + Artsy/App/ARAppActivityContinuationDelegate.m | 8 +- Artsy/App/ARAppDelegate+Analytics.h | 1 + Artsy/App/ARAppDelegate+Analytics.m | 87 +- Artsy/App/ARAppDelegate+Emission.m | 12 +- Artsy/App/ARAppDelegate.h | 9 +- Artsy/App/ARAppDelegate.m | 78 +- Artsy/App/ARAppNotificationsDelegate.h | 3 +- Artsy/App/ARAppNotificationsDelegate.m | 51 +- Artsy/App/AROptions.h | 1 + Artsy/App/AROptions.m | 1 + Artsy/App/ARScreenPresenterModule.m | 51 +- Artsy/App/ARSegmentProvider.h | 9 + Artsy/App/ARSegmentProvider.m | 36 + Artsy/App/ARSentryAnalyticsProvider.h | 6 + Artsy/App/ARSentryAnalyticsProvider.m | 44 + Artsy/App_Resources/Artsy-Info.plist | 5 - .../Apple/UIImageView+AsyncImageLoading.h | 2 +- .../Apple/UIImageView+AsyncImageLoading.m | 28 +- Artsy/Networking/API_Modules/ARUserManager.h | 2 + Artsy/Networking/API_Modules/ARUserManager.m | 22 +- .../API_Modules/ArtsyAPI+Sailthru.h | 11 + .../API_Modules/ArtsyAPI+Sailthru.m | 35 + Artsy/Networking/API_Modules/ArtsyAPI+Sales.m | 1 + Artsy/Networking/ARAuthProviders.m | 4 +- Artsy/Networking/ARRouter.h | 1 + Artsy/Networking/ARRouter.m | 5 + Artsy/Networking/ArtsyAPI.m | 9 +- Artsy/Resources/Artsy-Bridging-Header.h | 1 + .../ARAugmentedFloorBasedVIRViewController.m | 11 +- .../VCs/ARAugmentedVIRSetupViewController.m | 4 +- .../Admin/ARAdminSettingsViewController.m | 13 + .../AuctionInformationViewController.swift | 6 +- .../RefinementOptionsViewController.swift | 4 +- .../Core/ARViewInRoomViewController.m | 4 +- ...veAuctionLotCollectionViewDataSource.swift | 5 +- .../AROnboardingViewController.m | 19 +- .../ARSignUpSplashViewController.m | 18 +- .../ARPersonalizeViewController.m | 29 +- .../View_Controllers/Util/ARFeedImageLoader.m | 2 +- .../Util/ARNavigationController.m | 1 + .../Util/Errors/ARNetworkErrorManager.m | 4 +- .../Util/Sharing/ARSharingController.m | 4 +- .../Analytics_Tests/ARAppAnalyticsSpec.m | 40 + .../ARAppActivityContinuationDelegateTests.m | 16 + .../ARAppNotificationsDelegateTests.m | 38 +- .../ARTestImageCachingFunctions.swift | 2 +- .../Stubs/ARStubbedAnalyticsProvider.h | 28 + .../Stubs/ARStubbedAnalyticsProvider.m | 73 + Artsy_Tests/Supporting_Files/ARTestHelper.m | 1 - CHANGELOG.legacy.yml => CHANGELOG.yml | 84 +- Gemfile.lock | 87 +- HACKS.md | 20 +- Podfile | 12 +- Podfile.lock | 82 +- app.json | 2 +- dangerfile.ts | 28 + data/schema.graphql | 44 +- docs/README.md | 1 - docs/deploy_to_app_store.md | 1 + docs/palette_v3_migration_guide.md | 75 - docs/pull_request_template.md | 2 +- docs/storybook.md | 42 - emission/Emission.podspec | 2 +- emission/Pod/Classes/Core/AREmission.h | 3 - emission/Pod/Classes/Core/AREmission.m | 19 - emission/Pod/Classes/Core/AREventsModule.m | 5 + .../ARNotificationsManager.h | 2 - .../ARNotificationsManager.m | 19 - .../AROpaqueImageView.m | 23 +- fastlane/Fastfile | 22 +- index.android.js | 26 +- index.ios.js | 23 +- index.tests.ios.js | 1 + jest.config.js | 2 - package.json | 66 +- ...segment+analytics-react-native+1.4.4.patch | 32 + ...+analytics-react-native-appboy+1.4.8.patch | 35 + patches/react-native-appboy-sdk+1.29.1.patch | 29 + ...react-native-push-notification+7.4.0.patch | 13 - scripts/set-storybook-environment.js | 23 - scripts/start_packager.sh | 4 - .../FairArticlesQuery.graphql.ts | 52 +- .../FairArticles_fair.graphql.ts | 12 +- .../FairEditorialTestsQuery.graphql.ts | 13 +- .../FairEditorial_fair.graphql.ts | 9 +- src/__generated__/FairQuery.graphql.ts | 15 +- src/__generated__/FairTestsQuery.graphql.ts | 15 +- src/__generated__/Fair_fair.graphql.ts | 9 +- .../SavedAddressesFormQuery.graphql.ts | 234 - .../SavedAddressesFormTestsQuery.graphql.ts | 234 - .../SavedAddressesForm_me.graphql.ts | 170 - .../SavedAddressesQuery.graphql.ts | 26 +- .../SavedAddressesRefetchQuery.graphql.ts | 26 +- .../SavedAddressesTestsQuery.graphql.ts | 26 +- .../SavedAddresses_me.graphql.ts | 22 +- .../SavedSearchButtonQuery.graphql.ts | 154 - .../SavedSearchButtonTestsQuery.graphql.ts | 177 - .../SavedSearchButton_me.graphql.ts | 62 - .../VanityURLEntityQuery.graphql.ts | 15 +- .../addNewAddressMutation.graphql.ts | 290 - ...ddressDeleteUserAddressMutation.graphql.ts | 288 - .../setAsDefaultAddressMutation.graphql.ts | 207 - .../updateUserAddressMutation.graphql.ts | 300 - src/lib/AndroidApp.tsx | 4 +- src/lib/AppProviders.tsx | 24 +- src/lib/AppRegistry.tsx | 30 +- .../Artist/ArtistArtworks/ArtistArtworks.tsx | 60 +- .../ArtistArtworks/SavedSearchBanner.tsx | 91 +- .../ArtistArtworks/SavedSearchButton.tsx | 99 - .../__tests__/ArtistCollectionsRail-tests.tsx | 9 +- .../ArtistNotableWorksRail-tests.tsx | 9 +- .../__tests__/SavedSearchButton-tests.tsx | 80 - src/lib/Components/Artist/ArtistHeader.tsx | 2 - .../Artist/ArtistInsights/ArtistInsights.tsx | 15 +- .../ArtistInsightsAuctionResults.tsx | 38 +- src/lib/Components/ArtistListItem.tsx | 78 +- src/lib/Components/ArtsyReactWebView.tsx | 5 +- .../ArtworkFilter/ArtworkFilterHelpers.ts | 18 +- .../ArtworkFilterOptionsScreen.tsx | 10 +- .../ArtworkFilter/Filters/ColorsOptions.tsx | 3 +- .../Filters/FilterToggleButton.tsx | 3 +- .../ArtworkFilter/Filters/KeywordFilter.tsx | 32 +- .../Filters/PriceRangeOptions.tsx | 1 - .../Filters/SingleSelectOption.tsx | 58 +- .../ArtworkFilter/Filters/SizeOptions.tsx | 5 +- .../ArtworkFilter/Filters/YearOptions.tsx | 3 +- .../Filters/__tests__/ColorsSwatch-tests.tsx | 18 +- .../GalleriesAndInstitutionsOptions-tests.tsx | 2 +- .../__tests__/LocationCitiesOptions-tests.tsx | 2 +- .../Filters/__tests__/SizeOptions-tests.tsx | 2 +- .../__tests__/TimePeriodOptions-tests.tsx | 4 +- .../convertersToFilterParams-tests.ts | 14 +- .../__tests__/FilterModal-tests.tsx | 12 +- .../FilteredArtworkGridZeroState.tsx | 5 +- .../InfiniteScrollArtworksGrid.tsx | 4 +- .../ArtworkTileRail/ArtworkTileRailCard.tsx | 9 +- .../__tests__/ArtworkTileRailCard-tests.tsx | 89 +- .../Buttons/DarkNavigationButton.tsx | 26 +- src/lib/Components/ConnectivityBanner.tsx | 1 - .../__tests__/CountdownTimer-tests.tsx | 4 +- .../FancyModal/FancyModalHeader.tsx | 10 +- src/lib/Components/Gene/GeneArtworks.tsx | 2 +- .../Gene/__tests__/GeneArtworks-tests.tsx | 12 +- .../Components/GenericArtistSeriesRail.tsx | 3 +- .../Home/ArtistRails/ArtistCard.tsx | 50 +- src/lib/Components/HoursCollapsible.tsx | 36 +- src/lib/Components/Input/Input.tsx | 34 +- src/lib/Components/Input/InputTitle.tsx | 3 +- .../Lists/AuctionResultListItem.tsx | 3 +- src/lib/Components/Lists/SavedItemRow.tsx | 3 +- src/lib/Components/Lists/ShowItemRow.tsx | 117 +- src/lib/Components/LoadFailureView.tsx | 3 +- src/lib/Components/LocationMap/index.tsx | 5 +- src/lib/Components/MenuItem.tsx | 3 +- src/lib/Components/PhoneInput/PhoneInput.tsx | 3 +- src/lib/Components/Photos/AddEditPhotos.tsx | 3 +- .../PopoverMessage/PopoverMessage.tsx | 107 +- .../PopoverMessage/PopoverMessageProvider.tsx | 126 +- .../__tests__/PopoverMessage-tests.tsx | 44 +- .../RelatedArtists/RelatedArtist.tsx | 12 +- .../SaleArtworkTileRailCard.tsx | 9 +- src/lib/Components/ScrollableTabBar.tsx | 9 +- src/lib/Components/SectionTitle.tsx | 3 +- src/lib/Components/Select.tsx | 5 +- src/lib/Components/Spinner.tsx | 3 +- .../StickyTabPage/StickyTabPageFlatList.tsx | 3 +- .../StickyTabPage/StickyTabPageTabBar.tsx | 5 +- src/lib/Components/SwitchMenu.tsx | 43 +- src/lib/Components/TabBar.tsx | 106 +- src/lib/Components/TextArea.tsx | 6 +- src/lib/Components/Toast/Toast.ts | 9 - .../Toast/{ToastComponent.tsx => Toast.tsx} | 38 +- .../Toast/__tests__/Toast-tests.tsx | 8 +- src/lib/Components/Toast/toastHook.tsx | 55 +- src/lib/Components/Toast/types.ts | 22 - src/lib/Components/TouchableRow.tsx | 15 +- .../Components/WorksForYou/Notification.tsx | 38 +- .../__tests__/Notification-tests.tsx | 2 +- .../__tests__/ArtistListItem-tests.tsx | 11 +- .../__tests__/ArtsyReactWebView-tests.tsx | 2 +- .../__tests__/HoursCollapsible-tests.tsx | 25 +- .../Components/__tests__/ReadMore-tests.tsx | 41 +- src/lib/Icons/ChevronIcon.tsx | 8 +- src/lib/Icons/Crosshair.tsx | 33 +- src/lib/NativeModules/Events.tsx | 15 + src/lib/NativeModules/LegacyNativeModules.tsx | 3 + src/lib/Scenes/About/About.tsx | 3 +- src/lib/Scenes/Artist/Artist.tsx | 2 +- src/lib/Scenes/Artist/SearchCriteria.tsx | 4 +- .../__tests__/ArtistSavedSearch-tests.tsx | 14 - .../ArtistSeries/ArtistSeriesListItem.tsx | 3 +- src/lib/Scenes/Artwork/Artwork.tsx | 3 +- .../Artwork/Components/ArtworkActions.tsx | 22 +- .../CommercialButtons/BidButton.tsx | 12 +- .../CollapsibleArtworkDetails.tsx | 2 +- .../CommercialButtons/InquiryModal.tsx | 3 +- .../InquirySuccessNotification.tsx | 5 +- .../LocationAutocomplete.tsx | 5 +- .../__tests__/BidButton-tests.tsx | 13 +- .../__tests__/CommercialButtons-tests.tsx | 26 +- .../CommercialEditionSetInformation.tsx | 5 +- .../Components/CommercialInformation.tsx | 49 +- .../ImageCarouselFullScreen-tests.tsx | 15 +- .../Components/__tests__/AboutWork-tests.tsx | 29 +- .../__tests__/ArtworkActions-tests.tsx | 58 +- .../__tests__/ArtworkHistory-tests.tsx | 55 +- .../__tests__/ArtworkTombstone-tests.tsx | 121 +- .../__tests__/AuctionPrice-tests.tsx | 9 +- .../CommercialEditionSetInformation-tests.tsx | 17 +- .../__tests__/CommercialInformation-tests.tsx | 16 +- .../CommercialPartnerInformation-tests.tsx | 71 +- .../__tests__/ContextCard-tests.tsx | 81 +- .../__tests__/FollowArtistButton-tests.tsx | 25 +- .../Components/__tests__/OtherWorks-tests.tsx | 53 +- .../__tests__/PartnerCard-tests.tsx | 97 +- ...RequestConditionReport-analytics-tests.tsx | 27 +- .../RequestConditionReport-tests.tsx | 37 +- .../ArtworkAttributionClassFAQ.tsx | 2 +- .../AuctionResultsForYou.tsx | 2 +- .../__tests__/AuctionResultsForYou-tests.tsx | 2 +- src/lib/Scenes/BottomTabs/BottomTabs.tsx | 3 +- .../Scenes/BottomTabs/BottomTabsButton.tsx | 3 +- src/lib/Scenes/City/City.tsx | 5 +- src/lib/Scenes/City/CityPicker.tsx | 11 +- .../BMWEventSection/__tests__/index-tests.tsx | 33 +- .../City/Components/BMWEventSection/index.tsx | 55 +- .../Event/__tests__/index-tests.tsx | 9 +- .../Scenes/City/Components/Event/index.tsx | 70 +- .../EventSection/__tests__/index-tests.tsx | 21 +- .../Components/FairEventSectionCard.tsx | 10 +- .../__tests__/index-tests.tsx | 9 +- .../Components/FairEventSection/index.tsx | 51 +- .../Components/SavedEventSection/index.tsx | 7 +- .../TabFairItemRow/__tests__/index-tests.tsx | 9 +- .../City/Components/TabFairItemRow/index.tsx | 60 +- .../CollectionArtistSeriesRail-tests.tsx | 57 +- .../FeaturedCollectionsRail.tsx | 6 +- .../OtherCollections/OtherCollectionsRail.tsx | 16 +- .../__tests__/OtherCollectionsRail-tests.tsx | 2 +- .../__tests__/FeaturedArtists-tests.tsx | 9 +- .../FullFeaturedArtistList-tests.tsx | 9 +- .../__tests__/CollectionHeader-tests.tsx | 49 +- .../Components/ImageSelection.tsx | 6 +- .../Consignments/Components/SearchResults.tsx | 12 +- .../Consignments/Components/TextArea.tsx | 4 +- .../Consignments/Components/TextInput.tsx | 121 +- .../Scenes/Consignments/Components/Toggle.tsx | 28 +- .../Consignments/Screens/Confirmation.tsx | 109 +- .../Scenes/Consignments/Screens/Location.tsx | 49 +- .../Scenes/Fair/Components/FairEditorial.tsx | 5 +- src/lib/Scenes/Fair/Components/SimpleTabs.tsx | 3 +- src/lib/Scenes/Fair/Fair.tsx | 2 +- src/lib/Scenes/Fair/FairArticles.tsx | 5 +- src/lib/Scenes/Favorites/FavoriteArtists.tsx | 32 +- src/lib/Scenes/Favorites/FavoriteArtworks.tsx | 22 +- src/lib/Scenes/ForceUpdate/ForceUpdate.tsx | 3 +- .../Components/EmailConfirmationBanner.tsx | 3 +- src/lib/Scenes/Home/Components/HomeHero.tsx | 3 +- .../Home/Components/SaleArtworksHomeRail.tsx | 2 +- src/lib/Scenes/Home/Components/SalesRail.tsx | 145 +- .../__tests__/SaleArtworksHomeRail-tests.tsx | 2 +- .../Components/Conversations/Composer.tsx | 86 +- .../Conversations/ConversationSnippet.tsx | 97 +- .../Conversations/Conversations.tsx | 3 +- .../Conversations/EditionSelectBox.tsx | 6 +- .../Components/Conversations/Message.tsx | 51 +- .../Components/Conversations/OfferIcon.tsx | 21 +- .../Conversations/Preview/ArtworkPreview.tsx | 7 +- .../Preview/Attachment/AttachmentPreview.tsx | 18 +- .../Preview/Attachment/FileDownload.tsx | 1 - .../Conversations/Preview/ShowPreview.tsx | 11 +- .../Inbox/Screens/ConversationDetails.tsx | 2 +- .../Map/Components/CitySwitcherButton.tsx | 79 +- src/lib/Scenes/Map/Components/ShowCard.tsx | 59 +- .../Map/Components/UserPositionButton.tsx | 4 +- src/lib/Scenes/Map/GlobalMap.tsx | 30 +- .../Components/MyAccountFieldEditScreen.tsx | 39 +- .../Components/MyCollectionArtworkHeader.tsx | 3 +- .../Components/Dimensions.tsx | 3 +- .../MyCollectionArtworkFormAddPhotos.tsx | 3 +- ...CollectionArtworkFormAdditionalDetails.tsx | 3 +- .../MyCollectionArtworkListItem.tsx | 6 +- .../MyProfilePushNotifications-tests.tsx | 4 +- src/lib/Scenes/Onboarding/ForgotPassword.tsx | 3 +- .../OnboardingCreateAccount.tsx | 3 +- .../OnboardingCreateAccountEmail.tsx | 3 +- .../OnboardingCreateAccountName.tsx | 3 +- .../OnboardingCreateAccountPassword.tsx | 3 +- src/lib/Scenes/Onboarding/OnboardingLogin.tsx | 3 +- .../OnboardingPersonalization.tsx | 60 +- ...nboardingPersonalizationArtistListItem.tsx | 73 +- .../OnboardingPersonalizationModal.tsx | 3 +- .../Scenes/Onboarding/OnboardingWelcome.tsx | 3 +- .../Components/OrderDetailsPayment.tsx | 3 +- .../Scenes/Partner/Components/PartnerMap.tsx | 5 +- .../Partner/Components/PartnerShows.tsx | 111 +- .../PartnerLocationSection-tests.tsx | 9 +- .../__tests__/PartnerShows-tests.tsx | 9 +- .../Scenes/Sale/Components/SaleLotsList.tsx | 5 +- src/lib/Scenes/SaleFAQ/SaleFAQ.tsx | 2 +- .../Scenes/Sales/__tests__/index-tests.tsx | 9 +- src/lib/Scenes/Sales/index.tsx | 27 +- .../Components/AddAddressButton.tsx | 19 - .../Scenes/SavedAddresses/SavedAddresses.tsx | 153 +- .../SavedAddresses/SavedAddressesForm.tsx | 284 - .../__tests__/SavedAddresses-tests.tsx | 81 +- .../__tests__/SavedAddressesForm-tests.tsx | 95 - .../SavedAddresses/mutations/addNewAddress.ts | 57 - .../mutations/deleteSavedAddress.ts | 55 - .../mutations/setAsDefaultAddress.ts | 49 - .../mutations/updateUserAddress.ts | 59 - src/lib/Scenes/Search/AutosuggestResults.tsx | 3 +- src/lib/Scenes/Search/CityGuideCTA.tsx | 40 +- src/lib/Scenes/Search/Search.tsx | 3 +- src/lib/Scenes/Search/SearchResult.tsx | 5 +- .../__tests__/AutosuggestResults-tests.tsx | 13 +- .../Search/__tests__/RecentSearches-tests.tsx | 16 +- .../Scenes/Search/__tests__/Search-tests.tsx | 16 +- .../VanityURLPossibleRedirect-tests.tsx | 18 +- .../Components/ViewingRoomViewWorksButton.tsx | 5 +- src/lib/Scenes/ViewingRoom/ViewingRoom.tsx | 2 +- .../ViewingRoom/ViewingRoomArtworks.tsx | 3 +- .../Scenes/ViewingRoom/ViewingRoomsList.tsx | 3 +- src/lib/navigation/__tests__/routes-tests.tsx | 12 +- src/lib/navigation/navigate.ts | 4 +- src/lib/navigation/routes.tsx | 6 +- .../__tests__/errorMiddleware-tests.ts | 2 +- src/lib/relay/middlewares/errorMiddleware.ts | 4 +- src/lib/store/AuthModel.ts | 25 - src/lib/store/GlobalStoreModel.ts | 3 - src/lib/store/NativeModel.ts | 36 +- src/lib/store/ToastModel.ts | 44 - src/lib/store/__tests__/migration-tests.ts | 17 - src/lib/store/config/EnvironmentModel.tsx | 2 +- src/lib/store/config/features.ts | 19 +- src/lib/store/migration.ts | 6 +- src/lib/tests/renderRelayTree.tsx | 24 +- src/lib/utils/AdminMenu.tsx | 11 +- src/lib/utils/QAInfo.tsx | 3 +- .../utils/__tests__/renderMarkdown-tests.tsx | 17 +- src/lib/utils/hideBackButtonOnScroll.tsx | 2 +- src/lib/utils/placeholders.tsx | 3 +- src/lib/utils/renderMarkdown.tsx | 12 +- .../utils/track/SegmentTrackingProvider.ts | 76 +- src/lib/utils/track/providers.tsx | 16 +- src/palette/ClassTheme.tsx | 13 - src/palette/PaletteFlag.tsx | 59 - src/palette/Theme.tsx | 177 +- src/palette/elements/Avatar/Avatar.tsx | 8 +- src/palette/elements/BorderBox/BorderBox.tsx | 10 +- .../elements/Button/Button.stories.tsx | 45 - src/palette/elements/Button/Button.test.tsx | 42 +- src/palette/elements/Button/Button.tsx | 35 +- src/palette/elements/Cards/CardTag.tsx | 6 +- src/palette/elements/Cards/LargeCard.tsx | 7 +- src/palette/elements/Cards/MediumCard.tsx | 6 +- src/palette/elements/Cards/SmallCard.tsx | 8 +- src/palette/elements/Checkbox/Check.tsx | 28 +- src/palette/elements/Flex/Flex.tsx | 4 +- src/palette/elements/Message/Message.tsx | 10 +- src/palette/elements/Radio/RadioDot.tsx | 46 +- src/palette/elements/Separator/Separator.tsx | 9 +- src/palette/elements/Spinner/Spinner.tsx | 6 +- src/palette/elements/Text/Text.tsx | 7 +- .../elements/Text/__tests__/Text.test.tsx | 21 +- src/palette/elements/Text/tokens.ts | 22 +- src/palette/elements/Touchable/Touchable.tsx | 48 +- .../Touchable/TouchableHighlightColor.tsx | 5 +- .../elements/Typography/Typography.tsx | 36 +- src/palette/helpers/__tests__/color.test.ts | 8 + src/palette/helpers/__tests__/color.tests.tsx | 102 - src/palette/helpers/__tests__/space.test.ts | 9 + src/palette/helpers/__tests__/space.tests.tsx | 76 - src/palette/helpers/styled.tsx | 6 - src/palette/hooks.ts | 12 - src/palette/index.tsx | 2 - src/palette/platform/primitives.ts | 12 + src/palette/svgs/AddCircleFillIcon.tsx | 3 +- src/palette/svgs/AddCircleIcon.tsx | 3 +- src/palette/svgs/AddIcon.tsx | 4 +- src/palette/svgs/AlertCircleFillIcon.tsx | 4 +- src/palette/svgs/AlertIcon.tsx | 3 +- src/palette/svgs/ArrowCircleFillIcons.tsx | 32 +- src/palette/svgs/ArrowDownCircleIcon.tsx | 3 +- src/palette/svgs/ArrowDownIcon.tsx | 3 +- src/palette/svgs/ArrowLeftCircleIcon.tsx | 3 +- src/palette/svgs/ArrowLeftIcon.tsx | 3 +- src/palette/svgs/ArrowRightCircleIcon.tsx | 3 +- src/palette/svgs/ArrowRightIcon.tsx | 3 +- src/palette/svgs/ArrowUpCircleIcon.tsx | 3 +- src/palette/svgs/ArrowUpIcon.tsx | 3 +- src/palette/svgs/ArtsyLogoBlackIcon.tsx | 4 +- src/palette/svgs/ArtsyLogoWhiteIcon.tsx | 1 + src/palette/svgs/ArtsyMarkBlackIcon.tsx | 3 +- src/palette/svgs/ArtsyMarkWhiteIcon.tsx | 1 + src/palette/svgs/ArtworkIcon.tsx | 3 +- src/palette/svgs/AuctionIcon.tsx | 3 +- src/palette/svgs/BellFillIcon.tsx | 3 +- src/palette/svgs/BellIcon.tsx | 3 +- src/palette/svgs/BlueChipIcon.tsx | 3 +- src/palette/svgs/BriefcaseIcon.tsx | 3 +- src/palette/svgs/CertificateIcon.tsx | 3 +- src/palette/svgs/CheckCircleFillIcon.tsx | 3 +- src/palette/svgs/CheckCircleIcon.tsx | 3 +- src/palette/svgs/CheckIcon.tsx | 3 +- src/palette/svgs/CloseCircleIcon.tsx | 3 +- src/palette/svgs/CloseIcon.tsx | 3 +- src/palette/svgs/CollapseIcon.tsx | 3 +- src/palette/svgs/DecreaseIcon.tsx | 3 +- src/palette/svgs/DocumentIcon.tsx | 3 +- src/palette/svgs/DownloadIcon.tsx | 3 +- src/palette/svgs/EditIcon.tsx | 3 +- src/palette/svgs/EnterIcon.tsx | 3 +- src/palette/svgs/EnvelopeIcon.tsx | 3 +- src/palette/svgs/EstablishedIcon.tsx | 3 +- src/palette/svgs/ExpandIcon.tsx | 3 +- src/palette/svgs/EyeClosedIcon.tsx | 3 +- src/palette/svgs/EyeOpenedIcon.tsx | 3 +- src/palette/svgs/FacebookIcon.tsx | 4 +- src/palette/svgs/FairIcon.tsx | 3 +- src/palette/svgs/FilterIcon.tsx | 3 +- src/palette/svgs/GenomeIcon.tsx | 3 +- src/palette/svgs/GraphIcon.tsx | 3 +- src/palette/svgs/HeartFillIcon.tsx | 3 +- src/palette/svgs/HeartIcon.tsx | 3 +- src/palette/svgs/HomeIcon.tsx | 4 +- src/palette/svgs/Icon.tsx | 2 +- src/palette/svgs/IncreaseIcon.tsx | 3 +- src/palette/svgs/InfoCircleIcon.tsx | 4 +- src/palette/svgs/InstitutionIcon.tsx | 3 +- src/palette/svgs/LoaderIcon.tsx | 3 +- src/palette/svgs/LockIcon.tsx | 4 +- src/palette/svgs/LogoutIcon.tsx | 8 +- src/palette/svgs/MagnifyingGlassIcon.tsx | 3 +- src/palette/svgs/MapPinIcon.tsx | 3 +- src/palette/svgs/MenuIcon.tsx | 4 +- src/palette/svgs/MessageIcon.tsx | 4 +- src/palette/svgs/MoneyFillIcon.tsx | 6 +- src/palette/svgs/MoreIcon.tsx | 3 +- src/palette/svgs/NoArtworkIcon.tsx | 4 +- src/palette/svgs/NoImageIcon.tsx | 4 +- src/palette/svgs/PageIcon.tsx | 4 +- src/palette/svgs/PaymentIcon.tsx | 4 +- src/palette/svgs/PublicationIcon.tsx | 8 +- src/palette/svgs/QuestionCircleIcon.tsx | 3 +- src/palette/svgs/ReloadIcon.tsx | 4 +- src/palette/svgs/SettingsIcon.tsx | 4 +- src/palette/svgs/ShareIcon.tsx | 4 +- src/palette/svgs/TagIcon.tsx | 4 +- src/palette/svgs/TimerIcon.tsx | 4 +- src/palette/svgs/TopEmergingIcon.tsx | 4 +- src/palette/svgs/TrashIcon.tsx | 4 +- src/palette/svgs/TwitterIcon.tsx | 4 +- src/palette/svgs/UserMultiIcon.tsx | 4 +- src/palette/svgs/UserSingleIcon.tsx | 4 +- src/palette/svgs/VerifiedIcon.tsx | 4 +- src/palette/svgs/WhatsAppAppIcon.tsx | 2 +- src/palette/svgs/XCircleIcon.tsx | 3 +- src/palette/svgs/sf/BoltCircleFill.tsx | 3 +- src/palette/svgs/sf/BoltFill.tsx | 4 +- src/palette/svgs/sf/BookmarkFill.tsx | 3 +- src/palette/svgs/sf/ClockFill.tsx | 3 +- .../svgs/sf/ExclamationMarkCircleFill.tsx | 4 +- src/palette/svgs/sf/StarCircleFill.tsx | 4 +- src/palette/svgs/sf/Stopwatch.tsx | 3 +- src/setupJest.ts | 28 +- src/storybook/addons.js | 1 - src/storybook/helpers.tsx | 46 - src/storybook/index.js | 5 - src/storybook/package.json | 3 - src/storybook/rn-addons.js | 0 src/storybook/storyLoader.js | 15 - src/storybook/storybook-ui.js | 17 - tsconfig.json | 16 +- typings/storybook.d.ts | 7 - typings/styled-components.native.d.ts | 22 +- yarn.lock | 6639 +++-------------- 485 files changed, 4770 insertions(+), 13643 deletions(-) delete mode 100644 .secrets.baseline create mode 100644 .stylelintrc create mode 100644 Artsy/App/ARAnalyticsVisualizer.h create mode 100644 Artsy/App/ARAnalyticsVisualizer.m create mode 100644 Artsy/App/ARSegmentProvider.h create mode 100644 Artsy/App/ARSegmentProvider.m create mode 100644 Artsy/App/ARSentryAnalyticsProvider.h create mode 100644 Artsy/App/ARSentryAnalyticsProvider.m create mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h create mode 100644 Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m create mode 100644 Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m create mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h create mode 100644 Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m rename CHANGELOG.legacy.yml => CHANGELOG.yml (96%) delete mode 100644 docs/palette_v3_migration_guide.md delete mode 100644 docs/storybook.md create mode 100644 patches/@segment+analytics-react-native+1.4.4.patch create mode 100644 patches/@segment+analytics-react-native-appboy+1.4.8.patch create mode 100644 patches/react-native-appboy-sdk+1.29.1.patch delete mode 100644 patches/react-native-push-notification+7.4.0.patch delete mode 100755 scripts/set-storybook-environment.js delete mode 100644 src/__generated__/SavedAddressesFormQuery.graphql.ts delete mode 100644 src/__generated__/SavedAddressesFormTestsQuery.graphql.ts delete mode 100644 src/__generated__/SavedAddressesForm_me.graphql.ts delete mode 100644 src/__generated__/SavedSearchButtonQuery.graphql.ts delete mode 100644 src/__generated__/SavedSearchButtonTestsQuery.graphql.ts delete mode 100644 src/__generated__/SavedSearchButton_me.graphql.ts delete mode 100644 src/__generated__/addNewAddressMutation.graphql.ts delete mode 100644 src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts delete mode 100644 src/__generated__/setAsDefaultAddressMutation.graphql.ts delete mode 100644 src/__generated__/updateUserAddressMutation.graphql.ts delete mode 100644 src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx delete mode 100644 src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx delete mode 100644 src/lib/Components/Toast/Toast.ts rename src/lib/Components/Toast/{ToastComponent.tsx => Toast.tsx} (77%) delete mode 100644 src/lib/Components/Toast/types.ts delete mode 100644 src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts delete mode 100644 src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts delete mode 100644 src/lib/store/ToastModel.ts delete mode 100644 src/palette/ClassTheme.tsx delete mode 100644 src/palette/PaletteFlag.tsx delete mode 100644 src/palette/elements/Button/Button.stories.tsx create mode 100644 src/palette/helpers/__tests__/color.test.ts delete mode 100644 src/palette/helpers/__tests__/color.tests.tsx create mode 100644 src/palette/helpers/__tests__/space.test.ts delete mode 100644 src/palette/helpers/__tests__/space.tests.tsx delete mode 100644 src/palette/helpers/styled.tsx delete mode 100644 src/palette/hooks.ts create mode 100644 src/palette/platform/primitives.ts delete mode 100644 src/storybook/addons.js delete mode 100644 src/storybook/helpers.tsx delete mode 100644 src/storybook/index.js delete mode 100644 src/storybook/package.json delete mode 100644 src/storybook/rn-addons.js delete mode 100644 src/storybook/storyLoader.js delete mode 100644 src/storybook/storybook-ui.js delete mode 100644 typings/storybook.d.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index 9ae069fd477..c9595957044 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -154,12 +154,12 @@ commands: steps: - restore_cache: keys: - - v5-app_build_ios-{{ checksum ".manifests/app_build" }} + - v4-app_build_ios-{{ checksum ".manifests/app_build" }} - run: name: Build App - command: ./scripts/ci-ios + command: ls derived_data || ./scripts/ci-ios - save_cache: - key: v5-app_build_ios-{{ checksum ".manifests/app_build" }} + key: v4-app_build_ios-{{ checksum ".manifests/app_build" }} paths: - derived_data - node_modules/react-native-config @@ -503,14 +503,12 @@ workflows: - beta-android - app_store_submission - play_store_submission - - update-changelog - build-test-js: filters: branches: ignore: - app_store_submission - play_store_submission - - update-changelog - horizon/block: context: horizon project_id: 37 @@ -526,7 +524,6 @@ workflows: - app_store_submission - play_store_submission - beta-android - - update-changelog requires: - build-test-js - horizon/block @@ -537,7 +534,6 @@ workflows: - app_store_submission - play_store_submission - beta-ios - - update-changelog requires: - build-test-js - horizon/block @@ -547,8 +543,6 @@ workflows: only: - beta-ios - beta-android - ignore: - - update-changelog requires: - build-test-app-ios - build-test-app-android diff --git a/.gitignore b/.gitignore index 376a4066663..50b76e18861 100644 --- a/.gitignore +++ b/.gitignore @@ -138,5 +138,3 @@ android/app/src/main/assets/fonts # Firebase files android/app/google-services.json GoogleService-Info.plist - -storybook.json diff --git a/.secrets.baseline b/.secrets.baseline deleted file mode 100644 index b644f382638..00000000000 --- a/.secrets.baseline +++ /dev/null @@ -1,103 +0,0 @@ -{ - "version": "1.1.0", - "plugins_used": [ - { - "name": "ArtifactoryDetector" - }, - { - "name": "AWSKeyDetector" - }, - { - "name": "AzureStorageKeyDetector" - }, - { - "name": "Base64HighEntropyString", - "limit": 4.5 - }, - { - "name": "BasicAuthDetector" - }, - { - "name": "CloudantDetector" - }, - { - "name": "HexHighEntropyString", - "limit": 3.0 - }, - { - "name": "IbmCloudIamDetector" - }, - { - "name": "IbmCosHmacDetector" - }, - { - "name": "JwtTokenDetector" - }, - { - "name": "KeywordDetector", - "keyword_exclude": "" - }, - { - "name": "MailchimpDetector" - }, - { - "name": "NpmDetector" - }, - { - "name": "PrivateKeyDetector" - }, - { - "name": "SlackDetector" - }, - { - "name": "SoftlayerDetector" - }, - { - "name": "SquareOAuthDetector" - }, - { - "name": "StripeDetector" - }, - { - "name": "TwilioKeyDetector" - } - ], - "filters_used": [ - { - "path": "detect_secrets.filters.allowlist.is_line_allowlisted" - }, - { - "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", - "min_level": 2 - }, - { - "path": "detect_secrets.filters.heuristic.is_indirect_reference" - }, - { - "path": "detect_secrets.filters.heuristic.is_likely_id_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_lock_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_potential_uuid" - }, - { - "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" - }, - { - "path": "detect_secrets.filters.heuristic.is_sequential_string" - }, - { - "path": "detect_secrets.filters.heuristic.is_swagger_file" - }, - { - "path": "detect_secrets.filters.heuristic.is_templated_secret" - } - ], - "results": {}, - "generated_at": "2021-07-26T13:07:17Z" -} diff --git a/.stylelintrc b/.stylelintrc new file mode 100644 index 00000000000..afca977d041 --- /dev/null +++ b/.stylelintrc @@ -0,0 +1,21 @@ +{ + "processors": ["stylelint-processor-styled-components"], + "extends": [ + "stylelint-config-standard", + "stylelint-config-styled-components" + ], + "syntax": "scss", + "rules": { + "selector-type-no-unknown": [true, { "ignoreTypes": ["checkbox", "twitterwidget"] }], + "property-no-unknown": [true, { "ignoreProperties": ["resize-mode", "flexgrow"] }], + "block-opening-brace-space-after": null, + "block-closing-brace-space-before": null, + "declaration-colon-newline-after": null, + "value-list-comma-newline-after": null, + "declaration-block-no-redundant-longhand-properties": null, + "color-hex-length": null, + "block-no-empty": null, + "declaration-empty-line-before": null, + "function-calc-no-unspaced-operator": null + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 97f6f2999a5..8686265ca10 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,6 +4,8 @@ "Podfile": "ruby", "*.h": "objective-c", "*.js": "javascriptreact", + "*.snap": "javascriptreact", + ".stylelintrc": "json", "yarn.lock": "text" }, "eslint.enable": false, diff --git a/Artsy.xcodeproj/project.pbxproj b/Artsy.xcodeproj/project.pbxproj index 15466f416c4..d39547b6606 100644 --- a/Artsy.xcodeproj/project.pbxproj +++ b/Artsy.xcodeproj/project.pbxproj @@ -31,6 +31,7 @@ 1CC9EBA41CC76CDD00A74E3C /* followButtonChecked.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */; }; 1CC9EBA51CC76CDD00A74E3C /* followButtonChecked@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */; }; 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */; }; + 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */; }; 1CF709B31CB803AA00C00FF4 /* AROnboardingHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */; }; 1CFA4EB61E5C4B6B00D44A5A /* full_logo_black_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */; }; 1CFA4EB71E5C4B6B00D44A5A /* full_logo_black_medium@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 1CFA4EB41E5C4B6B00D44A5A /* full_logo_black_medium@2x.png */; }; @@ -110,6 +111,7 @@ 3CF144B818E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF144B718E9E00400B1A764 /* ARSignUpSplashViewControllerTests.m */; }; 3CFB078B18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */; }; 3CFBE33618C5848900C781D0 /* ARFileUtilsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */; }; + 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */ = {isa = PBXBuildFile; fileRef = 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */; }; 491A4DE2168E4343003B2246 /* Gene.m in Sources */ = {isa = PBXBuildFile; fileRef = 491A4DE1168E4343003B2246 /* Gene.m */; }; 4938742917BD512700724795 /* ARSignUpSplashViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938742717BD512700724795 /* ARSignUpSplashViewController.m */; }; 4938743617BDB2CD00724795 /* ARCrossfadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4938743517BDB2CD00724795 /* ARCrossfadingImageView.m */; }; @@ -135,6 +137,7 @@ 51B4BA451C6A24490014A394 /* AuctionInformationViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */; }; 51B4BA481C6A2B7B0014A394 /* AuctionSaleNetworkModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */; }; 51B4BA491C6A2B7F0014A394 /* AuctionBiddersNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 517201C31C6A239E007148B7 /* AuctionBiddersNetworkModel.swift */; }; + 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */; }; 51D141B71AF0F14B000091CF /* ARTestHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D141B61AF0F14B000091CF /* ARTestHelper.m */; }; 51DA12251B596035001B6F2A /* RefreshIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */; }; 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51DCC6C71C60E26800455309 /* AuctionInformationViewController.swift */; }; @@ -248,6 +251,7 @@ 60026AF21BDE3EFB0040257C /* ARWebViewCacheHost.m in Sources */ = {isa = PBXBuildFile; fileRef = 60026AF11BDE3EFB0040257C /* ARWebViewCacheHost.m */; }; 600415C917C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m in Sources */ = {isa = PBXBuildFile; fileRef = 600415C817C4ECE2003C7974 /* ArtsyAPI+RelatedModels.m */; }; 600A734317DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m in Sources */ = {isa = PBXBuildFile; fileRef = 600A734217DE3F3F00E21233 /* ArtsyAPI+DeviceTokens.m */; }; + 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */ = {isa = PBXBuildFile; fileRef = 600B8B441C4FCEEC00776F84 /* CHANGELOG.yml */; }; 600EE29E16B3003F002E9F9A /* ARNavigationButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 600EE29C16B3003F002E9F9A /* ARNavigationButton.m */; }; 60107F161CC7DC1D002F772E /* ARTestImageCachingFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60107F151CC7DC1D002F772E /* ARTestImageCachingFunctions.swift */; }; 6016120420B7446800FD54B0 /* ARVIRModalClose.png in Resources */ = {isa = PBXBuildFile; fileRef = 6016120120B7446700FD54B0 /* ARVIRModalClose.png */; }; @@ -355,6 +359,7 @@ 60C1C3181C5FA34400EC98EE /* ARSerifNavigationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */; }; 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */; }; 60CB547C1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */; }; + 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */; }; 60CE3CAB1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m in Sources */ = {isa = PBXBuildFile; fileRef = 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */; }; 60D312471EA6CFD000B13E59 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 60D312461EA6CFD000B13E59 /* ReplayKit.framework */; }; 60D70DE41D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60D70DE31D01F420008888D1 /* LiveAuctionLotViewModelSpecs.swift */; }; @@ -363,6 +368,7 @@ 60DCDAD71C6533DF00BB61D7 /* ARSerifNavigationViewControllerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */; }; 60E719FE1B4C6032008948FA /* Launch Screen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 60E719FD1B4C6032008948FA /* Launch Screen.xib */; }; 60E71A011B4C60AC008948FA /* Artsy_Logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 60E71A001B4C60AC008948FA /* Artsy_Logo.png */; }; + 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */; }; 60ED311F1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */; }; 60ED31221C8F746A0071DD89 /* FakeSalesPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */; }; 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */; }; @@ -418,6 +424,7 @@ CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EC24F9684400ED2843 /* Range@2x.png */; }; CB6CE8F124F9684400ED2843 /* Thumb.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8ED24F9684400ED2843 /* Thumb.png */; }; CB6CE8F224F9684400ED2843 /* Track@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = CB6CE8EE24F9684400ED2843 /* Track@2x.png */; }; + CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */; }; CB879D0C180746C900E2D8EC /* AuctionLot.m in Sources */ = {isa = PBXBuildFile; fileRef = CB879D0B180746C900E2D8EC /* AuctionLot.m */; }; CB9E244117CBC36F00773A9A /* ARAuthProviders.m in Sources */ = {isa = PBXBuildFile; fileRef = CB9E244017CBC36F00773A9A /* ARAuthProviders.m */; }; CBB469D0181F1F1200B5692B /* Bid.m in Sources */ = {isa = PBXBuildFile; fileRef = CBB469CF181F1F1200B5692B /* Bid.m */; }; @@ -534,6 +541,7 @@ 1CC9EB9E1CC76CDD00A74E3C /* followButtonChecked.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = followButtonChecked.png; sourceTree = ""; }; 1CC9EB9F1CC76CDD00A74E3C /* followButtonChecked@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@2x.png"; sourceTree = ""; }; 1CC9EBA01CC76CDD00A74E3C /* followButtonChecked@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "followButtonChecked@3x.png"; sourceTree = ""; }; + 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARAppAnalyticsSpec.m; path = Analytics_Tests/ARAppAnalyticsSpec.m; sourceTree = ""; }; 1CF709B11CB803AA00C00FF4 /* AROnboardingHeaderView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AROnboardingHeaderView.h; sourceTree = ""; }; 1CF709B21CB803AA00C00FF4 /* AROnboardingHeaderView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AROnboardingHeaderView.m; sourceTree = ""; }; 1CFA4EB31E5C4B6B00D44A5A /* full_logo_black_large@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "full_logo_black_large@2x.png"; sourceTree = ""; }; @@ -661,6 +669,8 @@ 3CFB078918EB417F00792024 /* ARSecureTextFieldWithPlaceholder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSecureTextFieldWithPlaceholder.h; sourceTree = ""; }; 3CFB078A18EB417F00792024 /* ARSecureTextFieldWithPlaceholder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSecureTextFieldWithPlaceholder.m; sourceTree = ""; }; 3CFBE33518C5848900C781D0 /* ARFileUtilsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARFileUtilsTests.m; sourceTree = ""; }; + 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAnalyticsVisualizer.h; sourceTree = ""; }; + 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARAnalyticsVisualizer.m; sourceTree = ""; }; 482115D14BD4E126B81B3A2B /* libPods-Artsy Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Artsy Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 491A4DE0168E4343003B2246 /* Gene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gene.h; sourceTree = ""; }; 491A4DE1168E4343003B2246 /* Gene.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Gene.m; sourceTree = ""; }; @@ -722,6 +732,8 @@ 517201C51C6A239E007148B7 /* AuctionSaleNetworkModelTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionSaleNetworkModelTests.swift; sourceTree = ""; }; 518B421D1B57CF7100210A02 /* AttentionIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AttentionIcon@2x.png"; sourceTree = ""; }; 51B4BA441C6A24490014A394 /* AuctionInformationViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AuctionInformationViewControllerTests.swift; sourceTree = ""; }; + 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ArtsyAPI+Sailthru.h"; sourceTree = ""; }; + 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ArtsyAPI+Sailthru.m"; sourceTree = ""; }; 51D141B51AF0F14B000091CF /* ARTestHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARTestHelper.h; sourceTree = ""; }; 51D141B61AF0F14B000091CF /* ARTestHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARTestHelper.m; sourceTree = ""; }; 51DA12241B596035001B6F2A /* RefreshIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RefreshIcon@2x.png"; sourceTree = ""; }; @@ -1034,6 +1046,8 @@ 60C1C3171C5FA34400EC98EE /* ARSerifNavigationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSerifNavigationViewController.m; sourceTree = ""; }; 60C2CBEE1CC11433009B30CA /* LiveAuctionToolbarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionToolbarView.swift; path = Live_Auctions/Views/LiveAuctionToolbarView.swift; sourceTree = ""; }; 60CB547B1CC8F3CC0094DCE5 /* LiveAuctionViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionViewControllerTests.swift; path = Live_Auction/LiveAuctionViewControllerTests.swift; sourceTree = ""; }; + 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSentryAnalyticsProvider.h; sourceTree = ""; }; + 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSentryAnalyticsProvider.m; sourceTree = ""; }; 60CE3CA91B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ArtsyOHHTTPAPI.h; sourceTree = ""; }; 60CE3CAA1B46F3EE00CA2B75 /* ArtsyOHHTTPAPI.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ArtsyOHHTTPAPI.m; sourceTree = ""; }; 60D312461EA6CFD000B13E59 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; }; @@ -1045,6 +1059,8 @@ 60DCDAD51C6533A900BB61D7 /* ARSerifNavigationViewControllerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ARSerifNavigationViewControllerSpec.m; path = Components/ARSerifNavigationViewControllerSpec.m; sourceTree = ""; }; 60E719FD1B4C6032008948FA /* Launch Screen.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "Launch Screen.xib"; sourceTree = ""; }; 60E71A001B4C60AC008948FA /* Artsy_Logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Artsy_Logo.png; sourceTree = ""; }; + 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARStubbedAnalyticsProvider.h; sourceTree = ""; }; + 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARStubbedAnalyticsProvider.m; sourceTree = ""; }; 60ED311E1C8F73450071DD89 /* LiveAuctionLotViewControllerTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewControllerTests.swift; path = Live_Auction/LiveAuctionLotViewControllerTests.swift; sourceTree = ""; }; 60ED31201C8F74670071DD89 /* FakeSalesPerson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = FakeSalesPerson.swift; path = Live_Auction/FakeSalesPerson.swift; sourceTree = ""; }; 60ED31241C8F76800071DD89 /* LiveAuctionLotViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = LiveAuctionLotViewModel.swift; path = Live_Auctions/ViewModels/LiveAuctionLotViewModel.swift; sourceTree = ""; }; @@ -1131,6 +1147,8 @@ CB6CE8EC24F9684400ED2843 /* Range@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Range@2x.png"; sourceTree = ""; }; CB6CE8ED24F9684400ED2843 /* Thumb.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Thumb.png; sourceTree = ""; }; CB6CE8EE24F9684400ED2843 /* Track@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Track@2x.png"; sourceTree = ""; }; + CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARSegmentProvider.h; sourceTree = ""; }; + CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ARSegmentProvider.m; sourceTree = ""; }; CB879D0A180746C900E2D8EC /* AuctionLot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AuctionLot.h; sourceTree = ""; }; CB879D0B180746C900E2D8EC /* AuctionLot.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AuctionLot.m; sourceTree = ""; }; CB9E243F17CBC36F00773A9A /* ARAuthProviders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARAuthProviders.h; sourceTree = ""; }; @@ -1252,6 +1270,8 @@ 342F95F94C5759B9CA05AB59 /* Artwork+Extensions.h */, 3CE0DA3018A13604000E537A /* OHHTTPStubs+Artsy.h */, 3CE0DA3118A13604000E537A /* OHHTTPStubs+Artsy.m */, + 60E7386F1C64AB8B00AC381B /* ARStubbedAnalyticsProvider.h */, + 60E738701C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m */, ); path = Stubs; sourceTree = ""; @@ -2512,10 +2532,16 @@ 60A0E9FB1C51070F002754A8 /* Analytics */ = { isa = PBXGroup; children = ( + CB6CE8FD24FEAC7400ED2843 /* ARSegmentProvider.h */, + CB6CE8FE24FEAC7500ED2843 /* ARSegmentProvider.m */, + 4191F43D1C8745D90054F823 /* ARAnalyticsVisualizer.h */, + 4191F43E1C8745D90054F823 /* ARAnalyticsVisualizer.m */, 5EFE2BE21910FC81003B5EEA /* ARAppDelegate+Analytics.h */, 5EFE2BE31910FC81003B5EEA /* ARAppDelegate+Analytics.m */, 6088B75217D1DBAC00E4BB67 /* ARAnalyticsConstants.h */, 6088B75317D1DBAC00E4BB67 /* ARAnalyticsConstants.m */, + 60CC97331EC3203D00793566 /* ARSentryAnalyticsProvider.h */, + 60CC97341EC3203D00793566 /* ARSentryAnalyticsProvider.m */, ); name = Analytics; sourceTree = ""; @@ -2607,6 +2633,8 @@ 3CB37D96192246B500089A1D /* ArtsyAPI+ErrorHandlers.m */, 608AABDA1B3884C600855A1C /* ARKeychainable.h */, 608AABDB1B3884C600855A1C /* ARKeychainable.m */, + 51C863131EAB81F00069E9AC /* ArtsyAPI+Sailthru.h */, + 51C863141EAB81F00069E9AC /* ArtsyAPI+Sailthru.m */, ); name = "API Modules"; path = API_Modules; @@ -2725,6 +2753,7 @@ 60E738721C64AC7C00AC381B /* Analytics Tests */ = { isa = PBXGroup; children = ( + 1CD90D581DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m */, ); name = "Analytics Tests"; sourceTree = ""; @@ -3083,6 +3112,7 @@ 5E80CA822093C29500BCFD82 /* CircleCheckGreen@3x.png in Resources */, 604E08232051E9E000785717 /* ARVIRPhone@2x.png in Resources */, CB6CE8F024F9684400ED2843 /* Range@2x.png in Resources */, + 600B8B451C4FCEEC00776F84 /* CHANGELOG.yml in Resources */, 1CC9EBA61CC76CDD00A74E3C /* followButtonChecked@3x.png in Resources */, 608B707B17D4A1C80088A56C /* FooterBackground@2x.png in Resources */, 3C4AE99319094F96009C0E8B /* ViewInRoom_BaseNoBench@2x.png in Resources */, @@ -3241,10 +3271,7 @@ ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-Artsy/Pods-Artsy-resources.sh", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.ContentCards.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/Appboy.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.InAppMessage.bundle", - "${PODS_CONFIGURATION_BUILD_DIR}/Appboy-iOS-SDK/AppboyUI.NewsFeed.bundle", + "${PODS_ROOT}/Appboy-iOS-SDK/AppboyKit/Appboy.bundle", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Bold.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-BoldItalic.otf", "${PODS_ROOT}/Artsy+UIFonts/Pod/Assets/AGaramondPro-Italic.otf", @@ -3272,10 +3299,7 @@ ); name = "[CP] Copy Pods Resources"; outputPaths = ( - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.ContentCards.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/Appboy.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.InAppMessage.bundle", - "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AppboyUI.NewsFeed.bundle", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Bold.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-BoldItalic.otf", "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AGaramondPro-Italic.otf", @@ -3403,6 +3427,7 @@ 60A4A63E1D05C924005946EF /* UIViewController+BlurredStatusView.swift in Sources */, 60A309AD1AC9A7C8000783C1 /* NSString+StringBetweenStrings.m in Sources */, 1CC9EB9A1CC12B5400A74E3C /* AROnboardingFollowableTableViewCell.m in Sources */, + 4191F43F1C8745D90054F823 /* ARAnalyticsVisualizer.m in Sources */, 3C7880BC18B9081C00595E30 /* ARNotificationView.m in Sources */, 60863E471D0B49AE0053B51C /* ArtsyAPI+HEAD.m in Sources */, 5EBA3E831DFF4CCB005B4BEE /* ARTwoWayDictionaryTransformer.m in Sources */, @@ -3411,6 +3436,7 @@ 60B6F0F21662AADF007C9587 /* ARAppConstants.m in Sources */, 60C2CBEF1CC11433009B30CA /* LiveAuctionToolbarView.swift in Sources */, 5EF8407E1CECDFFD006248D7 /* LiveAuctionLotCollectionViewLayoutAttributes.swift in Sources */, + 51C863151EAB81F00069E9AC /* ArtsyAPI+Sailthru.m in Sources */, 5EA0E74C1DCA3DD200CE9203 /* Interstellar+Artsy.swift in Sources */, 49EC62181778AF100020D648 /* PartnerShow.m in Sources */, 51DCC6C81C60E26800455309 /* AuctionInformationViewController.swift in Sources */, @@ -3458,6 +3484,7 @@ 5E3816FA1CBEDDF900477B17 /* LotListCollectionViewCell.swift in Sources */, 491A4DE2168E4343003B2246 /* Gene.m in Sources */, 602BC089168E0C0E00069FDB /* ARReusableLoadingView.m in Sources */, + CB6CE8FF24FEAC7500ED2843 /* ARSegmentProvider.m in Sources */, 5E830A521E969B1800A56C75 /* ArtsyEcho.m in Sources */, 6099F907178F24750004EF04 /* ARDefaultNavigationTransition.m in Sources */, 60ED31251C8F76800071DD89 /* LiveAuctionLotViewModel.swift in Sources */, @@ -3563,6 +3590,7 @@ 5EFEF1C81CEB7C5800E3AAB2 /* LiveAuctionLotCollectionViewDataSource.swift in Sources */, 60F9B08F1D83255800DBAC8C /* ARAdminNetworkModel.m in Sources */, 342F9D9296B47F66184FA760 /* NSDate+DateRange.m in Sources */, + 60CC97351EC3203D00793566 /* ARSentryAnalyticsProvider.m in Sources */, 5E47F35B1C4444A900EC0751 /* SaleViewModel.swift in Sources */, 60BC92F31BBEC89B00D13E56 /* ARApplicationShortcutItemDelegate.m in Sources */, E667F12C18EC889F00503F50 /* ARLogFormatter.m in Sources */, @@ -3621,6 +3649,7 @@ 3CF144A918E4607900B1A764 /* SystemTimeTests.m in Sources */, E649708918D7762F009DB0C4 /* ARImageItemProviderTests.m in Sources */, E61E772619A5477300C55E14 /* ARExpectaExtensions.m in Sources */, + 1CD90D591DECBDF400FBD6C2 /* ARAppAnalyticsSpec.m in Sources */, 5EF840801CED0C5F006248D7 /* LiveAuctionFancyLotCollectionViewLayoutTests.swift in Sources */, 3C3FEA8E1884346D00E1A16F /* ARUserManager+Stubs.m in Sources */, B30FEF5A181EEA47009E4EAD /* ARBidButtonTests.m in Sources */, @@ -3652,6 +3681,7 @@ 5E9A78231906BA3D00734E1B /* OCMArg+ClassChecker.m in Sources */, 5E088DB11C58145600C448D7 /* UIViewController+Tests.swift in Sources */, D3C8C2061B66D2FF004CAD7F /* ARImageTests.m in Sources */, + 60E738711C64AB8B00AC381B /* ARStubbedAnalyticsProvider.m in Sources */, 3CE75A0B18B6367F00885355 /* ARValueTransformerTests.m in Sources */, 3CA1E820188465F0003C622D /* Sale+Extensions.m in Sources */, 5E1BF7491EEB239800A9ED63 /* SaleOnHoldOverlayViewTests.swift in Sources */, diff --git a/Artsy/App/ARAnalyticsVisualizer.h b/Artsy/App/ARAnalyticsVisualizer.h new file mode 100644 index 00000000000..ff4f8d1bf8b --- /dev/null +++ b/Artsy/App/ARAnalyticsVisualizer.h @@ -0,0 +1,7 @@ +#import +#import + + +@interface ARAnalyticsVisualizer : ARAnalyticalProvider + +@end diff --git a/Artsy/App/ARAnalyticsVisualizer.m b/Artsy/App/ARAnalyticsVisualizer.m new file mode 100644 index 00000000000..32f17ce0e7c --- /dev/null +++ b/Artsy/App/ARAnalyticsVisualizer.m @@ -0,0 +1,72 @@ + + +#import "ARAnalyticsVisualizer.h" +#import "ARNotificationView.h" +#import "ARScreenPresenterModule.h" + +#import + + +@implementation ARAnalyticsVisualizer + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties +{ + dispatch_async(dispatch_get_main_queue(), ^{ + NSString *title = [self alertTitleForEvent:event withProperties:properties]; + + [ARNotificationView showNoticeInView:[self findVisibleWindow] title:title time:1.5 response:^{ + UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:[properties description] preferredStyle:UIAlertControllerStyleActionSheet]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Copy Description" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[UIPasteboard generalPasteboard] setValue:[properties description]forPasteboardType:(NSString *)kUTTypePlainText]; + }]]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Copy Stack Trace for Devs" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + NSString *stack = [NSString stringWithFormat:@"%@", [NSThread callStackSymbols]]; + [[UIPasteboard generalPasteboard] setValue:stack forPasteboardType:(NSString *)kUTTypePlainText]; + }]]; + + [alert addAction:[UIAlertAction actionWithTitle:@"Great, continue." style:UIAlertActionStyleCancel handler:nil]]; + + // Sometimes the TopVC is being presented, e.g. for onboarding/ showing login, or the alerts + UIViewController *topVC = [ARScreenPresenterModule currentlyPresentedVC]; + + if (alert.popoverPresentationController) { + // Being presented on an iPad, so it needs some further configuration. + // See: https://stackoverflow.com/questions/31577140/uialertcontroller-is-crashed-ipad + alert.popoverPresentationController.sourceView = topVC.view; + alert.popoverPresentationController.sourceRect = topVC.view.bounds; + alert.popoverPresentationController.permittedArrowDirections = 0; + } + + [topVC presentViewController:alert animated:YES completion:nil]; + }]; + }); +} + +- (NSString *)alertTitleForEvent:(NSString *)event withProperties:(NSDictionary *)properties +{ + if ([event isEqualToString:@"Screen view"]) { + return [NSString stringWithFormat:@"Screen View: %@", properties[@"slug"] ?: properties[@"screen"]]; + } else { + if (properties.allKeys.count == 1) { + return [NSString stringWithFormat:@"%@: %@ - %@", event, properties.allKeys.firstObject, properties.allValues.firstObject]; + + } else { + return event; + } + } +} + +- (UIWindow *)findVisibleWindow +{ + NSArray *windows = [[UIApplication sharedApplication] windows]; + for (UIWindow *window in [windows reverseObjectEnumerator]) { + if (!window.hidden) { + return window; + } + } + return nil; +} + +@end diff --git a/Artsy/App/ARAppActivityContinuationDelegate.m b/Artsy/App/ARAppActivityContinuationDelegate.m index e34f4598eda..29bf56e81ae 100644 --- a/Artsy/App/ARAppActivityContinuationDelegate.m +++ b/Artsy/App/ARAppActivityContinuationDelegate.m @@ -3,6 +3,7 @@ #import "ARAppDelegate+Analytics.h" #import "ARUserManager.h" #import "ArtsyAPI.h" +#import "ArtsyAPI+Sailthru.h" #import #import @@ -44,8 +45,11 @@ - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserAct static void DecodeURL(NSURL *URL, void (^callback)(NSURL *URL)) { - // TODO: Decode Braze url - callback(URL); + if ([URL.host isEqualToString:SailthruLinkDomain]) { + [ArtsyAPI getDecodedURLAndRegisterClick:URL completion:callback]; + } else { + callback(URL); + } } @end diff --git a/Artsy/App/ARAppDelegate+Analytics.h b/Artsy/App/ARAppDelegate+Analytics.h index df64da3704a..6db4da22d4e 100644 --- a/Artsy/App/ARAppDelegate+Analytics.h +++ b/Artsy/App/ARAppDelegate+Analytics.h @@ -3,6 +3,7 @@ @interface ARAppDelegate (Analytics) +- (void)setupAnalytics; - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer; @end diff --git a/Artsy/App/ARAppDelegate+Analytics.m b/Artsy/App/ARAppDelegate+Analytics.m index a720c042473..de9ef0702e1 100644 --- a/Artsy/App/ARAppDelegate+Analytics.m +++ b/Artsy/App/ARAppDelegate+Analytics.m @@ -1,8 +1,48 @@ // MARK: Formatter Exempt #import "ARAppDelegate+Analytics.h" +#import #import "ARAnalyticsConstants.h" -#import +#import +#import + +#import "AROptions.h" +#import "Artsy-Swift.h" + +#import "Artist.h" +#import "Artwork.h" +#import "ARDefaults.h" +#import "ARUserManager.h" +#import "Fair.h" +#import "FairOrganizer.h" +#import "Gene.h" +#import "Partner.h" +#import "PartnerShow.h" +#import "Profile.h" +#import "ARAnalyticsVisualizer.h" +#import "ARAppNotificationsDelegate.h" + +// View Controllers +#import "ARInternalMobileWebViewController.h" +#import "ARSignUpSplashViewController.h" +#import "ARPersonalizeViewController.h" +#import "AROnboardingPersonalizeTableViewController.h" +#import "ARPriceRangeViewController.h" +#import "ARViewInRoomViewController.h" +#import "ARSharingController.h" +#import "ARNavigationController.h" +#import "ARSentryAnalyticsProvider.h" +#import "ARSegmentProvider.h" +#import "ARAugmentedRealityConfig.h" +#import "ARAugmentedVIRSetupViewController.h" +#import "ARAugmentedFloorBasedVIRViewController.h" + + +// Views +#import "ARAppStatus.h" + +#import +#import // Note the Eigen Schema: // https://docs.google.com/spreadsheets/u/1/d/1bLbeOgVFaWzLSjxLOBDNOKs757-zBGoLSM1lIz3OPiI/edit#gid=497747862 @@ -10,11 +50,54 @@ @implementation ARAppDelegate (Analytics) - (void)trackDeeplinkWithTarget:(NSURL *)url referrer:(NSString *)referrer { + [ARUserManager identifyAnalyticsUser]; NSString *concreteReferrer = referrer ? referrer : @"unknown"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsDeepLinkOpened traits:@{ + [ARAnalytics event:ARAnalyticsDeepLinkOpened withProperties:@{ @"link" : url.absoluteString, @"referrer": concreteReferrer, }]; } +- (void)setupAnalytics +{ + NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; + NSString *sentryEnv = [ReactNativeConfig envFor:@"SENTRY_DSN"]; + + if (ARAppStatus.isBetaOrDev) { + segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; + } + + if (ARAppStatus.isDev) { + sentryEnv = nil; + } + + // For OSS builds don't ship the sentry env + if (sentryEnv && ![sentryEnv isEqualToString:@"-"]) { + id sentry = [[ARSentryAnalyticsProvider alloc] initWithDSN:sentryEnv]; + [ARAnalytics setupProvider:sentry]; + } + + if ([AROptions boolForOption:AROptionsShowAnalyticsOnScreen]) { + ARAnalyticsVisualizer *visualizer = [ARAnalyticsVisualizer new]; + [ARAnalytics setupProvider:visualizer]; + } + + [ARAnalytics setupProvider:[[ARSegmentProvider alloc] initWithIdentifier:segmentWriteKey integrations:nil]]; + + [ARUserManager identifyAnalyticsUser]; + [ARAnalytics incrementUserProperty:ARAnalyticsAppUsageCountProperty byInt:1]; + + switch ([[[UIScreen mainScreen] traitCollection] userInterfaceStyle]) { + case UIUserInterfaceStyleUnspecified: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"unspecified"]; + break; + case UIUserInterfaceStyleLight: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"light"]; + break; + case UIUserInterfaceStyleDark: + [ARAnalytics setUserProperty:@"user interface style" toValue:@"dark"]; + break; + } +} + @end diff --git a/Artsy/App/ARAppDelegate+Emission.m b/Artsy/App/ARAppDelegate+Emission.m index ae07e8f24ba..2fa0ac2b251 100644 --- a/Artsy/App/ARAppDelegate+Emission.m +++ b/Artsy/App/ARAppDelegate+Emission.m @@ -34,6 +34,7 @@ #import #import #import +#import #import "ARAdminNetworkModel.h" #import "Artsy-Swift.h" @@ -115,7 +116,7 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; [ARRouter setup]; if (launchCount == 1) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsFreshInstall traits:@{}]; + [ARAnalytics event:ARAnalyticsFreshInstall]; } if (launchCount == 3) { @@ -159,18 +160,19 @@ - (void)setupSharedEmissionWithPackagerURL:(NSURL *)packagerURL; if (info[@"action_type"]) { // Track event [properties removeObjectForKey:@"action_type"]; - [[AREmission sharedInstance] sendEvent:info[@"action_type"] traits:[properties copy]]; + [ARAnalytics event:info[@"action_type"] withProperties:[properties copy]]; } else if (info[@"action"]) { if ([info[@"action"] isEqualToString:@"screen"]) { // Screen event from cohesion - [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen_owner_type"] traits:[properties copy]]; + [ARAnalytics pageView:info[@"context_screen_owner_type"] withProperties:[properties copy]]; } else { // Track event - [[AREmission sharedInstance] sendEvent:info[@"action"] traits:[properties copy]]; + [ARAnalytics event:info[@"action"] withProperties:[properties copy]]; } } else { // Screen event - [[AREmission sharedInstance] sendScreenEvent:info[@"context_screen"] traits:[properties copy]]; + [properties removeObjectForKey:@"context_screen"]; + [ARAnalytics pageView:info[@"context_screen"] withProperties:[properties copy]]; } }; } diff --git a/Artsy/App/ARAppDelegate.h b/Artsy/App/ARAppDelegate.h index 1de76424f1c..e02adda2e71 100644 --- a/Artsy/App/ARAppDelegate.h +++ b/Artsy/App/ARAppDelegate.h @@ -1,8 +1,8 @@ #import #import "AROnboardingViewController.h" -#import +#import -@class ARWindow, ArtsyEcho; +@class ARWindow, SailthruMobile, ArtsyEcho; // This class, and infact the complete JSDecoupledAppDelegate class, is not used during testing. // The test app delegate class is ARTestHelper and is responsible for seting up the test env. @@ -11,7 +11,7 @@ // (`[JSDecoupledAppDelegate sharedAppDelegate]`) to perform your tests on. -@interface ARAppDelegate : UIResponder +@interface ARAppDelegate : UIResponder + (ARAppDelegate *)sharedInstance; @@ -21,6 +21,9 @@ @property (strong, nonatomic, readonly) NSString *referralURLRepresentation; @property (strong, nonatomic, readonly) NSString *landingURLRepresentation; +/// Shared Sailthru instance. +@property (strong, readonly) SailthruMobile *sailThru; + /// The Artsy echo instance for feature flags, and url routing etc @property (nonatomic, readwrite, strong) ArtsyEcho *echo; diff --git a/Artsy/App/ARAppDelegate.m b/Artsy/App/ARAppDelegate.m index ad524c96355..5b7ef6f67c1 100644 --- a/Artsy/App/ARAppDelegate.m +++ b/Artsy/App/ARAppDelegate.m @@ -5,11 +5,10 @@ #import #import #import -#import "AppboyReactUtils.h" -#import -#import +#import #import "ARAnalyticsConstants.h" + #import "ARAppDelegate.h" #import "ARAppDelegate+Analytics.h" #import "ARAppDelegate+Emission.h" @@ -86,6 +85,8 @@ + (void)load // protocol, as it means we would have to implement `application:openURL:options:` which seems tricky if we still // have to implement `application:openURL:sourceApplication:annotation:` as well. [JSDecoupledAppDelegate sharedAppDelegate].URLResourceOpeningDelegate = (id)_sharedInstance; + + } + (ARAppDelegate *)sharedInstance @@ -131,6 +132,11 @@ - (void)setupForAppLaunch // Temp Fix for: https://github.com/artsy/eigen/issues/602 [self forceCacheCustomFonts]; + // This cannot be moved after the view setup code, as it + // relies on swizzling alloc on new objects, thus should be + // one of the first things that happen. + [self setupAnalytics]; + [JSDecoupledAppDelegate sharedAppDelegate].remoteNotificationsDelegate = [[ARAppNotificationsDelegate alloc] init]; self.window = [[ARWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; @@ -144,7 +150,7 @@ - (void)setupForAppLaunch [[ARLogger sharedLogger] startLogging]; [self setupEmission]; - self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Artsy" initialProperties:@{}]; + self.viewController = [[ARComponentViewController alloc] initWithEmission:nil moduleName:@"Main" initialProperties:@{}]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; @@ -153,6 +159,7 @@ - (void)setupForAppLaunch self.window.overrideUserInterfaceStyle = UIUserInterfaceStyleLight; } + [ARWebViewCacheHost startup]; [self registerNewSessionOpened]; } @@ -166,51 +173,30 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( [self setupForAppLaunch]; - [self setupAnalytics:application withLaunchOptions:launchOptions]; - - FBSDKApplicationDelegate *fbAppDelegate = [FBSDKApplicationDelegate sharedInstance]; - [fbAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; - if ([FIRApp defaultApp] == nil) { - [FIRApp configure]; - } - return YES; -} - -- (void)setupAnalytics:(UIApplication *)application withLaunchOptions:(NSDictionary *)launchOptions -{ - UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; - center.delegate = [self remoteNotificationsDelegate]; - NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_STAGING_APP_KEY_IOS"]; - if (![ARAppStatus isDev]) { - brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; - } + NSString *brazeAppKey = [ReactNativeConfig envFor:@"BRAZE_PRODUCTION_APP_KEY_IOS"]; - NSString *brazeSDKEndPoint = @"sdk.iad-06.braze.com"; NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary]; - appboyOptions[ABKEndpointKey] = brazeSDKEndPoint; + appboyOptions[ABKAppboyEndpointDelegateKey] = self; [Appboy startWithApiKey:brazeAppKey inApplication:application withLaunchOptions:launchOptions withAppboyOptions:appboyOptions]; - NSString *segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_STAGING_WRITE_KEY_IOS"]; - if (![ARAppStatus isDev]) { - segmentWriteKey = [ReactNativeConfig envFor:@"SEGMENT_PRODUCTION_WRITE_KEY_IOS"]; + FBSDKApplicationDelegate *fbAppDelegate = [FBSDKApplicationDelegate sharedInstance]; + [fbAppDelegate application:application didFinishLaunchingWithOptions:launchOptions]; + if ([FIRApp defaultApp] == nil) { + [FIRApp configure]; } + return YES; +} - SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:segmentWriteKey]; - configuration.trackApplicationLifecycleEvents = YES; - configuration.trackPushNotifications = YES; - configuration.trackDeepLinks = YES; - [SEGAnalytics setupWithConfiguration:configuration]; - [[SEGAppboyIntegrationFactory instance] saveLaunchOptions:launchOptions]; - [[AppboyReactUtils sharedInstance] populateInitialUrlFromLaunchOptions:launchOptions]; +- (NSString *)getApiEndpoint:(NSString *)appboyApiEndpoint { + return @"sdk.iad-06.braze.com"; } - (void)registerNewSessionOpened { - // TODO: Customise APPBOY Sessions - //A session is started when you call [[Appboy sharedInstance] startWithApiKey:inApplication:withLaunchOptions:withAppboyOptions] + [ARAnalytics startTimingEvent:ARAnalyticsTimePerSession]; } /// This happens every time we come _back_ to the app from the background @@ -218,22 +204,16 @@ - (void)registerNewSessionOpened - (void)applicationWillEnterForeground:(UIApplication *)application { [self registerNewSessionOpened]; - - NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; - if (currentUserId) { - [[Appboy sharedInstance] changeUser: currentUserId]; - } } - (void)applicationDidEnterBackground:(UIApplication *)application { - // MANUALLY track lifecycle event. Segment already does this if - // trackLifecycleSessions: true + [ARAnalytics finishTimingEvent:ARAnalyticsTimePerSession]; } - (ARAppNotificationsDelegate *)remoteNotificationsDelegate; { - return (ARAppNotificationsDelegate *)[[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; + return [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; } - (void)forceCacheCustomFonts @@ -249,6 +229,11 @@ - (void)forceCacheCustomFonts - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:(BOOL)animated { + // We now have a proper Artsy user, not just a local temporary ID + // So we have to re-identify the analytics user + // to ensure we start sending the Gravity ID as well as the local temporary ID + [ARUserManager identifyAnalyticsUser]; + // And update emission's auth state [[AREmission sharedInstance] updateState:@{ [ARStateKey userID]: [[[ARUserManager sharedManager] currentUser] userID], @@ -256,16 +241,13 @@ - (void)finishOnboarding:(AROnboardingViewController *)viewController animated:( [ARStateKey authenticationToken]: [[ARUserManager sharedManager] userAuthenticationToken], }]; - NSString *currentUserId = [[[ARUserManager sharedManager] currentUser] userID]; - [[Appboy sharedInstance] changeUser: currentUserId]; - ar_dispatch_main_queue(^{ if ([User currentUser]) { [self setupAdminTools]; } if (!([[NSUserDefaults standardUserDefaults] integerForKey:AROnboardingUserProgressionStage] == AROnboardingStageOnboarding)) { - ARAppNotificationsDelegate *remoteNotificationsDelegate = [self remoteNotificationsDelegate]; + ARAppNotificationsDelegate *remoteNotificationsDelegate = [[JSDecoupledAppDelegate sharedAppDelegate] remoteNotificationsDelegate]; [remoteNotificationsDelegate registerForDeviceNotificationsWithContext:ARAppNotificationsRequestContextOnboarding]; } }); diff --git a/Artsy/App/ARAppNotificationsDelegate.h b/Artsy/App/ARAppNotificationsDelegate.h index 9678d8a58a6..b834f9ee588 100644 --- a/Artsy/App/ARAppNotificationsDelegate.h +++ b/Artsy/App/ARAppNotificationsDelegate.h @@ -2,9 +2,8 @@ #import #import -#import -@interface ARAppNotificationsDelegate : NSObject +@interface ARAppNotificationsDelegate : NSObject typedef NS_ENUM(NSInteger, ARAppNotificationsRequestContext) { ARAppNotificationsRequestContextLaunch, diff --git a/Artsy/App/ARAppNotificationsDelegate.m b/Artsy/App/ARAppNotificationsDelegate.m index e5e9e9bfb8a..106351d42f7 100644 --- a/Artsy/App/ARAppNotificationsDelegate.m +++ b/Artsy/App/ARAppNotificationsDelegate.m @@ -3,8 +3,6 @@ #import "ArtsyAPI+Notifications.h" #import "ArtsyAPI+DeviceTokens.h" #import "ArtsyAPI+CurrentUserFunctions.h" -#import -#import #import "ARAppDelegate.h" #import "ARAppConstants.h" @@ -19,6 +17,7 @@ #import #import +#import #import #import "Appboy-iOS-SDK/AppboyKit.h" @@ -94,7 +93,7 @@ - (void)registerUserInterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext, @@ -118,11 +117,12 @@ - (void)registerUserDisinterest analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationLocal traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationLocal withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext }]; + [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:ARPushNotificationsDialogueLastSeenDate]; } @@ -167,7 +167,7 @@ - (void)registerForDeviceNotificationsWithApple UNAuthorizationOptions authOptions = (UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert); [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { NSString *grantedString = granted ? @"YES" : @"NO"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationsRequested traits:@{@"granted" : grantedString}]; + [ARAnalytics event:ARAnalyticsPushNotificationsRequested withProperties:@{@"granted" : grantedString}]; [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted]; }]; @@ -189,7 +189,7 @@ - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotif analyticsContext = @"Launch"; } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Cancel", @"context_screen" : analyticsContext @@ -212,7 +212,7 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio } analyticsContext = [@[@"PushNotification", analyticsContext] componentsJoinedByString:@""]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsPushNotificationApple traits:@{ + [ARAnalytics event:ARAnalyticsPushNotificationApple withProperties:@{ @"action_type" : @"Tap", @"action_name" : @"Yes", @"context_screen" : analyticsContext @@ -231,11 +231,12 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio // Save device token purely for the admin settings view. [[NSUserDefaults standardUserDefaults] setValue:deviceToken forKey:ARAPNSDeviceTokenKey]; - [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsEnabledNotificationsProperty: @1}]; - [[Appboy sharedInstance] registerDeviceToken:deviceTokenData]; + [[Appboy sharedInstance] registerPushToken:deviceToken]; // We only record device tokens on the Artsy service in case of Beta or App Store builds. #ifndef DEBUG + [ARAnalytics setUserProperty:ARAnalyticsEnabledNotificationsProperty toValue:@"true"]; + // Apple says to always save the device token, as it may change. In addition, since we allow a device to register // for notifications even if the user has not signed-in, we must be sure to always update this to ensure the Artsy // service always has an up-to-date record of devices and associated users. @@ -257,17 +258,10 @@ - (void)application:(UIApplication *)application didRegisterForRemoteNotificatio - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler; { - + [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; [[Appboy sharedInstance] registerApplication:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:handler]; - - if ([Appboy sharedInstance] == nil) { - [[SEGAppboyIntegrationFactory instance] saveRemoteNotification:userInfo]; - } - - [self applicationDidReceiveRemoteNotification:userInfo inApplicationState:application.applicationState]; - handler(UIBackgroundFetchResultNoData); } @@ -314,13 +308,12 @@ - (void)applicationDidReceiveRemoteNotification:(NSDictionary *)userInfo inAppli - (void)receivedNotification:(NSDictionary *)notificationInfo; { - [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationReceived traits:notificationInfo]; - [[SEGAnalytics sharedAnalytics] receivedRemoteNotification:notificationInfo]; + [ARAnalytics event:ARAnalyticsNotificationReceived withProperties:notificationInfo]; } - (void)tappedNotification:(NSDictionary *)notificationInfo url:(NSString *)url; { - [[AREmission sharedInstance] sendEvent:ARAnalyticsNotificationTapped traits:notificationInfo]; + [ARAnalytics event:ARAnalyticsNotificationTapped withProperties:notificationInfo]; NSDictionary *props = [self filteredProps:notificationInfo]; [[AREmission sharedInstance] navigate:url withProps:props]; @@ -360,22 +353,4 @@ - (BOOL)tokensAreTheSame:(NSString *)newToken previousToken:(NSString * _Nullabl } } -#pragma mark - UNUserNotificationCenterDelegate - -- (void)userNotificationCenter:(UNUserNotificationCenter *)center - willPresentNotification:(UNNotification *)notification - withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { - if (@available(iOS 14.0, *)) { - completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner); - } else { - completionHandler(UNNotificationPresentationOptionAlert); - } -} - -- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { - [[Appboy sharedInstance] userNotificationCenter:center - didReceiveNotificationResponse:response - withCompletionHandler:completionHandler]; -} - @end diff --git a/Artsy/App/AROptions.h b/Artsy/App/AROptions.h index 8bef7417fba..55b836c4d5a 100644 --- a/Artsy/App/AROptions.h +++ b/Artsy/App/AROptions.h @@ -3,6 +3,7 @@ // All the options as consts extern NSString *const AROptionsDebugARVIR; extern NSString *const AROptionsDisableNativeLiveAuctions; +extern NSString *const AROptionsShowAnalyticsOnScreen; extern NSString *const AROptionsShowMartsyOnScreen; @interface AROptions : NSObject diff --git a/Artsy/App/AROptions.m b/Artsy/App/AROptions.m index d857255acf9..e48bf6ba96e 100644 --- a/Artsy/App/AROptions.m +++ b/Artsy/App/AROptions.m @@ -7,6 +7,7 @@ // Up here is the NSUserDefault set, and sent into Emission // UI Tweaks +NSString *const AROptionsShowAnalyticsOnScreen = @"AROptionsShowAnalyticsOnScreen"; NSString *const AROptionsShowMartsyOnScreen = @"AROptionsShowMartsyOnScreen"; // UX changes diff --git a/Artsy/App/ARScreenPresenterModule.m b/Artsy/App/ARScreenPresenterModule.m index ca47415dab1..96b71252798 100644 --- a/Artsy/App/ARScreenPresenterModule.m +++ b/Artsy/App/ARScreenPresenterModule.m @@ -105,12 +105,12 @@ - (dispatch_queue_t)methodQueue; ARModalViewController *modal = [[ARModalViewController alloc] initWithStack:stack]; modal.modalPresentationStyle = modalPresentationStyle; - + UIViewController *topVC = [self.class currentlyPresentedVC]; UIViewController *parentVC = [topVC presentingViewController]; - + BOOL shouldReplaceTopVC = [viewDescriptor[@"replace"] boolValue]; - + if (shouldReplaceTopVC) { [parentVC dismissViewControllerAnimated:NO completion:^{ [parentVC presentViewController:modal animated:YES completion:^{ @@ -347,31 +347,28 @@ - (void)presentNativeEmailComposer:(nonnull NSString *)toAddress subject:(nonnul // But in case there is severe RAM or disk pressure, the image might already be evicted from the cache. // In the rare occurence that a cache lookup fails, download the image into the cache first. SDWebImageManager *manager = [SDWebImageManager sharedManager]; - NSString *key = [manager cacheKeyForURL:url]; - [manager.imageCache containsImageForKey:key cacheType:SDImageCacheTypeAll completion:^(SDImageCacheType containsCacheType) { - if (containsCacheType != SDImageCacheTypeNone) { - [manager.imageCache queryImageForKey:key options:0 context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - // TODO: Verify that this _does_ actually get a cache hit most often. + if ([manager cachedImageExistsForURL:url]) { + NSString *key = [manager cacheKeyForURL:url]; + UIImage *image = [manager.imageCache imageFromDiskCacheForKey:key]; + // TODO: Verify that this _does_ actually get a cache hit most often. + gotImageBlock(image); + } else { + [manager downloadImageWithURL:url options:(SDWebImageHighPriority) progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL *imageURL) { + if (finished && !error) { gotImageBlock(image); - }]; - } else { - [manager loadImageWithURL:url options:SDWebImageHighPriority progress:nil completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, SDImageCacheType cacheType, BOOL finished, NSURL * _Nullable imageURL) { - if (finished && !error) { - gotImageBlock(image); - } else { - // Errors are unlikely to happen, but we should handle them just in case. - // This represents both an image cache-miss _and_ a failure to - // download the image on its own. Very unlikely. - NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); - UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; - UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; - [alert addAction:defaultAction]; - [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; - } - }]; - } - }]; - }]; + } else { + // Errors are unlikely to happen, but we should handle them just in case. + // This represents both an image cache-miss _and_ a failure to + // download the image on its own. Very unlikely. + NSLog(@"[ARAppDelegate+Emission] Couldn't download image for AR VIR (%@, %@): %@", artworkSlug, imageURL, error); + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Failed to Load Image" message:@"We could not download the image to present in View-in-Room." preferredStyle:UIAlertControllerStyleAlert]; + UIAlertAction *defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; + [alert addAction:defaultAction]; + [[self.class currentlyPresentedVC] presentViewController:alert animated:YES completion:nil]; + } + }]; + } + }]; } #pragma mark - MFMailComposeViewControllerDelegate diff --git a/Artsy/App/ARSegmentProvider.h b/Artsy/App/ARSegmentProvider.h new file mode 100644 index 00000000000..6dd9cfb0c1d --- /dev/null +++ b/Artsy/App/ARSegmentProvider.h @@ -0,0 +1,9 @@ +#import +#import "SegmentioProvider.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ARSegmentProvider : SegmentioProvider +@end + +NS_ASSUME_NONNULL_END diff --git a/Artsy/App/ARSegmentProvider.m b/Artsy/App/ARSegmentProvider.m new file mode 100644 index 00000000000..60e2a17ca74 --- /dev/null +++ b/Artsy/App/ARSegmentProvider.m @@ -0,0 +1,36 @@ +#import "ARSegmentProvider.h" +#import "ARAnalyticsProviders.h" +#import "SEGAnalytics.h" + +@interface ARSegmentProvider () +@property (nonatomic, copy) NSDictionary *traits; +@end + +@implementation ARSegmentProvider + +/* + * Overrides initializer to disable tracking the idfa in the Segment config + * the rest of the provider's functionality should be the same + */ +- (instancetype)initWithIdentifier:(NSString *)identifier integrations:(NSArray *)integrations { + if ((self = [super init])) { + SEGAnalyticsConfiguration *config = [SEGAnalyticsConfiguration configurationWithWriteKey:identifier]; + config.enableAdvertisingTracking = NO; + for (id integration in integrations) { + [config use:integration]; + } + [SEGAnalytics setupWithConfiguration:config]; + _traits = @{}; + } + return self; +} + +/* + * Overrides identify call to not pass emails to Segment + */ +- (void)identifyUserWithID:(NSString *)userID anonymousID:(NSString *)anonymousID andEmailAddress:(NSString *)email { + [super identifyUserWithID:userID anonymousID:anonymousID andEmailAddress:nil]; +} + +@end + diff --git a/Artsy/App/ARSentryAnalyticsProvider.h b/Artsy/App/ARSentryAnalyticsProvider.h new file mode 100644 index 00000000000..428c71ba1b1 --- /dev/null +++ b/Artsy/App/ARSentryAnalyticsProvider.h @@ -0,0 +1,6 @@ +#import +#import + +@interface ARSentryAnalyticsProvider : ARAnalyticalProvider +- (id)initWithDSN:(NSString *)DSN; +@end diff --git a/Artsy/App/ARSentryAnalyticsProvider.m b/Artsy/App/ARSentryAnalyticsProvider.m new file mode 100644 index 00000000000..c8530d62e4e --- /dev/null +++ b/Artsy/App/ARSentryAnalyticsProvider.m @@ -0,0 +1,44 @@ +#import "ARSentryAnalyticsProvider.h" +#import +#import +#import +#import +#import + +@implementation ARSentryAnalyticsProvider + +- (id)initWithDSN:(NSString *)DSN +{ + self = [super init]; + if (!self) { return nil; } + + [SentrySDK startWithConfigureOptions:^(SentryOptions *options) { + options.dsn = DSN; + }]; + + return self; +} + +- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email +{ + if (userID) { + NSParameterAssert(email); + SentryUser *user = [[SentryUser alloc] initWithUserId:userID]; + user.email = email; + user.username = email; + [SentrySDK setUser:user]; + } +} + +// An event in Sentry terms is a crash, so in this case we're sending along events from analytics as breadcrumbs + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties +{ + SentryBreadcrumb *breadcrumb = [[SentryBreadcrumb alloc] initWithLevel:kSentryLevelDebug category:event]; + breadcrumb.data = properties; + breadcrumb.timestamp = [NSDate new]; + [SentrySDK addBreadcrumb:breadcrumb]; +} + +@end + diff --git a/Artsy/App_Resources/Artsy-Info.plist b/Artsy/App_Resources/Artsy-Info.plist index cd670a6b684..07569efc426 100644 --- a/Artsy/App_Resources/Artsy-Info.plist +++ b/Artsy/App_Resources/Artsy-Info.plist @@ -2,11 +2,6 @@ - Braze - - LogLevel - 0 - AppIdentifierPrefix $(AppIdentifierPrefix) CFBundleDevelopmentRegion diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h index 79ddaeeed23..eae013afd81 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.h @@ -7,7 +7,7 @@ - (void)ar_setImageWithURL:(NSURL *)url; -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completed; +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completed; - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder; diff --git a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m index a44f1c19fb0..0ce27b13fa3 100644 --- a/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m +++ b/Artsy/Categories/Apple/UIImageView+AsyncImageLoading.m @@ -1,5 +1,4 @@ #import -#import #import #import "ARAppConstants.h" @@ -12,7 +11,7 @@ @implementation UIImageView (AsyncImageLoading) - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder - completed:(SDExternalCompletionBlock)completionBlock + completed:(SDWebImageCompletionBlock)completionBlock { if (!placeholder) { placeholder = [UIImage imageFromColor:[UIColor artsyGrayRegular]]; @@ -20,19 +19,13 @@ - (void)ar_setImageWithURL:(NSURL *)url // In testing provide the ability to do a synchronous fast image cache call if (!ARPerformWorkAsynchronously) { - SDImageCache *imageCache = [SDImageCache sharedImageCache]; - NSString *key = url.absoluteString; - [imageCache containsImageForKey:key cacheType:SDImageCacheTypeMemory completion:^(SDImageCacheType containsCacheType) { - if (containsCacheType != SDImageCacheTypeNone) { - [imageCache queryImageForKey:key options:SDWebImageQueryMemoryDataSync context:nil cacheType:containsCacheType completion:^(UIImage * _Nullable image, NSData * _Nullable data, SDImageCacheType cacheType) { - self.image = image; - if (completionBlock != nil) { - completionBlock(self.image, nil, containsCacheType, url); - } - }]; - return; - } - }]; + SDWebImageManager *manager = [SDWebImageManager sharedManager]; + if ([manager cachedImageExistsForURL:url]) { + NSString *key = [manager cacheKeyForURL:url]; + self.image = [manager.imageCache imageFromDiskCacheForKey:key]; + if (completionBlock) { completionBlock(self.image, nil, SDImageCacheTypeDisk, url); } + return; + } } if ([ARLogger shouldLogNetworkRequests]) { @@ -69,7 +62,7 @@ - (void)ar_setImageWithURL:(NSURL *)url if (completionBlock) { completionBlock(image, error, cacheType, imageURL); } - }]; + }]; } else { [self sd_setImageWithURL:url placeholderImage:placeholder completed:completionBlock]; } @@ -85,7 +78,8 @@ - (void)ar_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder [self ar_setImageWithURL:url placeholderImage:placeholder completed:nil]; } -- (void)ar_setImageWithURL:(NSURL *)url completed:(SDExternalCompletionBlock)completionBlock{ +- (void)ar_setImageWithURL:(NSURL *)url completed:(SDWebImageCompletionBlock)completionBlock +{ [self ar_setImageWithURL:url placeholderImage:nil completed:completionBlock]; } diff --git a/Artsy/Networking/API_Modules/ARUserManager.h b/Artsy/Networking/API_Modules/ARUserManager.h index ab69e65ee3a..e9ce64210bd 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.h +++ b/Artsy/Networking/API_Modules/ARUserManager.h @@ -14,6 +14,8 @@ extern NSString *const ARUserSessionStartedNotification; + (BOOL)didCreateAccountThisSession; ++ (void)identifyAnalyticsUser; + - (User *)currentUser; - (void)storeUserData; diff --git a/Artsy/Networking/API_Modules/ARUserManager.m b/Artsy/Networking/API_Modules/ARUserManager.m index c479b565210..04ee172335e 100644 --- a/Artsy/Networking/API_Modules/ARUserManager.m +++ b/Artsy/Networking/API_Modules/ARUserManager.m @@ -23,6 +23,7 @@ #import "ARDispatchManager.h" #import "ARScreenPresenterModule.h" +#import #import #import @@ -61,6 +62,15 @@ + (BOOL)didCreateAccountThisSession return self.sharedManager.didCreateAccountThisSession; } ++ (void)identifyAnalyticsUser +{ + User *user = [User currentUser]; + NSString *anonymousID = self.sharedManager.localTemporaryUserUUID; + + [ARAnalytics setUserProperty:@"is_temporary_user" toValue:@(user == nil)]; + [ARAnalytics identifyUserWithID:user.userID anonymousID:anonymousID andEmailAddress:user.email]; +} + - (instancetype)init { self = [super init]; @@ -328,7 +338,7 @@ - (void)createUserWithName:(NSString *)name if (success) success(user); - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"email"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"email"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { ARActionLog(@"Creating a new user account failed. Error: %@,\nJSON: %@", error.localizedDescription, JSON); failure(error, JSON); @@ -359,7 +369,7 @@ - (void)createUserViaFacebookWithToken:(NSString *)token email:(NSString *)email if (success) { success(user); } - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"facebook"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"facebook"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -393,7 +403,7 @@ - (void)createUserViaAppleWithUID:(NSString *)appleUID if (success) { success(user); } - [[AREmission sharedInstance] sendEvent:ARAnalyticsAccountCreated traits:@{@"context_type" : @"apple"}]; + [ARAnalytics event:ARAnalyticsAccountCreated withProperties:@{@"context_type" : @"apple"}]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { failure(error, JSON); @@ -470,7 +480,7 @@ - (void)sendPasswordResetForEmail:(NSString *)email success:(void (^)(void))succ AFHTTPRequestOperation *op = [AFHTTPRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { if (success) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPasswordSent traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingForgotPasswordSent]; success(); } } @@ -493,6 +503,8 @@ - (void)storeUserData [NSKeyedArchiver archiveRootObject:self.currentUser toFile:userDataPath]; #pragma clang diagnostic pop + [ARUserManager identifyAnalyticsUser]; + [[NSUserDefaults standardUserDefaults] setObject:self.currentUser.userID forKey:ARUserIdentifierDefault]; [[NSUserDefaults standardUserDefaults] synchronize]; } @@ -724,7 +736,7 @@ - (void)tryLoginWithSharedWebCredentials:(void (^)(NSError *error))completion; } else { NSDictionary *account = [(__bridge NSArray *)credentials firstObject]; if (account) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"safari keychain"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"safari keychain"}]; [[ARUserManager sharedManager] loginWithUsername:account[(__bridge NSString *)kSecAttrAccount] password:account[(__bridge NSString *)kSecSharedPassword] diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h new file mode 100644 index 00000000000..f87949c3dbb --- /dev/null +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.h @@ -0,0 +1,11 @@ +#import "ArtsyAPI.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface ArtsyAPI (Sailthru) + ++ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m new file mode 100644 index 00000000000..8dff80332d5 --- /dev/null +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sailthru.m @@ -0,0 +1,35 @@ +#import "ArtsyAPI+Sailthru.h" +#import "ARRouter.h" + +#import +#import + +@implementation ArtsyAPI (Sailthru) + ++ (void)getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; +{ + [[[AREmission sharedInstance] notificationsManagerModule] afterBootstrap:^{ + [ARRouter setup]; + [ArtsyAPI _getDecodedURLAndRegisterClick:encodedURL completion:completion]; + }]; +} + ++ (void)_getDecodedURLAndRegisterClick:(NSURL *)encodedURL completion:(void (^)(NSURL *decodedURL))completion; +{ + NSURLRequest *request = [ARRouter newSailthruRegisterClickAndDecodeURLRequest:encodedURL]; + AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; + [operation setRedirectResponseBlock:^NSURLRequest *(id _, NSURLRequest *request, NSURLResponse *response) { + if (response == nil) { + return request; + } else { + NSURL *decodedURL = [NSURL URLWithString:[(NSHTTPURLResponse *)response allHeaderFields][@"Location"]]; + dispatch_async(dispatch_get_main_queue(), ^{ + completion(decodedURL); + }); + return nil; + } + }]; + [[NSOperationQueue mainQueue] addOperation:operation]; +} + +@end diff --git a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m index fcc5a3d21c1..36cb9cdd556 100644 --- a/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m +++ b/Artsy/Networking/API_Modules/ArtsyAPI+Sales.m @@ -7,6 +7,7 @@ #import "MTLModel+JSON.h" #import +#import @implementation ArtsyAPI (Sales) diff --git a/Artsy/Networking/ARAuthProviders.m b/Artsy/Networking/ARAuthProviders.m index 9cfd5f99805..0762cad409a 100644 --- a/Artsy/Networking/ARAuthProviders.m +++ b/Artsy/Networking/ARAuthProviders.m @@ -7,7 +7,7 @@ #import #import -#import +#import #import "ARAnalyticsConstants.h" #import @@ -29,7 +29,7 @@ + (void)getTokenForFacebook:(void (^)(NSString *token, NSString *email, NSString } else if (!error && !result.token) { NSString *description = error ? [error description] : @"token was nil"; - [[AREmission sharedInstance] sendEvent:ARAnalyticsErrorFailedToGetFacebookCredentials traits:@{ @"error" : description }]; + [ARAnalytics event:ARAnalyticsErrorFailedToGetFacebookCredentials withProperties:@{ @"error" : description }]; ARErrorLog(@"Couldn't get Facebook credentials"); failure(error); diff --git a/Artsy/Networking/ARRouter.h b/Artsy/Networking/ARRouter.h index 175abcbc9e7..801321978e4 100644 --- a/Artsy/Networking/ARRouter.h +++ b/Artsy/Networking/ARRouter.h @@ -128,5 +128,6 @@ #pragma mark - Misc + (NSURLRequest *)newHEADRequestForPath:(NSString *)path; ++ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; @end diff --git a/Artsy/Networking/ARRouter.m b/Artsy/Networking/ARRouter.m index 16e90e0d161..64e2998052a 100644 --- a/Artsy/Networking/ARRouter.m +++ b/Artsy/Networking/ARRouter.m @@ -746,4 +746,9 @@ + (NSURLRequest *)newHEADRequestForPath:(NSString *)path return [self requestWithMethod:@"HEAD" URLString:fullPath parameters:nil]; } ++ (NSURLRequest *)newSailthruRegisterClickAndDecodeURLRequest:(NSURL *)encodedURL; +{ + return [self requestWithMethod:@"HEAD" URLString:encodedURL.absoluteString parameters:nil]; +} + @end diff --git a/Artsy/Networking/ArtsyAPI.m b/Artsy/Networking/ArtsyAPI.m index 7b41bed2fbf..a4cfeba7a87 100644 --- a/Artsy/Networking/ArtsyAPI.m +++ b/Artsy/Networking/ArtsyAPI.m @@ -15,6 +15,7 @@ #import #import #import +#import #import #import @@ -49,7 +50,7 @@ + (AFHTTPRequestOperation *)performGraphQLRequest:(NSURLRequest *)request succes if (errors) { // GraphQL queries that fail will return 200s but indicate failures with the "errors" key. We need to check them. NSLog(@"Failure fetching GraphQL query: %@", errors); - [[AREmission sharedInstance] sendEvent:ARAnalyticsGraphQLResponseError traits:json]; + [ARAnalytics event:ARAnalyticsGraphQLResponseError withProperties:json]; if (failure) { failure([NSError errorWithDomain:@"GraphQL" code:0 userInfo:json]); } @@ -269,7 +270,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAClass:( id object = nil; if (key && [jsonDictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[jsonDictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:jsonDictionary error:nil]; } @@ -342,7 +343,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO if (key && [dictionary valueForKeyPath:key]) { object = [klass modelWithJSON:[dictionary valueForKeyPath:key] error:nil]; - + } else { object = [klass modelWithJSON:dictionary error:nil]; } @@ -351,7 +352,7 @@ - (AFHTTPRequestOperation *)getRequest:(NSURLRequest *)request parseIntoAnArrayO [returnArray addObject:object]; } } - + ar_dispatch_main_queue(^{ success(returnArray); }); diff --git a/Artsy/Resources/Artsy-Bridging-Header.h b/Artsy/Resources/Artsy-Bridging-Header.h index 1cf4c789df2..0c6ea08df08 100644 --- a/Artsy/Resources/Artsy-Bridging-Header.h +++ b/Artsy/Resources/Artsy-Bridging-Header.h @@ -90,6 +90,7 @@ #import #import #import +#import #import #import #import diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m index a539758c858..2512ee80eea 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedFloorBasedVIRViewController.m @@ -10,7 +10,7 @@ #import "ARAppConstants.h" #import "ARDefaults.h" #import -#import +#import #import #import #import @@ -283,7 +283,7 @@ - (void)dismissInformationalView:(BOOL)animated - (void)hasRegisteredPlanes { - [[AREmission sharedInstance] sendEvent:@"success" traits:@{ + [ARAnalytics event:@"success" withProperties:@{ @"action_name" : @"arDetectedPlanes", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @@ -317,13 +317,12 @@ - (void)isShowingGhostWall:(BOOL)showing - (void)hasPlacedArtwork { - [[AREmission sharedInstance] sendEvent:@"success" traits:@{ + [ARAnalytics event:@"success" withProperties:@{ @"action_name" : @"arPlacedArtwork", @"owner_type" : @"artwork", @"owner_id" : self.config.artworkID ?: @"unknown", @"owner_slug": self.config.artworkSlug ?: @"unknown", }]; - ar_dispatch_main_queue(^{ [self.informationView next]; }); @@ -342,7 +341,7 @@ - (void)hasPlacedWall - (void)exitARContext { - [[AREmission sharedInstance] sendEvent:@"ar_view_in_room_time" traits:@{ + [ARAnalytics event:@"ar_view_in_room_time" withProperties:@{ @"length" : @([self timeInAR]) }]; // Ensure we jump past the SetupVC @@ -424,7 +423,7 @@ - (void)viewDidAppear:(BOOL)animated; { [super viewDidAppear:animated]; - [[AREmission sharedInstance] sendScreenEvent:@"AR View in Room" traits:@{}]; + [ARAnalytics pageView:@"AR View in Room"]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [self presentInformationalInterface:animated]; diff --git a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m index c01a8831721..1f5d66af2ba 100644 --- a/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m +++ b/Artsy/View_Controllers/ARVIR/VCs/ARAugmentedVIRSetupViewController.m @@ -6,7 +6,7 @@ #import #import #import -#import +#import #import "ARAppConstants.h" #import "ARDefaults.h" @@ -199,7 +199,7 @@ - (void)viewDidLoad - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - [[AREmission sharedInstance] sendEvent:@"AR Allow Camera Access" traits:@{}]; + [ARAnalytics pageView:@"AR Allow Camera Access"]; } - (void)restartVideo:(NSNotification *)notification diff --git a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m index 91fdd2621df..ad5d60ca30a 100644 --- a/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m +++ b/Artsy/View_Controllers/Admin/ARAdminSettingsViewController.m @@ -69,6 +69,7 @@ - (void)viewDidLoad [tableViewData addSectionData:labsSection]; ARSectionData *toggleSections = [[ARSectionData alloc] initWithCellDataArray:@[ + [self generateOnScreenAnalytics], [self generateOnScreenMartsy] ]]; toggleSections.headerTitle = @"Options"; @@ -167,6 +168,18 @@ - (ARCellData *)showConsignmentsFlow }]; } +- (ARCellData *)generateOnScreenAnalytics +{ + NSString *message = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen] ? @"Stop" : @"Start"; + NSString * title = NSStringWithFormat(@"%@ on Screen Analytics", message); + + return [self tappableCellDataWithTitle:title selection:^{ + BOOL current = [AROptions boolForOption:AROptionsShowAnalyticsOnScreen]; + [AROptions setBool:!current forOption:AROptionsShowAnalyticsOnScreen]; + exit(YES); + }]; +} + - (ARCellData *)generateOnScreenMartsy { NSString *message = [AROptions boolForOption:AROptionsShowMartsyOnScreen] ? @"Hide" : @"Show"; diff --git a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift index 10019129990..b9e3e77473a 100644 --- a/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift +++ b/Artsy/View_Controllers/Auction/AuctionInformationViewController.swift @@ -49,7 +49,7 @@ class AuctionInformationViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) if navigationController?.topViewController == self { - AREmission.sharedInstance().sendScreenEvent("Sale Information", traits: [ + ARAnalytics.pageView("Sale Information", withProperties: [ "auction_slug": saleViewModel.saleID, "slug": NSString(format: "/auction/%@/info", saleViewModel.saleID) ]) @@ -178,7 +178,7 @@ class AuctionInformationViewController: UIViewController { } func showContact(_ animated: Bool) { - AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ + ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ "auction_slug": saleViewModel.saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" @@ -199,7 +199,7 @@ class AuctionInformationViewController: UIViewController { func showBuyersPremium(_ animated: Bool) { let saleID = saleViewModel.saleID - AREmission.sharedInstance().sendEvent(ARAnalyticsAuctionContactTapped, traits: [ + ARAnalytics.event(ARAnalyticsAuctionContactTapped, withProperties: [ "auction_slug": saleID, "auction_state": saleViewModel.saleAvailabilityString, "context_type": navigationController?.topViewController == self ? "sale" : "sale information" diff --git a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift index 3552c4a4adb..a6022dc9f6b 100644 --- a/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift +++ b/Artsy/View_Controllers/Auction/RefinementOptionsViewController.swift @@ -128,10 +128,10 @@ class RefinementAnalyticsOption: NSObject { } func sendAsEvent() { - AREmission.sharedInstance().sendEvent(name, traits: properties) + ARAnalytics.event(name, withProperties: properties) } func sendAsPageView() { - AREmission.sharedInstance().sendScreenEvent(name, traits: properties) + ARAnalytics.pageView(name, withProperties: properties) } } diff --git a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m index 3293ca1db54..c510a44cb10 100644 --- a/Artsy/View_Controllers/Core/ARViewInRoomViewController.m +++ b/Artsy/View_Controllers/Core/ARViewInRoomViewController.m @@ -1,6 +1,6 @@ #import "ARViewInRoomViewController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artwork.h" @@ -99,7 +99,7 @@ - (BOOL)prefersStatusBarHidden - (void)viewDidAppear:(BOOL)animated { - [[AREmission sharedInstance] sendEvent:ARAnalyticsArtworkViewInRoom traits:@{ + [ARAnalytics event:ARAnalyticsArtworkViewInRoom withProperties:@{ @"interaction_type": self.popOnRotation ? @"rotation" : @"button", @"artwork_slug": self.artwork.artworkID ?: @"", @"artist_slug": self.artwork.artist.artistID ?: @"", diff --git a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift index 16d00001f83..f5b73b8fc73 100644 --- a/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift +++ b/Artsy/View_Controllers/Live_Auctions/Views/LiveAuctionLotCollectionViewDataSource.swift @@ -7,7 +7,8 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { static let CellClass = LiveAuctionLotImageCollectionViewCell.self let salesPerson: LiveAuctionsSalesPersonType - let imagePrefetcher = SDWebImagePrefetcher.shared; + let imagePrefetcher = SDWebImagePrefetcher.shared() + init(salesPerson: LiveAuctionsSalesPersonType) { self.salesPerson = salesPerson super.init() @@ -19,7 +20,7 @@ class LiveAuctionLotCollectionViewDataSource: NSObject { func beginThumbnailPrecache() { let thumbnailURLs = (1.. Int { diff --git a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m index 2605d738f06..889cf800d05 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/AROnboardingViewController.m @@ -19,6 +19,7 @@ #import "ARParallaxEffect.h" #import "ArtsyAPI+Private.h" +#import #import "ARAnalyticsConstants.h" #import "ARDispatchManager.h" #import "ARFollowable.h" @@ -94,7 +95,7 @@ - (instancetype)init - (void)viewDidLoad { [super viewDidLoad]; - + self.view.backgroundColor = [UIColor whiteColor]; self.view.tintColor = [UIColor artsyPurpleRegular]; @@ -394,7 +395,7 @@ - (void)personalizePasswordDone:(NSString *)password - (void)personalizeLoginWithPasswordDone:(NSString *)password { [self loginUserWithEmail:self.email password:password withSuccess:^{ - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"email"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"email"}]; [self finishAccountCreation]; }]; } @@ -476,7 +477,7 @@ - (void)conditionsOfSaleLinkTapped - (void)setPriceRangeDone:(NSInteger)range { NSString *stringRange = [NSString stringWithFormat:@"%@", @(range)]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingBudgetSelected traits:@{ @"budget" : stringRange }]; + [ARAnalytics event:ARAnalyticsOnboardingBudgetSelected withProperties:@{ @"budget" : stringRange }]; self.budgetRange = range; } @@ -556,7 +557,7 @@ - (void)sendPasswordResetEmail:(NSString *)email sender:(id)sender } failure:^(NSError *error) { ARErrorLog(@"Password reset failed for %@. Error: %@", email, error.localizedDescription); [(ARPersonalizeViewController *)sender passwordResetError:@"Couldn’t send reset password link. Please try again, or contact support@artsy.net"]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : @"Couldn’t send reset password link."}]; + [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : @"Couldn’t send reset password link."}]; }]; } @@ -565,7 +566,7 @@ - (void)applyPersonalizationToUser { if (self.budgetRange && self.followedItemsDuringOnboarding) { NSString *stringRange = [NSString stringWithFormat:@"%@", @(self.budgetRange)]; - [[AREmission sharedInstance] sendIdentifyEvent:@{ARAnalyticsPriceRangeProperty: stringRange}]; + [ARAnalytics setUserProperty:ARAnalyticsPriceRangeProperty toValue:stringRange]; User *user = [User currentUser]; user.priceRange = stringRange; @@ -675,8 +676,8 @@ - (void)loginWithFacebookCredentialToken:(NSString *)token // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"facebook"}]; - [sself finishAccountCreation]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"facebook"}]; + [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; } @@ -816,7 +817,7 @@ - (void)loginWithAppleUID:(NSString *)appleUID idToken:(NSString *)idToken { // we've logged them in, let's wrap up [sself ar_removeIndeterminateLoadingIndicatorAnimated:YES]; if (sself.state == AROnboardingStagePersonalizeEmail || sself.state == AROnboardingStateAcceptConditions) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsLoggedIn traits:@{@"context_type" : @"apple"}]; + [ARAnalytics event:ARAnalyticsLoggedIn withProperties:@{@"context_type" : @"apple"}]; [sself finishAccountCreation]; } else if (sself.state == AROnboardingStagePersonalizeName) { [sself presentPersonalizationQuestionnaires]; @@ -854,7 +855,7 @@ - (void)displayError:(NSString *)errorMessage } } [(ARPersonalizeViewController *)self.topViewController showErrorWithMessage:errorMessage]; - [[AREmission sharedInstance] sendEvent:ARAnalyticsAuthError traits:@{@"error_message" : errorMessage}]; + [ARAnalytics event:ARAnalyticsAuthError withProperties:@{@"error_message" : errorMessage}]; } - (void)displayNetworkFailureError diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m index 42c2136af2b..5421067ed8b 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/2_-_Calls_to_Action/ARSignUpSplashViewController.m @@ -19,7 +19,7 @@ #import #import #import -#import +#import @interface ARSignUpSplashTextViewController : UIViewController @@ -88,7 +88,7 @@ - (void)viewWillAppear:(BOOL)animated - (void)viewDidAppear:(BOOL)animated { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding start" traits:@{}]; + [ARAnalytics pageView:@"Onboarding start"]; void(^removeSpinners)(void) = ^ { if (!self.spinnerView) { return; @@ -191,7 +191,7 @@ - (void)showBackgroundViews // Business as usual [self.spinnerView alignToView:self.view]; } - + [self.spinnerView startAnimating]; NSArray *images = [self.pages map:^id(NSDictionary *object) { @@ -215,7 +215,7 @@ - (void)setupControls; [self.getStartedButton setBackgroundColor:[UIColor blackColor] forState:UIControlStateHighlighted]; [self.getStartedButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted]; } - + self.descriptionLabel = [[ARSerifLineHeightLabel alloc] initWithLineSpacing:6]; self.descriptionLabel.backgroundColor = [UIColor clearColor]; self.descriptionLabel.opaque = NO; @@ -224,10 +224,10 @@ - (void)setupControls; self.descriptionLabel.textAlignment = NSTextAlignmentCenter; self.descriptionLabel.numberOfLines = 0; self.descriptionLabel.text = self.pages[0][@"copy"]; - + ARTermsAndConditionsView *label = [[ARTermsAndConditionsView alloc] init]; label.hidden = YES; - + [self.view addSubview:self.descriptionLabel]; [self.view addSubview:self.getStartedButton]; [self.view addSubview:label]; @@ -235,11 +235,11 @@ - (void)setupControls; [self.descriptionLabel constrainWidth:self.useLargeLayout ? @"500" : @"280" height:self.useLargeLayout ? @"160" : @"120"]; [self.descriptionLabel alignCenterXWithView:self.view predicate:@"0"]; self.spaceDescription = [self.descriptionLabel constrainBottomSpaceToView:self.getStartedButton predicate:self.useLargeLayout ? @"-190" : @"-25"]; - + [self.getStartedButton alignBottomEdgeWithView:label predicate:self.useLargeLayout ? @"-170" : @"-80"]; [self.getStartedButton alignCenterXWithView:self.view predicate:@"0"]; [self.getStartedButton constrainWidth:self.useLargeLayout ? @"340" : @"300" height:@"50"]; - + [label constrainWidth:@"280" height:@"40"]; [label alignCenterXWithView:self.view predicate:@"0"]; @@ -288,7 +288,7 @@ - (UIImage *)backgroundImage - (void)startOnboarding:(id)sender { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingGetStarted traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingGetStarted]; [self.delegate splashDone:self]; } diff --git a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m index 2a091908d26..fda9627d05b 100644 --- a/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m +++ b/Artsy/View_Controllers/Login_and_Onboarding/Onboarding_stages/5-_Onboarding_Personalization/ARPersonalizeViewController.m @@ -24,7 +24,6 @@ #import #import #import -#import // maxim's sneaky last comment in Eigen (for a dummy commit). This can be removed when you find it ;). @@ -102,19 +101,19 @@ - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your email" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your email"]; } else if (self.state == AROnboardingStagePersonalizeLogin) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your password" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your password"]; } else if (self.state == AROnboardingStagePersonalizePassword) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding create a password" traits:@{}]; + [ARAnalytics pageView:@"Onboarding create a password"]; } else if (self.state == AROnboardingStagePersonalizeName) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding enter your full name" traits:@{}]; + [ARAnalytics pageView:@"Onboarding enter your full name"]; } else if (self.state == AROnboardingStagePersonalizeArtists) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow artists" traits:@{}]; + [ARAnalytics pageView:@"Onboarding follow artists"]; } else if (self.state == AROnboardingStagePersonalizeCategories) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding follow categories" traits:@{}]; + [ARAnalytics pageView:@"Onboarding follow categories"]; } else if (self.state == AROnboardingStagePersonalizeBudget) { - [[AREmission sharedInstance] sendScreenEvent:@"Onboarding select budget" traits:@{}]; + [ARAnalytics pageView:@"Onboarding select budget"]; } } @@ -643,7 +642,7 @@ - (void)showErrorWithMessage:(NSString *)errorMessage - (void)forgotPassword:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingForgotPassword traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingForgotPassword]; } UIAlertController *forgotPasswordAlert = [UIAlertController alertControllerWithTitle:@"Forgot Password" message:@"Please enter your email address and we’ll send you a reset link." @@ -760,7 +759,7 @@ - (void)searchStarted }; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingTappedSearch traits:context]; + [ARAnalytics event:ARAnalyticsOnboardingTappedSearch withProperties:context]; } [self.headerView searchStarted]; } @@ -831,7 +830,7 @@ - (void)artistFollowed:(Artist *)artist sourceScreen = @"onboarding recommended"; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsArtistFollow traits:@{ + [ARAnalytics event:ARAnalyticsArtistFollow withProperties:@{ @"artist_slug" : artist.artistID ?: @"", @"artist_id" : artist.artistID ?: @"", @"source_screen" : sourceScreen @@ -880,7 +879,7 @@ - (void)categoryFollowed:(Gene *)category } else if (self.searchResultsTable.contentDisplayMode == ARTableViewContentDisplayModeRelatedResults) { sourceScreen = @"onboarding recommended"; } - [[AREmission sharedInstance] sendEvent:ARAnalyticsGeneFollow traits:@{ + [ARAnalytics event:ARAnalyticsGeneFollow withProperties:@{ @"gene_id" : category.geneID ?: @"", @"source_screen" : sourceScreen }]; @@ -990,7 +989,7 @@ - (void)nextTapped:(id)sender - (void)backTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingAlreadyAccountBack traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingAlreadyAccountBack]; } self.comingBack = YES; [self.delegate backTapped]; @@ -999,7 +998,7 @@ - (void)backTapped:(id)sender - (void)facebookSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithFacebook traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingConnectWithFacebook]; } self.comingBack = YES; [self.delegate personalizeFacebookSignInTapped]; @@ -1008,7 +1007,7 @@ - (void)facebookSignInTapped:(id)sender - (void)appleSignInTapped:(id)sender { if (self.state == AROnboardingStagePersonalizeEmail) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsOnboardingConnectWithApple traits:@{}]; + [ARAnalytics event:ARAnalyticsOnboardingConnectWithApple]; } self.comingBack = YES; [self.delegate personalizeAppleSignInTapped]; diff --git a/Artsy/View_Controllers/Util/ARFeedImageLoader.m b/Artsy/View_Controllers/Util/ARFeedImageLoader.m index 30804969304..8af4c5ea199 100644 --- a/Artsy/View_Controllers/Util/ARFeedImageLoader.m +++ b/Artsy/View_Controllers/Util/ARFeedImageLoader.m @@ -4,7 +4,7 @@ #import "UIImage+ImageFromColor.h" #import "UIImageView+AsyncImageLoading.h" -#import + // From the gravity source //version :small, if: :is_processing_delayed? do diff --git a/Artsy/View_Controllers/Util/ARNavigationController.m b/Artsy/View_Controllers/Util/ARNavigationController.m index ad42f88f71a..8a49270d079 100644 --- a/Artsy/View_Controllers/Util/ARNavigationController.m +++ b/Artsy/View_Controllers/Util/ARNavigationController.m @@ -27,6 +27,7 @@ #import #import #import +#import static void *ARNavigationControllerButtonStateContext = &ARNavigationControllerButtonStateContext; static void *ARNavigationControllerScrollingChiefContext = &ARNavigationControllerScrollingChiefContext; diff --git a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m index 3ad49a27dc3..c38eee69b36 100644 --- a/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m +++ b/Artsy/View_Controllers/Util/Errors/ARNetworkErrorManager.m @@ -2,9 +2,9 @@ #import "ARCustomEigenLabels.h" #import "ARScreenPresenterModule.h" +#import #import #import -#import @interface ARNetworkErrorManager () @property (nonatomic, strong) UILabel *activeModalView; @@ -30,7 +30,7 @@ + (void)presentActiveError:(NSError *)error; + (void)presentActiveError:(NSError *)error withMessage:(NSString *)message; { - [SentrySDK captureError:error]; + [ARAnalytics error:error withMessage:message]; ARNetworkErrorManager *manager = [self sharedManager]; if (manager.activeModalView == nil) { diff --git a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m index eafa1ce1a54..b039fa3eec3 100644 --- a/Artsy/View_Controllers/Util/Sharing/ARSharingController.m +++ b/Artsy/View_Controllers/Util/Sharing/ARSharingController.m @@ -1,6 +1,6 @@ #import "ARSharingController.h" -#import +#import #import "ARAnalyticsConstants.h" #import "Artist.h" @@ -80,7 +80,7 @@ - (void)presentActivityViewControllerFromView:(UIView *)view frame:(CGRect)frame - (void)handleActivityCompletion:(NSString *)activityType completed:(BOOL)completed { if (completed) { - [[AREmission sharedInstance] sendEvent:ARAnalyticsShare traits:@{ + [ARAnalytics event:ARAnalyticsShare withProperties:@{ @"object_type" : NSStringFromClass(self.object.class) ?: @"", @"service" : activityType ?: @"" }]; diff --git a/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m b/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m new file mode 100644 index 00000000000..590bdbca953 --- /dev/null +++ b/Artsy_Tests/Analytics_Tests/ARAppAnalyticsSpec.m @@ -0,0 +1,40 @@ +#import "ARAppDelegate.h" +#import "ARAppDelegate+Analytics.h" +#import "ARStubbedAnalyticsProvider.h" +#import +#import "ARAnalyticsConstants.h" + +/// Depending on how this spec turns out, it may be worth migrating it into it's own target +/// as, in theory, this spec can leak into all the others due to the triggering of analytics. + +/// Imports for the VC/Views + +// #import "ARArtistViewController.h" + +/// ZZ to make it go last, thanks to XCTest implmentation details +SpecBegin(ZZAppAnalytics); + +// This should only get run once, as it does all the swizzling +// calling that multiple times looks to me like it could +// end up with unexpected behavior + +beforeAll(^{ + ARAppDelegate *delegate = [[ARAppDelegate alloc] init]; + [delegate setupAnalytics]; +}); + +__block ARStubbedAnalyticsProvider *analytics; + +/// Kill off all existing providers, then replace with our easily introspected provider: + +beforeEach(^{ + analytics = [[ARStubbedAnalyticsProvider alloc] initWithIdentifier:@""]; + [[ARAnalytics currentProviders].copy each:^(id provider) { + [ARAnalytics removeProvider:provider]; + }]; + + [ARAnalytics setupProvider:analytics]; +}); + + +SpecEnd diff --git a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m index bf8e4822b92..a4e5b1b30cc 100644 --- a/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppActivityContinuationDelegateTests.m @@ -1,6 +1,7 @@ #import "ARAppActivityContinuationDelegate.h" #import "ARUserManager.h" #import "ARAppDelegate+Analytics.h" +#import "ArtsyAPI+Sailthru.h" #import #import @@ -87,6 +88,21 @@ continueUserActivity:activity restorationHandler:^(NSArray *_) {}]).to.beTruthy(); }); + + it(@"requests a decoded URL from Sailthru and then routes the WebBrowsing link to the appropriate view controller and shows it", ^{ + NSURL *sailthruURL = [NSURL URLWithString:@"https://link.artsy.net/click/some-opaque-ID"]; + + NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb]; + activity.webpageURL = sailthruURL; + + [[apiMock expect] getDecodedURLAndRegisterClick:sailthruURL + completion:[OCMArg checkWithBlock:^(void (^callback)(NSURL *URL)) { + callback(URL); + return YES; + }]]; + [delegate application:app continueUserActivity:activity restorationHandler:^(NSArray *_) {}]; + [apiMock verify]; + }); }); SpecEnd; diff --git a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m index 9c7a3c2d15e..c0611ffb424 100644 --- a/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m +++ b/Artsy_Tests/App_Tests/ARAppNotificationsDelegateTests.m @@ -1,10 +1,10 @@ #import "ARAppNotificationsDelegate.h" +#import #import "ARAnalyticsConstants.h" #import "ARNotificationView.h" #import "ARSerifNavigationViewController.h" #import "UIApplicationStateEnum.h" #import -#import static NSDictionary * DictionaryWithAppState(NSDictionary *input, UIApplicationState appState) @@ -29,33 +29,27 @@ - (UIViewController *)getGlobalTopViewController; __block UIApplication *app = nil; __block ARAppNotificationsDelegate *delegate = nil; __block UIApplicationState appState = -1; - __block id mockEmissionSharedInstance = nil; - __block id mockSegmentSharedInstance = nil; + __block id mockAnalytics = nil; beforeEach(^{ app = [UIApplication sharedApplication]; delegate = [[ARAppNotificationsDelegate alloc] init]; - mockEmissionSharedInstance = [OCMockObject partialMockForObject:AREmission.sharedInstance];; - - // Setup a segment shared instance otherwise the tests will crash - SEGAnalyticsConfiguration *configuration = [SEGAnalyticsConfiguration configurationWithWriteKey:@"GARBAGE"]; - [SEGAnalytics setupWithConfiguration:configuration]; + mockAnalytics = [OCMockObject mockForClass:[ARAnalytics class]]; }); afterEach(^{ - [mockEmissionSharedInstance stopMocking]; - [mockSegmentSharedInstance stopMocking]; + [mockAnalytics stopMocking]; }); sharedExamplesFor(@"when receiving a notification", ^(id _) { it(@"triggers an analytics event for receiving a notification", ^{ - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationReceived traits:DictionaryWithAppState(notification, appState)]; - [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationTapped traits:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationReceived withProperties:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics reject] event:ARAnalyticsNotificationTapped withProperties:OCMOCK_ANY]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; }); }); @@ -74,19 +68,21 @@ - (UIViewController *)getGlobalTopViewController; describe(@"with stubbed top menu VC", ^{ it(@"navigates to the url provided", ^{ - [[mockEmissionSharedInstance expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; + id mock = [OCMockObject partialMockForObject:AREmission.sharedInstance]; + [[mock expect] navigate:@"http://artsy.net/works-for-you" withProps: @{}]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mock verify]; + [mock stopMocking]; }); it(@"triggers an analytics event when a notification has been tapped", ^{ - [[mockEmissionSharedInstance reject] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics reject] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; }); it(@"does not display the message in aps/alert", ^{ @@ -126,12 +122,12 @@ - (UIViewController *)getGlobalTopViewController; return YES; }]]; - [[mockEmissionSharedInstance stub] sendEvent:ARAnalyticsNotificationReceived traits:OCMOCK_ANY]; - [[mockEmissionSharedInstance expect] sendEvent:ARAnalyticsNotificationTapped traits:DictionaryWithAppState(notification, appState)]; + [[mockAnalytics stub] event:ARAnalyticsNotificationReceived withProperties:OCMOCK_ANY]; + [[mockAnalytics expect] event:ARAnalyticsNotificationTapped withProperties:DictionaryWithAppState(notification, appState)]; [delegate applicationDidReceiveRemoteNotification:notification inApplicationState:appState]; - [mockEmissionSharedInstance verify]; + [mockAnalytics verify]; [mockNotificationView stopMocking]; }); diff --git a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift index 64c35891322..2bde6852c9b 100644 --- a/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift +++ b/Artsy_Tests/Extensions/ARTestImageCachingFunctions.swift @@ -4,5 +4,5 @@ func cacheColoredImageForURL(_ url: URL?, color: UIColor = UIColor.debugColourPu precondition(url != nil) let image = UIImage(from: color, with: CGSize(width: 500, height: 500)) - SDWebImageManager.shared.imageCache.store(image, imageData:nil, forKey: url!.absoluteString, cacheType: .memory, completion: nil) + SDWebImageManager.shared().saveImage(toCache: image, for: url!) } diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h new file mode 100644 index 00000000000..ff48f6b4e63 --- /dev/null +++ b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.h @@ -0,0 +1,28 @@ +#import +#import + + +@interface ARStubbedAnalyticsProvider : ARAnalyticalProvider + +@property (readonly, nonatomic, copy) NSString *lastProviderIdentifier; + +@property (readonly, nonatomic, copy) NSString *lastEventName; +@property (readonly, nonatomic, copy) NSDictionary *lastEventProperties; + +@property (readonly, nonatomic, copy) NSMutableArray *eventNames; + +@property (readonly, nonatomic, copy) NSString *lastUserPropertyValue; +@property (readonly, nonatomic, copy) NSString *lastUserPropertyKey; +@property (readonly, nonatomic, assign) NSInteger lastUserPropertyCount; + +@property (readonly, nonatomic, copy) NSString *email; +@property (readonly, nonatomic, copy) NSString *identifier; + +@property (readonly, nonatomic, strong) NSError *lastError; +@property (readonly, nonatomic, copy) NSString *lastErrorMessage; + +@property (readonly, nonatomic, strong) UINavigationController *lastMonitoredNavigationController; + +@property (readonly, nonatomic, copy) NSString *lastRemoteLog; + +@end diff --git a/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m new file mode 100644 index 00000000000..6ca65fdab5a --- /dev/null +++ b/Artsy_Tests/Stubs/ARStubbedAnalyticsProvider.m @@ -0,0 +1,73 @@ +#import "ARStubbedAnalyticsProvider.h" + + +@implementation ARStubbedAnalyticsProvider + +- (id)initWithIdentifier:(NSString *)identifier +{ + self = [super initWithIdentifier:identifier]; + if (!self) return nil; + + _lastProviderIdentifier = identifier; + _eventNames = [NSMutableArray array]; + + return self; +} + +- (void)identifyUserWithID:(NSString *)userID andEmailAddress:(NSString *)email +{ + _identifier = userID; + _email = email; +} + +- (void)setUserProperty:(NSString *)property toValue:(NSString *)value +{ + _lastUserPropertyKey = property; + _lastUserPropertyValue = value; +} + +- (void)event:(NSString *)event withProperties:(NSDictionary *)properties; +{ + _lastEventName = event; + _lastEventProperties = properties; + [_eventNames addObject:event]; +} + +- (void)incrementUserProperty:(NSString *)counterName byInt:(NSNumber *)amount +{ + _lastUserPropertyKey = counterName; + _lastUserPropertyCount += amount.integerValue; +} + +- (void)error:(NSError *)error withMessage:(NSString *)message +{ + _lastError = error; + _lastErrorMessage = message; +} + +- (void)monitorNavigationViewController:(UINavigationController *)controller +{ + _lastMonitoredNavigationController = controller; + [super monitorNavigationViewController:controller]; +} + + +- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval +{ + _lastEventName = event; +} + +- (void)logTimingEvent:(NSString *)event withInterval:(NSNumber *)interval properties:(NSDictionary *)properties +{ + [super logTimingEvent:event withInterval:interval properties:properties]; + + _lastEventName = event; + _lastEventProperties = properties; +} + +- (void)remoteLog:(NSString *)parsedString +{ + _lastRemoteLog = parsedString; +} + +@end diff --git a/Artsy_Tests/Supporting_Files/ARTestHelper.m b/Artsy_Tests/Supporting_Files/ARTestHelper.m index a1a796a6b46..5ac3a0b7a2a 100644 --- a/Artsy_Tests/Supporting_Files/ARTestHelper.m +++ b/Artsy_Tests/Supporting_Files/ARTestHelper.m @@ -5,7 +5,6 @@ #import "ARUserManager.h" #import -#import #import "ARFonts.h" #import diff --git a/CHANGELOG.legacy.yml b/CHANGELOG.yml similarity index 96% rename from CHANGELOG.legacy.yml rename to CHANGELOG.yml index 7a8abafecb2..07e0d0d52b9 100644 --- a/CHANGELOG.legacy.yml +++ b/CHANGELOG.yml @@ -1,10 +1,7 @@ -# We are no longer using this changelog, see this RFC: https://github.com/artsy/eigen/issues/4499 - upcoming: - version: 6.10.1 + version: 6.10.0 date: TBD dev: - - Add new adress form - Add apple authentication - dzmitry - Add google authentication - dzmitry - Add new onboarding feature flag on ios - dzmitry @@ -23,62 +20,37 @@ upcoming: - Add tracking to "Unable To Load" screen - mounir - Adjust auction results for you tracking - ole - Make Home Auction Results By Followed Artists ready for release - mounir - - Replace ios native analytics with segment analytics - kizito - - user_facing: + - Prevent facebook auth for users without email - dzmitry + - Fix unfollowing categories - katsiaryna alshannikava + - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak + - Fix locations menu redirection - katsiaryna alshannikava + - Implement share button for articles - katsiaryna alshannikava, mounir + - Allow screen rotations on android tablets - kizito + - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava + - Connect auction results for you to metaphysics endpoint - yauheni + - Fix opening artist page after passing new onboarding on ios - dzmitry + - Polish Auction Results for you screen and home rail (behind feature flag) - ole + - Fix crash when opening app from background on android - brian + - Change error handling middleware & include optionalField graphql directive to home screen - ole + - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava + - Prevent users from submitting consignments for non target supply artists - ole + - Fix empty search for consignment submissions - dzmitry + - Release order history view - sweir + - Add Saved Addresses screen (behind feature flag) - ozzie + - Fix visual bug on auction result list item on artist insights screen - ole + - Fix auction result home rail loading spinner issue - ole + - Fix share button on BNMO Flow - ole, mounir, sam, george + - Annotate home screen queries with optionalField directive - ole + - Fix collection home rail loading spinner issue - ole + - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak + - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole + - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava + - Fix auction results for you description text scroll issue - ole + - Fix facebook login failing after signing up for a new account - stanislau hanchar - Add keyword search to artist auction reults - ole releases: - - version: 6.10.0 - - date: July 12, 2021 - - dev: - - Add apple authentication - dzmitry - - Add google authentication - dzmitry - - Add new onboarding feature flag on ios - dzmitry - - Add optionalField for Order History and Order Details - Serge0n - - Add specs for deleteSavedSearch and createSavedSearch mutations - dzmitry tratsiak - - Add toggledSavedSearch analytics tracking - devon blandin - - Allow custom attributes from a push notification payload to be passed through to React Native scenes - devon blandin - - Add diagnose script - mounir - - Pass size filter parameters to a saved search criteria - dzmitry tratsiak - - Update open simulator command in getting started docs - ole - - Fix follow artist button on ios - dzmitry - - Add analytics for AuctionResultsForYou and AuctionResultsRail components - yauheni - - Add a feature flag for Saved Addresses - ozzie - - Initial Push Notification Setup on android - kizito - - Replace deleteSavedSearch mutation on disableSavedSearch - dzmitry tratsiak - - Add tracking to "Unable To Load" screen - mounir - - Adjust auction results for you tracking - ole - - Make Home Auction Results By Followed Artists ready for release - mounir - - user_facing: - - Prevent facebook auth for users without email - dzmitry - - Fix unfollowing categories - katsiaryna alshannikava - - Remove "Enable push notification" guard for disabling saved search - dzmitry tratsiak - - Fix locations menu redirection - katsiaryna alshannikava - - Implement share button for articles - katsiaryna alshannikava, mounir - - Allow screen rotations on android tablets - kizito - - Fix overlapping of social buttons over the 'Next' button for iOS - katsiaryna alshannikava - - Connect auction results for you to metaphysics endpoint - yauheni - - Fix opening artist page after passing new onboarding on ios - dzmitry - - Polish Auction Results for you screen and home rail (behind feature flag) - ole - - Fix crash when opening app from background on android - brian - - Change error handling middleware & include optionalField graphql directive to home screen - ole - - Refresh artwork page after purchase modal dismiss - katsiaryna alshannikava - - Prevent users from submitting consignments for non target supply artists - ole - - Fix empty search for consignment submissions - dzmitry - - Release order history view - sweir - - Add Saved Addresses screen (behind feature flag) - ozzie - - Fix visual bug on auction result list item on artist insights screen - ole - - Fix auction result home rail loading spinner issue - ole - - Fix share button on BNMO Flow - ole, mounir, sam, george - - Annotate home screen queries with optionalField directive - ole - - Fix collection home rail loading spinner issue - ole - - Refactor category screen header and filters to match other artwork grids - dzmitry tratsiak - - Use infinite scroll in featured fairs screen - katsiaryna alshannikava, ole - - Fix overlapping of Gallery name and time remaining for Vieweing rooms - katsiaryna alshannikava - - Fix auction results for you description text scroll issue - ole - - Fix facebook login failing after signing up for a new account - stanislau hanchar - - version: 6.9.5 - date: June 24, 2021 - dev: diff --git a/Gemfile.lock b/Gemfile.lock index 4687db560d7..a1f8818bab0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -7,7 +7,7 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - addressable (2.8.0) + addressable (2.7.0) public_suffix (>= 2.0.2, < 5.0) algoliasearch (1.27.5) httpclient (~> 2.8, >= 2.8.3) @@ -15,20 +15,20 @@ GEM artifactory (3.0.15) atomos (0.1.3) aws-eventstream (1.1.1) - aws-partitions (1.479.0) - aws-sdk-core (3.117.0) + aws-partitions (1.451.0) + aws-sdk-core (3.114.0) aws-eventstream (~> 1, >= 1.0.2) aws-partitions (~> 1, >= 1.239.0) aws-sigv4 (~> 1.1) jmespath (~> 1.0) - aws-sdk-kms (1.44.0) + aws-sdk-kms (1.43.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.96.2) + aws-sdk-s3 (1.94.1) aws-sdk-core (~> 3, >= 3.112.0) aws-sdk-kms (~> 1) aws-sigv4 (~> 1.1) - aws-sigv4 (1.2.4) + aws-sigv4 (1.2.3) aws-eventstream (~> 1, >= 1.0.2) babosa (1.0.4) celluloid (0.18.0) @@ -113,35 +113,27 @@ GEM escape (0.0.4) ethon (0.14.0) ffi (>= 1.15.0) - excon (0.85.0) - faraday (1.5.1) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) + excon (0.81.0) + faraday (1.4.1) faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0.1) faraday-net_http (~> 1.0) faraday-net_http_persistent (~> 1.1) - faraday-patron (~> 1.0) multipart-post (>= 1.2, < 3) ruby2_keywords (>= 0.0.4) faraday-cookie_jar (0.0.7) faraday (>= 0.8.0) http-cookie (~> 1.0.0) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) faraday-excon (1.1.0) faraday-http-cache (2.2.0) faraday (>= 0.8) - faraday-httpclient (1.0.1) faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) + faraday-net_http_persistent (1.1.0) faraday_middleware (1.0.0) faraday (~> 1.0) - fastimage (2.2.4) - fastlane (2.188.0) + fastimage (2.2.3) + fastlane (2.182.0) CFPropertyList (>= 2.3, < 4.0.0) - addressable (>= 2.8, < 3.0.0) + addressable (>= 2.3, < 3.0.0) artifactory (~> 3.0) aws-sdk-s3 (~> 1.0) babosa (>= 1.0.3, < 2.0.0) @@ -156,9 +148,8 @@ GEM faraday_middleware (~> 1.0) fastimage (>= 2.1.0, < 3.0.0) gh_inspector (>= 1.1.2, < 2.0.0) - google-apis-androidpublisher_v3 (~> 0.1) - google-apis-playcustomapp_v1 (~> 0.1) - google-cloud-storage (~> 1.31) + google-api-client (>= 0.37.0, < 0.39.0) + google-cloud-storage (>= 1.15.0, < 2.0.0) highline (~> 2.0) json (< 3.0.0) jwt (>= 2.1.0, < 3) @@ -177,43 +168,48 @@ GEM xcodeproj (>= 1.13.0, < 2.0.0) xcpretty (~> 0.3.0) xcpretty-travis-formatter (>= 0.0.3) - fastlane-plugin-sentry (1.8.3) + fastlane-plugin-sentry (1.8.1) ffi (1.15.0) fourflusher (2.3.1) fuzzy_match (2.0.4) gh_inspector (1.1.3) git (1.8.1) rchardet (~> 1.8) - google-apis-androidpublisher_v3 (0.8.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-core (0.4.1) + google-api-client (0.38.0) addressable (~> 2.5, >= 2.5.1) - googleauth (>= 0.16.2, < 2.a) - httpclient (>= 2.8.1, < 3.a) + googleauth (~> 0.9) + httpclient (>= 2.8.1, < 3.0) mini_mime (~> 1.0) representable (~> 3.0) - retriable (>= 2.0, < 4.a) + retriable (>= 2.0, < 4.0) + signet (~> 0.12) + google-apis-core (0.3.0) + addressable (~> 2.5, >= 2.5.1) + googleauth (~> 0.14) + httpclient (>= 2.8.1, < 3.0) + mini_mime (~> 1.0) + representable (~> 3.0) + retriable (>= 2.0, < 4.0) rexml + signet (~> 0.14) webrick - google-apis-iamcredentials_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-playcustomapp_v1 (0.5.0) - google-apis-core (>= 0.4, < 2.a) - google-apis-storage_v1 (0.6.0) - google-apis-core (>= 0.4, < 2.a) + google-apis-iamcredentials_v1 (0.3.0) + google-apis-core (~> 0.1) + google-apis-storage_v1 (0.3.0) + google-apis-core (~> 0.1) google-cloud-core (1.6.0) google-cloud-env (~> 1.0) google-cloud-errors (~> 1.0) google-cloud-env (1.5.0) faraday (>= 0.17.3, < 2.0) google-cloud-errors (1.1.0) - google-cloud-storage (1.34.1) + google-cloud-storage (1.31.0) addressable (~> 2.5) digest-crc (~> 0.4) google-apis-iamcredentials_v1 (~> 0.1) google-apis-storage_v1 (~> 0.1) - google-cloud-core (~> 1.6) - googleauth (>= 0.16.2, < 2.a) + google-cloud-core (~> 1.2) + googleauth (~> 0.9) mini_mime (~> 1.0) googleauth (0.16.2) faraday (>= 0.17.3, < 2.0) @@ -224,14 +220,14 @@ GEM signet (~> 0.14) highline (2.0.3) http-2 (0.11.0) - http-cookie (1.0.4) + http-cookie (1.0.3) domain_name (~> 0.5) httpclient (2.8.3) i18n (1.8.10) concurrent-ruby (~> 1.0) jmespath (1.4.0) json (2.5.1) - jwt (2.2.3) + jwt (2.2.2) kramdown (2.3.1) rexml kramdown-parser-gfm (1.1.0) @@ -260,7 +256,7 @@ GEM plist (3.6.0) psych (3.3.0) public_suffix (4.0.6) - rake (13.0.6) + rake (13.0.3) rchardet (1.8.0) representable (3.1.1) declarative (< 0.1.0) @@ -270,8 +266,8 @@ GEM rexml (3.2.5) rouge (2.0.7) ruby-macho (1.4.0) - ruby2_keywords (0.0.5) - rubyzip (2.3.2) + ruby2_keywords (0.0.4) + rubyzip (2.3.0) sawyer (0.8.2) addressable (>= 2.3.5) faraday (> 0.8, < 2.0) @@ -308,13 +304,12 @@ GEM xcode-install (2.6.8) claide (>= 0.9.1, < 1.1.0) fastlane (>= 2.1.0, < 3.0.0) - xcodeproj (1.20.0) + xcodeproj (1.19.0) CFPropertyList (>= 2.3.3, < 4.0) atomos (~> 0.1.3) claide (>= 1.0.2, < 2.0) colored2 (~> 3.1) nanaimo (~> 0.3.0) - rexml (~> 3.2.4) xcpretty (0.3.0) rouge (~> 2.0.7) xcpretty-travis-formatter (1.0.1) diff --git a/HACKS.md b/HACKS.md index 47f7fc82ef9..b30d9f2f8d4 100644 --- a/HACKS.md +++ b/HACKS.md @@ -198,27 +198,27 @@ As you can see in the PR and issue, android doesn't use ellipsis on the placehol We added a workaround on Input, to accept an array of placeholders, from longest to shortest, so that android can measure which one fits in the TextInput as placeholder, and it uses that. When android can handle a long placeholder and use ellipsis or if we don't use long placeholders anymore, this can go. -# `react-native-screens` fragment crash on open from background on Android +# `@segment/analytics-react-native` and `@segment/analytics-react-native-appboy` patch #### When can we remove this: -Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. +Once we work on [CX-1421](https://artsyproduct.atlassian.net/browse/CX-1421?atlOrigin=eyJpIjoiYjJiMWY4MThlOTY2NDc3ZGJiMTljZTJjM2FmMmVkZjQiLCJwIjoiaiJ9) to replace the native ios analytics with the TS analytics we use for android already. #### Explanation/Context: -There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be -added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. +Basically these patches remove the podspecs of these two deps. They confuse and break ios, and we don't use them there yet anyway. -This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. +Once we start working on replacing the native analytics with TS ones, then we remove these two patches too. -# `react-native-push-notification` Requiring unknown module on ios +# `react-native-screens` fragment crash on open from background on Android #### When can we remove this: -Once we want to use react-native-push-notification on iOS +Once https://github.com/software-mansion/react-native-screens/issues/17 is solved or we use another library for screen management. #### Explanation/Context: -This is happening because react-native-push-notification requires @react-native-community/push-notification-ios. We are not -adding this dependency at this time because it is unnecessary and we do not use react-native-push-notification on iOS. Also, -we do not want unnecessary conflicts between our native push notification implementation and @react-native-community/push-notification-ios's. +There is a known issue in react-native-screens that causes the app to crash on restoring from background. The react-native-screens team recommends the following workaround to be +added to the MainActivity class on Android https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704067. + +This has the UX downside of not allowing state restore from background but this is an unsolved problem for RN apps. diff --git a/Podfile b/Podfile index 8baa7629712..6d7db46e6d2 100644 --- a/Podfile +++ b/Podfile @@ -53,8 +53,11 @@ end def remove_mapbox_creds if $user_already_had_netrc_file contents = File.read($netrc_path) - cleaned = contents.gsub(/machine api\.mapbox\.com\nlogin mapbox\npassword #{ENV['MAPBOX_DOWNLOAD_TOKEN']}\n/, "") + matches = contents.to_enum(:scan, /machine api\.mapbox\.com.*\n.*\n.*\n/).map { Regexp.last_match } + return if matches == nil or matches.length == 0 + last_match = matches.last File.open($netrc_path, 'w') { |f| + cleaned = last_match.pre_match + last_match.post_match f.write(cleaned) } else @@ -79,7 +82,7 @@ target 'Artsy' do pod 'AFNetworking', '~> 2.5', subspecs: %w[Reachability Serialization Security NSURLSession NSURLConnection] pod 'AFOAuth1Client', git: 'https://github.com/artsy/AFOAuth1Client.git', tag: '0.4.0-subspec-fix' pod 'AFNetworkActivityLogger' - pod 'SDWebImage', '5.8.3' + pod 'SDWebImage', '>= 3.7.2' # 3.7.2 contains a fix that allows you to not force decoding each image, which uses lots of memory # Core pod 'ARGenericTableViewController', git: 'https://github.com/artsy/ARGenericTableViewController.git' @@ -127,7 +130,9 @@ target 'Artsy' do pod 'Firebase/Auth' # Analytics - pod 'Segment-Appboy' + pod 'Analytics' + pod 'ARAnalytics', subspecs: %w[Segmentio] + pod 'Appboy-iOS-SDK' # Developer Pods pod 'DHCShakeNotifier' @@ -223,6 +228,7 @@ post_install do |installer| # * Send PRs for the rest %w[ Pods/ORStackView/Classes/ios/ORStackView.h + Pods/ARAnalytics/ARAnalytics.h Pods/NAMapKit/NAMapKit/*.h ].flat_map { |x| Dir.glob(x) }.each do |header| addition = "#import \n" diff --git a/Podfile.lock b/Podfile.lock index 497a5e6d924..07479a64d19 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -19,29 +19,18 @@ PODS: - AFNetworking/NSURLConnection (~> 2.5) - AFNetworking/NSURLSession (~> 2.5) - AFNetworking/Serialization (~> 2.5) - - Analytics (4.1.5) + - Analytics (3.6.9) - AppAuth (1.4.0): - AppAuth/Core (= 1.4.0) - AppAuth/ExternalUserAgent (= 1.4.0) - AppAuth/Core (1.4.0) - AppAuth/ExternalUserAgent (1.4.0) - - Appboy-iOS-SDK (4.3.1): - - Appboy-iOS-SDK/UI (= 4.3.1) - - Appboy-iOS-SDK/ContentCards (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/Core (4.3.1) - - Appboy-iOS-SDK/InAppMessage (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/NewsFeed (4.3.1): - - Appboy-iOS-SDK/Core - - SDWebImage (< 6, >= 5.8.2) - - Appboy-iOS-SDK/UI (4.3.1): - - Appboy-iOS-SDK/ContentCards - - Appboy-iOS-SDK/Core - - Appboy-iOS-SDK/InAppMessage - - Appboy-iOS-SDK/NewsFeed + - Appboy-iOS-SDK (2.25.0): + - SDWebImage (~> 3.7) + - ARAnalytics/CoreIOS (5.0.1) + - ARAnalytics/Segmentio (5.0.1): + - Analytics (>= 3) + - ARAnalytics/CoreIOS - ARGenericTableViewController (1.0.2) - "Artsy+UIColors (3.1.0)" - "Artsy+UIFonts (3.3.3)" @@ -91,7 +80,7 @@ PODS: - React-RCTText (= 0.63.3) - RNSentry (= 2.2.1) - RNSVG (= 9.13.3) - - SDWebImage (= 5.8.3) + - SDWebImage (< 4, >= 3.7.2) - tipsi-stripe (= 7.5.0) - Expecta (1.0.6) - "Expecta+Snapshots (3.1.1)": @@ -473,9 +462,6 @@ PODS: - React-cxxreact (= 0.63.3) - React-jsi (= 0.63.3) - React-jsinspector (0.63.3) - - react-native-appboy-sdk (1.30.0): - - Appboy-iOS-SDK (~> 4.3.0) - - React - react-native-cameraroll (1.3.0): - React - react-native-config (1.3.3): @@ -588,14 +574,6 @@ PODS: - React-jsi (= 0.63.3) - rn-fetch-blob (0.12.0): - React-Core - - RNAnalytics (1.5.0): - - Analytics - - React-Core - - RNAnalyticsIntegration-Appboy (1.5.0): - - Analytics - - React-Core - - RNAnalytics - - Segment-Appboy - RNAppleAuthentication (2.1.2): - React-Core - RNBootSplash (3.2.0): @@ -638,15 +616,9 @@ PODS: - React-Core - RNSVG (9.13.3): - React - - SDWebImage (5.8.3): - - SDWebImage/Core (= 5.8.3) - - SDWebImage/Core (5.8.3) - - Segment-Appboy (4.2.0): - - Analytics - - Segment-Appboy/Full-SDK (= 4.2.0) - - Segment-Appboy/Full-SDK (4.2.0): - - Analytics - - Appboy-iOS-SDK (~> 4.3.0) + - SDWebImage (3.7.3): + - SDWebImage/Core (= 3.7.3) + - SDWebImage/Core (3.7.3) - Sentry (6.1.4): - Sentry/Core (= 6.1.4) - Sentry/Core (6.1.4) @@ -676,6 +648,9 @@ DEPENDENCIES: - AFNetworking/Security (~> 2.5) - AFNetworking/Serialization (~> 2.5) - AFOAuth1Client (from `https://github.com/artsy/AFOAuth1Client.git`, tag `0.4.0-subspec-fix`) + - Analytics + - Appboy-iOS-SDK + - ARAnalytics/Segmentio - ARGenericTableViewController (from `https://github.com/artsy/ARGenericTableViewController.git`) - "Artsy+UIColors" - "Artsy+UIFonts" @@ -752,7 +727,6 @@ DEPENDENCIES: - React-jsi (from `./node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `./node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `./node_modules/react-native/ReactCommon/jsinspector`) - - react-native-appboy-sdk (from `node_modules/react-native-appboy-sdk`) - "react-native-cameraroll (from `node_modules/@react-native-community/cameraroll`)" - react-native-config (from `node_modules/react-native-config`) - "react-native-cookies (from `node_modules/@react-native-cookies/cookies`)" @@ -776,8 +750,6 @@ DEPENDENCIES: - React-RCTVibration (from `./node_modules/react-native/Libraries/Vibration`) - ReactCommon/turbomodule/core (from `./node_modules/react-native/ReactCommon`) - rn-fetch-blob (from `node_modules/rn-fetch-blob`) - - "RNAnalytics (from `node_modules/@segment/analytics-react-native`)" - - "RNAnalyticsIntegration-Appboy (from `node_modules/@segment/analytics-react-native-appboy`)" - "RNAppleAuthentication (from `node_modules/@invertase/react-native-apple-authentication`)" - RNBootSplash (from `node_modules/react-native-bootsplash`) - "RNCAsyncStorage (from `node_modules/@react-native-community/async-storage`)" @@ -794,8 +766,7 @@ DEPENDENCIES: - "RNSentry (from `node_modules/@sentry/react-native`)" - RNShare (from `node_modules/react-native-share`) - RNSVG (from `node_modules/react-native-svg`) - - SDWebImage (= 5.8.3) - - Segment-Appboy + - SDWebImage (>= 3.7.2) - Specta - Starscream - SwiftyJSON @@ -813,6 +784,7 @@ SPEC REPOS: - Analytics - AppAuth - Appboy-iOS-SDK + - ARAnalytics - boost-for-react-native - CocoaAsyncSocket - CocoaLumberjack @@ -865,7 +837,6 @@ SPEC REPOS: - PromisesObjC - Quick - SDWebImage - - Segment-Appboy - Sentry - Specta - Starscream @@ -938,8 +909,6 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "./node_modules/react-native/ReactCommon/jsinspector" - react-native-appboy-sdk: - :path: node_modules/react-native-appboy-sdk react-native-cameraroll: :path: "node_modules/@react-native-community/cameraroll" react-native-config: @@ -986,10 +955,6 @@ EXTERNAL SOURCES: :path: "./node_modules/react-native/ReactCommon" rn-fetch-blob: :path: node_modules/rn-fetch-blob - RNAnalytics: - :path: "node_modules/@segment/analytics-react-native" - RNAnalyticsIntegration-Appboy: - :path: "node_modules/@segment/analytics-react-native-appboy" RNAppleAuthentication: :path: "node_modules/@invertase/react-native-apple-authentication" RNBootSplash: @@ -1055,9 +1020,10 @@ SPEC CHECKSUMS: AFNetworkActivityLogger: 121486778117d53b3ab1c61d264b88081d0c3eee AFNetworking: 8dd5f9b9691e09186393069a12cc3b5ed7c8b511 AFOAuth1Client: 155a6237e57987cac18dac2ccd17cea5d324ad1a - Analytics: 084a3edda6517e308007c1a7810b8f1e8f2925aa + Analytics: 6541ce337e99d9f7a2240a8b3953940a7be5f998 AppAuth: 31bcec809a638d7bd2f86ea8a52bd45f6e81e7c7 - Appboy-iOS-SDK: 33b31d5ade91a7d0718534798f4ab1146e7b0681 + Appboy-iOS-SDK: 720819acf77bcb7bdad658d26c064278a39639d9 + ARAnalytics: 896e530551168721fbb8852e044b8afb9baffdde ARGenericTableViewController: 61a0897ba66c35111b5d1cc3b44884282bd3c1a5 "Artsy+UIColors": 31c03c4146f5e6618a9b950f37dfe02dd9ac09a6 "Artsy+UIFonts": 597c44f264aead6bdc21898b690addd90e14edbd @@ -1070,7 +1036,7 @@ SPEC CHECKSUMS: DHCShakeNotifier: 64048427ecaa763f2472d0032f58bf7a10074eee DoubleConversion: cde416483dac037923206447da6e1454df403714 EDColor: c83f9a61f9f9b3c23d541f1feb561558e29cb088 - Emission: d1ca04d191776a641ee1224cd26da9eeec5d52ff + Emission: 9ede96bbbc777ebfc06e0e633599c4d09f72978d Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5 "Expecta+Snapshots": dcff217eef506dabd6dfdc7864ea2da321fafbb8 Extraction: 2be993a17f8f8c4fac988ebecaed93a409181faf @@ -1137,7 +1103,6 @@ SPEC CHECKSUMS: React-jsi: df07aa95b39c5be3e41199921509bfa929ed2b9d React-jsiexecutor: b56c03e61c0dd5f5801255f2160a815f4a53d451 React-jsinspector: 8e68ffbfe23880d3ee9bafa8be2777f60b25cbe2 - react-native-appboy-sdk: dd0f7fb390666c6cfea7e177dcf22c3391e9cc39 react-native-cameraroll: 463aff54e37cff27ea76eb792e6f1fa43b876320 react-native-config: 47fd4132d931f84aca9c31f302c3c867a8560b11 react-native-cookies: 3b5b182d008b714fefc337df15b787f00385a598 @@ -1161,8 +1126,6 @@ SPEC CHECKSUMS: React-RCTVibration: 8e9fb25724a0805107fc1acc9075e26f814df454 ReactCommon: 4167844018c9ed375cc01a843e9ee564399e53c3 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba - RNAnalytics: a6dc48511d5d99b1ecaaf7157d8b5c618d15337e - RNAnalyticsIntegration-Appboy: 6940f54ff28e6be80f1e3b78c996b1f0945b4113 RNAppleAuthentication: e95bcfbd044013667f35c5ca20ae17d39500c009 RNBootSplash: 24175aa28fe203b10c48dc34e78d946fd33c77af RNCAsyncStorage: 3c304d1adfaea02ec732ac218801cb13897aa8c0 @@ -1179,8 +1142,7 @@ SPEC CHECKSUMS: RNSentry: 7104cdfc1072ccb86015d9c8f210d81ae76806c1 RNShare: fed99fd743f80ca255903c1da46fc9a6430efab6 RNSVG: f6177f8d7c095fada7cfee2e4bb7388ba426064c - SDWebImage: 112503ec94a5a2a41869503844a15e8d8f1ead5c - Segment-Appboy: 5688916eb8fb104b638116ba251cee5d4d8bd266 + SDWebImage: 1d2b1a1efda1ade1b00b6f8498865f8ddedc8a84 Sentry: 9d055e2de30a77685e86b219acf02e59b82091fc Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2 Starscream: f5da93fe6984c77b694366bf7299b7dc63a76f26 @@ -1195,6 +1157,6 @@ SPEC CHECKSUMS: Yoga: 7d13633d129fd179e01b8953d38d47be90db185a YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 4f9596015bfbf77634835ff623b13cb3bef9ed05 +PODFILE CHECKSUM: 01b096a826c973467c7cd9b46fdd107f7d1d5f71 COCOAPODS: 1.10.1 diff --git a/app.json b/app.json index 401e4cc6fbb..b1f5f525879 100644 --- a/app.json +++ b/app.json @@ -1,4 +1,4 @@ { - "version": "6.10.2", + "version": "6.10.0", "sentryReleaseName": "" } diff --git a/dangerfile.ts b/dangerfile.ts index 0e042971d08..49f6445ce11 100644 --- a/dangerfile.ts +++ b/dangerfile.ts @@ -3,6 +3,7 @@ import { danger, fail, markdown, warn } from "danger" // so the node API gives us errors: import * as fs from "fs" import { pickBy } from "lodash" +import * as yaml from "yaml" import { ParseResult } from "./scripts/changelog/changelog-types" import { changelogTemplateSections } from "./scripts/changelog/generateChangelogSectionTemplate" import { parsePRDescription } from "./scripts/changelog/parsePRDescription" @@ -88,6 +89,32 @@ const verifyRemainingDevWork = () => { } } +// Ensure the CHANGELOG is set up like we need +const validateChangelogYMLFile = async () => { + try { + // Ensure it is valid yaml + const changelogYML = fs.readFileSync("CHANGELOG.yml").toString() + const loadedDictionary = yaml.parse(changelogYML) + + // So that we don't accidentally copy & paste oour upcoming section wrong + const upcoming = loadedDictionary?.upcoming + if (upcoming) { + if (Array.isArray(upcoming)) { + fail("Upcoming an array in the CHANGELOG") + } + + // Deployments rely on this to send info to reviewers + else if (typeof upcoming === "object") { + if (!upcoming.user_facing) { + fail("There must be a `user_facing` section in the upcoming section of the CHANGELOG") + } + } + } + } catch (e) { + fail("The CHANGELOG is not valid YML:\n" + e.stack) + } +} + // Require changelog on Eigen PRs to be valid // See Eigen RFC: https://github.com/artsy/eigen/issues/4499 export const validatePRChangelog = () => { @@ -135,5 +162,6 @@ export const validatePRChangelog = () => { preventUsingEnzyme() preventUsingRenderRelayTree() verifyRemainingDevWork() + await validateChangelogYMLFile() validatePRChangelog() })() diff --git a/data/schema.graphql b/data/schema.graphql index 0e28f833b68..ee35aeef701 100644 --- a/data/schema.graphql +++ b/data/schema.graphql @@ -3935,33 +3935,7 @@ type CommerceShipment { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String! - deliveryEnd( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - deliveryStart( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - deliveryWindowModifier: String id: ID! - pickupEnd( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - pickupStart( - format: String - - # A tz database time zone, otherwise falls back to `X-TIMEZONE` header - timezone: String - ): String - pickupWindowModifier: String priceCents: Int! priceCurrency: String! status: String @@ -5194,9 +5168,6 @@ type ConversationInitiator { type ConversationItem { item: ConversationItemType - - # The actual, non-snapshotted artwork - liveArtwork: ConversationItemType permalink: String title: String } @@ -6030,16 +6001,7 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { # A tz database time zone, otherwise falls back to `X-TIMEZONE` header timezone: String ): String - articlesConnection( - after: String - before: String - first: Int - - # Articles that are ready to be publicly viewed in the feed by everyone. - inEditorialFeed: Boolean - last: Int - sort: ArticleSorts - ): ArticleConnection + articlesConnection(after: String, before: String, first: Int, last: Int, sort: ArticleSorts): ArticleConnection artistsConnection( after: String before: String @@ -6161,7 +6123,6 @@ type Fair implements EntityWithFilterArtworksConnectionInterface & Node { before: String first: Int last: Int - page: Int # Number of artworks to return section: String @@ -8607,9 +8568,6 @@ type Partner implements Node { after: String before: String first: Int - - # Articles that are ready to be publicly viewed in the feed by everyone. - inEditorialFeed: Boolean last: Int page: Int sort: ArticleSorts diff --git a/docs/README.md b/docs/README.md index 3bbec7db36a..a8b27edc5c1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,7 +9,6 @@ ## Meandering Around - [General Overview](overview.md) -- [Storybook / UI Components](storybook.md) ## Specific Problems diff --git a/docs/deploy_to_app_store.md b/docs/deploy_to_app_store.md index 939a2189de7..40e9e2a82d8 100644 --- a/docs/deploy_to_app_store.md +++ b/docs/deploy_to_app_store.md @@ -35,6 +35,7 @@ Our App Store releases are done manually, instead of automatically once Apple ap 1. Create a new version of the app in AppStoreConnect (if you don't do this, beta deployments will fail). - Go to "My Apps", click Eigen ("Artsy: Buy & Sell Original Art"), click "+ version or platform", click "iOS", and enter version number. 1. Run `./scripts/next`. This prompts for the next version number. **Use the same version as the previous step**. +1. Move the release from `upcoming` to `releases` in `CHANGELOG.yml` and add a new, empty entry under `upcoming`. Make sure the `date` is accurate. [Here is a previous commit](https://github.com/artsy/eigen/commit/4c9708b7082057de15f1dba51c057d8efacee0b5#diff-f5c8d85e3311e0af3edc9c70c7d01c10f03bba1d56d05a25820f5e4265e3df0d). 1. Add and commit the changed files, typically with `-m "Preparing for development, version X.Y.Z."`. 1. Run `./scripts/deploy-ios` to trigger a new beta. (When we add a new version, the first beta goes through additional TestFlight review by Apple. By trigger the beta now, we go through that review early, and avoid delaying future QA sessions.) 1. PR your changes back into the `master` branch. diff --git a/docs/palette_v3_migration_guide.md b/docs/palette_v3_migration_guide.md deleted file mode 100644 index 1ae9c3351ea..00000000000 --- a/docs/palette_v3_migration_guide.md +++ /dev/null @@ -1,75 +0,0 @@ -# Palette v3 migration guide - -- Use `ThemeV2` and `ThemeV3`. - Currently `Theme` is pointing to `ThemeV2`, and later it will point to `ThemeV3`. During the v2 -> v3 migration, the more explicit we are, the better. - -- Use `useTheme` to get access to `color` and `space`. - We used to use `color` and `space` imported from `palette` directly. Unforunately, this is not theme-aware, so we need to change our ways. Always use `const { color, space } = useTheme()` or `const color = useColor()` or `const space = useSpace()`, to get the theme-aware functionality we need. - -- Use `themeGet` for styled-components, but try to avoid styled-components. - If you need to access anything from the theme within a styled-component, you should use `themeGet` like: - -```tsx -import { themeGet } from "@styled-system/theme-get" - -const TheComp = styled(Flex)` - background-color: ${themeGet("colors.black100")}; - margin-left: ${themeGet("space.2")}px; - border-width: 3; -` -``` - -One limitation here is that you cannot use `0.5` or any other value of `space` that has a dot in the name. Prefer to use simple components instead, like: - -```tsx -const TheComp = (props) => { - const { color, space } = useTheme() - return ( - - ) -} -``` - -- Use `useThemeConfig` to make components behave correctly in both palette versions. - When a component has to be presented in both palette versions but use different styling in the two versions, we can use `useThemeConfig`. - For example, if we have a view that needs to have a `red` border in `v2` and a `blue` border in `v3`, we do: - -```tsx -const TheView = () => { - const theBorderColor = useThemeConfig({ - v2: "red", - v3: "blue", - }) - - return -} -``` - -- Use `ClassTheme` for class components. - `ClassTheme` exposes the hooks of the theme, so you can use it like: - -```tsx -import { ClassTheme } from "palette" - -class TheComp extends React.Component { - render() { - return ( - - {({color, space, theme}) => ( - - )} - - ) - } -} -``` diff --git a/docs/pull_request_template.md b/docs/pull_request_template.md index a23c4f5b3fd..9963aa9f9ce 100644 --- a/docs/pull_request_template.md +++ b/docs/pull_request_template.md @@ -21,7 +21,7 @@ This PR resolves [] - [ ] I have added a feature flag, or my changes don't require a feature flag. ([How do I add one?](https://github.com/artsy/eigen/blob/master/docs/developing_a_feature.md)) - [ ] I have documented any follow-up work that this PR will require, or it does not require any. - [ ] I have added an app state migration, or my changes do not require one. ([What are migrations?](https://github.com/artsy/eigen/blob/master/docs/adding_state_migrations.md)) -- [ ] I have added a changelog entry below or my changes do not require one. +- [ ] I have added a CHANGELOG.yml entry below or my changes do not require one.

Changelog updates diff --git a/docs/storybook.md b/docs/storybook.md deleted file mode 100644 index e1ebb553ce8..00000000000 --- a/docs/storybook.md +++ /dev/null @@ -1,42 +0,0 @@ -### Storybook - -We use [Storybook](https://storybook.js.org/tutorials/intro-to-storybook/react-native/en/get-started/) to build and display our UI components in isolation. - -**Run Storybook server** - -Opens a web server and browser UI that runs alongside the simulator. - -``` -yarn storybook-server -``` - -**Run Storybook as standalone app** - -Opens Storybook without loading the entire app (instead of `yarn start`). - -``` -yarn start-storybook -``` - -The screen can also be opened from the admin menu. - -**Run Storybook** - -Opens storybook as a screen in the app. - -``` -yarn storybook-ios -yarn storybook-android -``` - -**Adding new storybook stories** - -Make a file next to the file you want to make stories for, for example, if you want to make stories for `Checkbox.tsx`, make a file called `Checkbox.stories.tsx` next to it. - -You can look for other stories files for reference, but the main structure is: - -```tsx -storiesOf("Checkbox", module) - .add("A Story Name", () => ) - .add("Another Story Name", () => ) -``` diff --git a/emission/Emission.podspec b/emission/Emission.podspec index 4ba227c39e3..2587fb6af40 100644 --- a/emission/Emission.podspec +++ b/emission/Emission.podspec @@ -39,7 +39,7 @@ podspec = Pod::Spec.new do |s| s.dependency 'ISO8601DateFormatter' # To ensure a consistent image cache between app/lib - s.dependency 'SDWebImage', '5.8.3' + s.dependency 'SDWebImage', '>= 3.7.2', '< 4' # For custom animations in DeepZoomOverlay s.dependency 'INTUAnimationEngine' diff --git a/emission/Pod/Classes/Core/AREmission.h b/emission/Pod/Classes/Core/AREmission.h index aea2c8d2118..073c1718575 100644 --- a/emission/Pod/Classes/Core/AREmission.h +++ b/emission/Pod/Classes/Core/AREmission.h @@ -29,9 +29,6 @@ extern NSString *const AREnvTest; - (instancetype)initWithState:(NSDictionary *)state packagerURL:(nullable NSURL *)packagerURL NS_DESIGNATED_INITIALIZER; - (void)updateState:(NSDictionary *)state; -- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits; -- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits; -- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSString *)stateStringForKey:(NSString *)stateKey; - (NSString *)reactStateStringForKey:(NSString *)stateKey; - (BOOL)reactStateBoolForKey:(NSString *)stateKey; diff --git a/emission/Pod/Classes/Core/AREmission.m b/emission/Pod/Classes/Core/AREmission.m index 290508ed931..10150367787 100644 --- a/emission/Pod/Classes/Core/AREmission.m +++ b/emission/Pod/Classes/Core/AREmission.m @@ -87,25 +87,6 @@ - (void)updateState:(NSDictionary *)state [self.notificationsManagerModule updateState:state]; } -- (void)sendEvent:(NSString *)name traits:(NSDictionary *)traits -{ - NSMutableDictionary *eventTraits = [traits mutableCopy]; - [eventTraits addEntriesFromDictionary:@{@"event_name": name }]; - [self.notificationsManagerModule sendEvent:eventTraits]; -} - -- (void)sendScreenEvent:(NSString *)screenName traits:(NSDictionary *)traits -{ - NSMutableDictionary *screenTraits = [traits mutableCopy]; - [screenTraits addEntriesFromDictionary:@{@"screen_name": screenName }]; - [self.notificationsManagerModule sendEvent:screenTraits]; -} - -- (void)sendIdentifyEvent:(NSDictionary *)traits -{ - [self.notificationsManagerModule sendIdentifyEvent:traits]; -} - - (NSString *)stateStringForKey:(NSString *)stateKey { NSString *result = [self.notificationsManagerModule.state valueForKey:stateKey]; diff --git a/emission/Pod/Classes/Core/AREventsModule.m b/emission/Pod/Classes/Core/AREventsModule.m index 5f4e8be7b55..f53cdd5d1ca 100644 --- a/emission/Pod/Classes/Core/AREventsModule.m +++ b/emission/Pod/Classes/Core/AREventsModule.m @@ -13,6 +13,11 @@ @implementation AREventsModule RCT_EXPORT_MODULE(); +RCT_EXPORT_METHOD(postEvent:(nonnull NSDictionary *)info) +{ + self.eventOccurred(info); +} + RCT_EXPORT_METHOD(requestAppStoreRating) { [SKStoreReviewController requestReview]; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h index 5b578ff9d4d..89b21785dde 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.h @@ -28,8 +28,6 @@ - (instancetype)initWithState:(NSDictionary *)state; - (void)updateState:(NSDictionary *)state; -- (void)sendEvent:(NSDictionary *)traits; -- (void)sendIdentifyEvent:(NSDictionary *)traits; - (NSDictionary *)state; - (NSDictionary *)reactState; diff --git a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m index d3b1c6d5d1c..824ba3dc12f 100644 --- a/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m +++ b/emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m @@ -49,8 +49,6 @@ @interface ARNotificationsManager () static const NSString *stateChanged = @"STATE_CHANGED"; static const NSString *reactStateChanged = @"STATE_CHANGED"; static const NSString *requestNavigation = @"REQUEST_NAVIGATION"; -static const NSString *eventTracking = @"EVENT_TRACKING"; -static const NSString *identifyTracking = @"IDENTIFY_TRACKING"; @implementation ARNotificationsManager @@ -111,22 +109,6 @@ - (void)updateState:(NSDictionary *)state } } -- (void)sendEvent:(NSDictionary *)traits -{ - @synchronized(self) - { - [self dispatch:eventTracking data:traits]; - } -} - -- (void)sendIdentifyEvent:(NSDictionary *)traits -{ - @synchronized(self) - { - [self dispatch:identifyTracking data:traits]; - } -} - - (void)notificationReceived { [self dispatch:notificationReceived data:@{}]; @@ -148,7 +130,6 @@ - (void)requestNavigation:(NSString *)route withProps:(NSDictionary *)props [self afterBootstrap:^{ __strong typeof(self) sself = wself; if (!sself) return; - if (!route) return; [sself dispatch:requestNavigation data:@{@"route": route, @"props": props}]; }]; } diff --git a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m index 2152067b1a6..b158c2aa382 100644 --- a/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m +++ b/emission/Pod/Classes/OpaqueImageViewComponent/AROpaqueImageView.m @@ -88,19 +88,17 @@ - (void)setImageURL:(NSURL *)imageURL; return; } + // TODO: Setting decompress to NO, because Eigen sets it to YES. + // We need to send a PR to SDWebImage to disable decoding + // with an option to the download method. + // SDWebImageManager *manager = [SDWebImageManager sharedManager]; - SDImageCache *imageCache = [SDImageCache sharedImageCache]; - - // Applying a global disabling of the decode feature - manager.optionsProcessor = [SDWebImageOptionsProcessor optionsProcessorWithBlock:^SDWebImageOptionsResult * _Nullable(NSURL * _Nullable url, SDWebImageOptions options, SDWebImageContext * _Nullable context) { - // Global disable force decode feature - options |= SDWebImageAvoidDecodeImage; - - return [[SDWebImageOptionsResult alloc] initWithOptions:options context:context]; - }]; - + + manager.imageCache.shouldDecompressImages = NO; + manager.imageDownloader.shouldDecompressImages = NO; + __weak typeof(self) weakSelf = self; - [imageCache diskImageExistsWithKey:self.imageURL.absoluteString completion:^(BOOL isInCache) { + [manager cachedImageExistsForURL:self.imageURL completion:^(BOOL isInCache) { if (!isInCache) { self.backgroundColor = self.placeholderBackgroundColor; } @@ -110,11 +108,10 @@ - (void)setImageURL:(NSURL *)imageURL; options = options | (self.retryFailedURLs ? SDWebImageRetryFailed : 0); options = options | (self.highPriority ? SDWebImageHighPriority : 0); - self.downloadOperation = [manager loadImageWithURL:self.imageURL + self.downloadOperation = [manager downloadImageWithURL:self.imageURL options:options progress:nil completed:^(UIImage *image, - NSData* _Nullable _, NSError *error, SDImageCacheType __, BOOL completed, diff --git a/fastlane/Fastfile b/fastlane/Fastfile index a79642d4270..f2ff6d28a2a 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -27,17 +27,24 @@ lane :ship_beta_ios do api_key = app_store_connect_api_key( key_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ID'], issuer_id: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_ISSUER_ID'], - key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT_BASE64'], - is_key_content_base64: true, + key_content: ENV['ARTSY_APP_STORE_CONNECT_API_KEY_CONTENT'], in_house: false, ) set_build_version_ios - latest_version = app_json['version'] + changelog_yaml = File.read('../CHANGELOG.yml') + changelog_data = YAML.safe_load(changelog_yaml) + + latest_version = changelog_data['upcoming']['version'] - # TODO: Once changelog infra is nailed down we should get release notes from there - beta_readme = "Thanks for using the Artsy beta!" + upcoming = changelog_data['upcoming'] + commit = `git log -n1 --format='%h'`.strip + notes = upcoming['user_facing'] || [] + beta_readme = "## #{upcoming['version']} - #{commit} \n\n - #{notes.join "\n - "} \n\n" + + # Make sure the stickers app is up to date in it's plist + `/usr/libexec/PlistBuddy -c "Set CFBundleVersion #{latest_version}" Artsy\ Stickers/Info.plist` # Builds the app sync_code_signing(app_identifier: ['net.artsy.artsy', 'net.artsy.artsy.Artsy-Stickers'], type: 'appstore') @@ -96,9 +103,9 @@ end date_str = DateTime.now.strftime("%Y.%m.%d.%H") lane :set_build_version_ios do system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" \"#{sticker_plist}\"") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleShortVersionString #{app_json['version']}\" #{sticker_plist}") system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{app_plist}") - system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" \"#{sticker_plist}\"") + system("/usr/libexec/PlistBuddy -c \"Set CFBundleVersion #{date_str}\" #{sticker_plist}") end build_gradle = "../android/app/build.gradle" @@ -153,6 +160,7 @@ lane :ship_beta_android do vname, vcode = set_build_version_android tag_and_push(tag: "android-#{vname}-#{vcode}") + sentry_release_name = "android-#{vname}-#{vcode}" update_sentry_release_name(sentry_release_name: sentry_release_name) diff --git a/index.android.js b/index.android.js index c08f6923123..4fb01033f09 100644 --- a/index.android.js +++ b/index.android.js @@ -1,22 +1,8 @@ global.__TEST__ = false +require("react-native-gesture-handler") +require("react-native-screens").enableScreens() +require("./src/lib/utils/PushNotification").configure() +const { AppRegistry } = require('react-native') -// start storybook depending on content of storybook.json -let startStorybook = false - -if (__DEV__) { - try { - const fileContent = require("./storybook.json") - startStorybook = fileContent.startStorybook - } catch {} -} - -if (startStorybook) { - require("./src/storybook") -} else { - require("react-native-gesture-handler") - require("react-native-screens").enableScreens() - require("./src/lib/utils/PushNotification").configure() - const { AppRegistry } = require("react-native") - const { App } = require("./src/lib/AndroidApp") - AppRegistry.registerComponent("Artsy", () => App) -} +const {App} = require('./src/lib/AndroidApp') +AppRegistry.registerComponent("Artsy", () => App) diff --git a/index.ios.js b/index.ios.js index 72d525ff8df..9c87cf941ac 100644 --- a/index.ios.js +++ b/index.ios.js @@ -1,20 +1,5 @@ global.__TEST__ = false - -// start storybook depending on content of storybook.json -let startStorybook = false - -if (__DEV__) { - try { - const fileContent = require("./storybook.json") - startStorybook = fileContent.startStorybook - } catch {} -} - -if (startStorybook) { - require("./src/storybook") -} else { - require("react-native-gesture-handler") - require("react-native-screens").enableScreens() - require("./src/lib/ErrorReporting") - require("./src/lib/AppRegistry") -} +require("react-native-gesture-handler") +require("react-native-screens").enableScreens() +require("./src/lib/ErrorReporting") +require("./src/lib/AppRegistry") diff --git a/index.tests.ios.js b/index.tests.ios.js index 242b6a476ec..b6426dd1505 100644 --- a/index.tests.ios.js +++ b/index.tests.ios.js @@ -1 +1,2 @@ import "./index.ios" + diff --git a/jest.config.js b/jest.config.js index 0d700502df6..8488f3e0d1b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -5,8 +5,6 @@ module.exports = { "^lib/(.*)": "/src/lib/$1", "^palette$": "/src/palette", "^palette/(.*)": "/src/palette/$1", - "^storybook$": "/src/storybook", - "^storybook/(.*)": "/src/storybook/$1", "@images/(.*)": "/images/$1", "@relay/(.*)": "/src/lib/relay/$1", }, diff --git a/package.json b/package.json index 3c4cb93b6e0..139bf926e7e 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "generate-cities-objc": "node scripts/generate-cities-objc.js", "generate-graphql-query-map": "node scripts/generate-graphql-query-map.js > emission/Pod/Classes/GraphQL/ARGraphQLQueryMap.generated.objc", "ios": "node node_modules/react-native/local-cli/cli.js run-ios", - "android": "./scripts/set-storybook-environment.js && react-native run-android", + "android": "react-native run-android", "clean-ios": "yarn rimraf ~/Library/Developer/Xcode/DerivedData", "clean-android": "cd android; ./gradlew clean cleanBuildCache; cd -", "clean": "yarn clean-ios; yarn clean-android", @@ -41,6 +41,7 @@ "start-packager-after-relay": "yarn relay && yarn start-packager", "start-servers": "concurrently --kill-others 'yarn start-packager-after-relay' 'yarn relay --watch'", "start": "yarn start-servers", + "stylelint-project": " stylelint -- 'src/**/*.{ts,tsx}'", "sync-cities": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/src/schema/city/cityDataSortedByDisplayPreference.json -o data/cityDataSortedByDisplayPreference.json", "sync-schema": "curl https://raw.githubusercontent.com/artsy/metaphysics/master/_schemaV2.graphql -o data/schema.graphql; yarn prettier --write --parser graphql data/schema.graphql", "sync-schema:localhost": "cd ../metaphysics && yarn dump-schema v2 ../eigen/data/", @@ -50,13 +51,6 @@ "type-check:offence-ranking": "yarn -s type-check:offence 'TS\\d+' -o | sort | uniq -c | sort -r", "type-check:offence": "tsc --pretty false | grep -v __generated__ | grep -E", "type-check": "tsc", - "storybook-ios": "npx artsy open -i storybook", - "storybook-android": "npx artsy open -a storybook", - "prestorybook-server": "rnstl", - "storybook-server": "start-storybook -p 7007", - "build-storybook": "build-storybook", - "start-storybook": "STORYBOOK=1 yarn start", - "detect-secrets": "detect-secrets-launcher", "update-metaphysics": "node scripts/update-metaphysics.js" }, "repository": { @@ -84,8 +78,8 @@ "cheerio": "0.22.0" }, "dependencies": { - "@artsy/cohesion": "2.13.0", - "@artsy/palette-tokens": "2.1.2", + "@artsy/cohesion": "2.7.0", + "@artsy/palette-tokens": "^1.3.1", "@expo/react-native-action-sheet": "^3.8.0", "@invertase/react-native-apple-authentication": "^2.1.2", "@ptomasroos/react-native-multi-slider": "^2.2.2", @@ -102,10 +96,9 @@ "@react-navigation/bottom-tabs": "^5.11.7", "@react-navigation/native": "^5.9.2", "@react-navigation/stack": "^5.14.2", - "@segment/analytics-react-native": "^1.5.0", - "@segment/analytics-react-native-appboy": "^1.5.0", + "@segment/analytics-react-native": "^1.4.4", + "@segment/analytics-react-native-appboy": "^1.4.8", "@sentry/react-native": "2.2.1", - "@styled-system/theme-get": "^5.1.2", "easy-peasy": "3.3.0", "events": "3.1.0", "formik": "2.1.4", @@ -118,7 +111,7 @@ "query-string": "4.3.4", "react": "16.13.1", "react-native": "0.63.3", - "react-native-appboy-sdk": "^1.30.0", + "react-native-appboy-sdk": "^1.29.1", "react-native-bootsplash": "^3.2.0", "react-native-config": "https://github.com/artsy/react-native-config.git", "react-native-credit-card-input": "^0.4.1", @@ -149,16 +142,16 @@ "rn-fetch-blob": "0.12.0", "semver": "^7.3.4", "simple-markdown": "0.7.2", - "styled-components": "4.2.1", + "styled-components": "4.2.0", "styled-system": "5.1.5", "supercluster": "6.0.1", "tipsi-stripe": "https://github.com/artsy/tipsi-stripe.git#fix-infinite-loop", "url": "^0.11.0", - "yup": "0.29.1", - "zustand": "^3.5.7" + "yup": "0.29.1" }, "devDependencies": { - "@artsy/update-repo": "0.2.1", + "@artsy/auto-config": "1.0.2", + "@artsy/update-repo": "0.2.0", "@babel/core": "^7.12.9", "@babel/plugin-proposal-class-properties": "7.10.4", "@babel/plugin-proposal-decorators": "7.10.5", @@ -171,14 +164,11 @@ "@react-native-community/cli-platform-ios": "3.0.0", "@testing-library/jest-native": "^4.0.1", "@testing-library/react-native": "7.1.0", - "@storybook/addon-actions": "^5.3", - "@storybook/react-native": "^5.3.25", - "@storybook/react-native-server": "^5.3.23", "@types/argparse": "^2.0.8", "@types/chalk": "2.2.0", "@types/dedent": "0.7.0", "@types/jest": "25.1.5", - "@types/lodash": "4.14.149", + "@types/lodash": "4.14.170", "@types/luxon": "1.15.2", "@types/moment-timezone": "0.5.4", "@types/node": "12.7.5", @@ -195,16 +185,14 @@ "@types/relay-test-utils": "6.0.1", "@types/remove-markdown": "0.1.1", "@types/semver": "^7.3.4", - "@types/styled-components": "4.0.3", - "@types/styled-system": "5.1.12", - "@types/styled-system__theme-get": "^5.0.1", + "@types/styled-components": "4.0.2", + "@types/styled-system": "5.1.9", "@types/supercluster": "5.0.0", "@types/yup": "0.29.3", "argparse": "^2.0.1", "auto": "7.12.3", "awesome-typescript-loader": "3.4.1", "babel-jest": "25.2.6", - "babel-loader": "^8.2.2", "babel-plugin-import-graphql": "2.7.0", "babel-plugin-relay": "10.1.3", "chalk": "2.4.2", @@ -214,7 +202,6 @@ "danger": "^10.6.4", "danger-plugin-jest": "^1.3.0", "dedent": "0.7.0", - "detect-secrets": "^1.0.6", "dotenv": "8.2.0", "enzyme": "3.9.0", "enzyme-adapter-react-16": "1.13.0", @@ -225,6 +212,7 @@ "jest": "25.2.7", "jest-fetch-mock": "^3.0.3", "jest-raw-loader": "1.0.1", + "jest-styled-components": "7.0.0-2", "jest-watch-typeahead": "^0.6.1", "jetifier": "^1.6.6", "json5": "2.1.0", @@ -241,7 +229,6 @@ "puppeteer": "^7.1.0", "react-dom": "16.8.3", "react-native-flipper": "^0.94.1", - "react-native-storybook-loader": "^2.0.4", "react-relay-network-modern": "^6.0.0", "react-test-renderer": "16.13.1", "recursive-readdir-sync": "1.0.6", @@ -253,21 +240,20 @@ "relay-test-utils": "^10.0.1", "rimraf": "^3.0.2", "snapshot-diff": "0.2.2", + "stylelint": "9.8.0", + "stylelint-config-standard": "18.2.0", + "stylelint-config-styled-components": "0.1.1", + "stylelint-processor-styled-components": "1.5.1", "tmp": "0.1.0", "ts-node": "8.4.1", "tslint": "5.14.0", "tslint-config-prettier": "1.18.0", "tslint-plugin-relay": "0.0.2", - "typescript": "4.3.5", - "typescript-styled-plugin": "0.18.0", - "vscode-apollo-relay": "1.5.1" - }, - "config": { - "react-native-storybook-loader": { - "searchDir": ["./src"], - "pattern": "**/*.stories.tsx", - "outputFile": "./src/storybook/storyLoader.js" - } + "typescript": "^4.1.2", + "typescript-styled-plugin": "0.13.0", + "vscode-apollo-relay": "1.5.0", + "yaml": "1.9.2", + "yaml-lint": "^1.2.4" }, "lint-staged": { "*.@(ts|tsx)": [ @@ -278,8 +264,8 @@ "*.@(json|md)": [ "yarn prettier-write" ], - "**/!(package.json)": [ - "detect-secrets-launcher --baseline .secrets.baseline" + "*.@(yml)": [ + "yarn yamllint" ] }, "prettier": { diff --git a/patches/@segment+analytics-react-native+1.4.4.patch b/patches/@segment+analytics-react-native+1.4.4.patch new file mode 100644 index 00000000000..afe72953da0 --- /dev/null +++ b/patches/@segment+analytics-react-native+1.4.4.patch @@ -0,0 +1,32 @@ +diff --git a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec b/node_modules/@segment/analytics-react-native/RNAnalytics.podspec +deleted file mode 100644 +index 22dd268..0000000 +--- a/node_modules/@segment/analytics-react-native/RNAnalytics.podspec ++++ /dev/null +@@ -1,26 +0,0 @@ +-require 'json' +-package = JSON.parse(File.read('./package.json')) +- +-Pod::Spec.new do |s| +- s.name = 'RNAnalytics' +- s.version = package['version'] +- s.summary = package['description'] +- s.description = <<-DESC +- Analytics for iOS provides a single API that lets you +- integrate with over 100s of tools. +- DESC +- +- s.homepage = 'http://segment.com/' +- s.social_media_url = 'https://twitter.com/segment' +- s.license = { :type => 'MIT' } +- s.author = { 'Segment' => 'friends@segment.com' } +- s.source = { :git => 'https://github.com/segmentio/analytics-react-native.git', :tag => s.version.to_s } +- +- s.platform = :ios, '10.0' +- s.source_files = 'ios/**/*.{m,h}' +- s.static_framework = true +- +- s.dependency 'Analytics' +- s.dependency 'React-Core' +-end +- diff --git a/patches/@segment+analytics-react-native-appboy+1.4.8.patch b/patches/@segment+analytics-react-native-appboy+1.4.8.patch new file mode 100644 index 00000000000..6d1d6e0776b --- /dev/null +++ b/patches/@segment+analytics-react-native-appboy+1.4.8.patch @@ -0,0 +1,35 @@ +diff --git a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec b/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec +deleted file mode 100644 +index a9eeb16..0000000 +--- a/node_modules/@segment/analytics-react-native-appboy/RNAnalyticsIntegration-Appboy.podspec ++++ /dev/null +@@ -1,29 +0,0 @@ +-require 'json' +-package = JSON.parse(File.read('./package.json')) +- +-Pod::Spec.new do |s| +- s.name = "RNAnalyticsIntegration-Appboy" +- s.version = package["version"] +- s.summary = package["description"] +- s.description = <<-DESC +- Analytics for React-Native provides a single API that lets you +- integrate with over 100s of tools. +- +- This is the Appboy integration for the React-Native library. +- DESC +- +- s.homepage = "http://segment.com/" +- s.license = { :type => 'MIT' } +- s.author = { "Segment" => "friends@segment.com" } +- s.source = { :git => "https://github.com/segmentio/analytics-react-native.git", :tag => s.version.to_s } +- s.social_media_url = 'https://twitter.com/segment' +- +- s.platform = :ios, "11.0" +- s.source_files = 'ios/main.m' +- s.static_framework = true +- +- s.dependency 'Segment-Appboy' +- s.dependency 'Analytics' +- s.dependency 'React-Core' +- s.dependency 'RNAnalytics' +-end diff --git a/patches/react-native-appboy-sdk+1.29.1.patch b/patches/react-native-appboy-sdk+1.29.1.patch new file mode 100644 index 00000000000..53863b7ae01 --- /dev/null +++ b/patches/react-native-appboy-sdk+1.29.1.patch @@ -0,0 +1,29 @@ +diff --git a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec b/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec +deleted file mode 100644 +index 4e69ac8..0000000 +--- a/node_modules/react-native-appboy-sdk/react-native-appboy-sdk.podspec ++++ /dev/null +@@ -1,23 +0,0 @@ +-require 'json' +- +-package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) +- +-Pod::Spec.new do |s| +- s.name = package['name'] +- s.version = package['version'] +- s.summary = package['description'] +- s.description = package['description'] +- s.license = package['license'] +- s.author = package['author'] +- s.homepage = package['homepage'] +- s.source = { :git => 'git+https://github.com/Appboy/appboy-react-sdk.git', :tag => s.version } +- +- s.requires_arc = true +- s.platform = :ios, '9.0' +- +- s.preserve_paths = 'LICENSE.md', 'README.md', 'package.json', 'index.js' +- s.source_files = 'iOS/**/*.{h,m}' +- +- s.dependency 'Appboy-iOS-SDK', '~> 4.2.0' +- s.dependency 'React' +-end diff --git a/patches/react-native-push-notification+7.4.0.patch b/patches/react-native-push-notification+7.4.0.patch deleted file mode 100644 index 79a09fc8264..00000000000 --- a/patches/react-native-push-notification+7.4.0.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/react-native-push-notification/component/index.ios.js b/node_modules/react-native-push-notification/component/index.ios.js -deleted file mode 100644 -index 82eee6a..0000000 ---- a/node_modules/react-native-push-notification/component/index.ios.js -+++ /dev/null -@@ -1,7 +0,0 @@ --"use strict"; -- --import PushNotificationIOS from "@react-native-community/push-notification-ios"; -- --module.exports = { -- component: PushNotificationIOS --}; diff --git a/scripts/set-storybook-environment.js b/scripts/set-storybook-environment.js deleted file mode 100755 index 07f6ae93c8c..00000000000 --- a/scripts/set-storybook-environment.js +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env node - -// Create or change `storybook.json` depending on STORYBOOK env variable -// to read the file content later in `index.ios.js` and `index.android.js` -// and either start the app or Storybook. - -const fs = require("fs") - -const startStorybook = process.env.STORYBOOK === "1" - -let fileContent - -try { - fileContent = require("../storybook.json") -} catch (e) { - fileContent = {} -} - -if (startStorybook) console.log("Starting storybook...") - -fileContent.startStorybook = !!startStorybook - -fs.writeFileSync("./storybook.json", JSON.stringify(fileContent, undefined, 2)) diff --git a/scripts/start_packager.sh b/scripts/start_packager.sh index ecc8a340ae3..92f5722739e 100755 --- a/scripts/start_packager.sh +++ b/scripts/start_packager.sh @@ -1,9 +1,5 @@ -# Set storybook environment depending on STORYBOOK env variable -./scripts/set-storybook-environment.js - # if the user has the React Native Debugger app installed, then use that # otherwise, at time of writing, it opens chrome - if [ -d '/Applications/React Native Debugger.app' ] then export REACT_DEBUGGER="open 'rndebugger://set-debugger-loc?host=localhost&port=8081' --args" diff --git a/src/__generated__/FairArticlesQuery.graphql.ts b/src/__generated__/FairArticlesQuery.graphql.ts index 258058db7dc..d1397367feb 100644 --- a/src/__generated__/FairArticlesQuery.graphql.ts +++ b/src/__generated__/FairArticlesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 87d2388264c700fee7dfa6e461a57302 */ +/* @relayHash a2c7eaafc326ca86ccb365fc75f03310 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -36,7 +36,7 @@ query FairArticlesQuery( fragment FairArticles_fair_2HEEH6 on Fair { slug - articlesConnection(first: $first, after: $after, inEditorialFeed: true) { + articlesConnection(first: $first, after: $after) { totalCount edges { node { @@ -88,26 +88,19 @@ v3 = [ "variableName": "id" } ], -v4 = { - "kind": "Variable", - "name": "after", - "variableName": "after" -}, -v5 = { - "kind": "Variable", - "name": "first", - "variableName": "first" -}, -v6 = [ - (v4/*: any*/), - (v5/*: any*/), +v4 = [ + { + "kind": "Variable", + "name": "after", + "variableName": "after" + }, { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true + "kind": "Variable", + "name": "first", + "variableName": "first" } ], -v7 = { +v5 = { "alias": null, "args": null, "kind": "ScalarField", @@ -134,10 +127,7 @@ return { "plural": false, "selections": [ { - "args": [ - (v4/*: any*/), - (v5/*: any*/) - ], + "args": (v4/*: any*/), "kind": "FragmentSpread", "name": "FairArticles_fair" } @@ -175,7 +165,7 @@ return { }, { "alias": null, - "args": (v6/*: any*/), + "args": (v4/*: any*/), "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "articlesConnection", @@ -240,7 +230,7 @@ return { "name": "name", "storageKey": null }, - (v7/*: any*/) + (v5/*: any*/) ], "storageKey": null }, @@ -282,7 +272,7 @@ return { ], "storageKey": null }, - (v7/*: any*/), + (v5/*: any*/), { "alias": null, "args": null, @@ -333,23 +323,21 @@ return { }, { "alias": null, - "args": (v6/*: any*/), - "filters": [ - "inEditorialFeed" - ], + "args": (v4/*: any*/), + "filters": null, "handle": "connection", "key": "FairArticlesQuery_articlesConnection", "kind": "LinkedHandle", "name": "articlesConnection" }, - (v7/*: any*/) + (v5/*: any*/) ], "storageKey": null } ] }, "params": { - "id": "87d2388264c700fee7dfa6e461a57302", + "id": "a2c7eaafc326ca86ccb365fc75f03310", "metadata": {}, "name": "FairArticlesQuery", "operationKind": "query", diff --git a/src/__generated__/FairArticles_fair.graphql.ts b/src/__generated__/FairArticles_fair.graphql.ts index 0c829507c8d..1955d3f4c71 100644 --- a/src/__generated__/FairArticles_fair.graphql.ts +++ b/src/__generated__/FairArticles_fair.graphql.ts @@ -71,13 +71,7 @@ const node: ReaderFragment = { }, { "alias": "articlesConnection", - "args": [ - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - } - ], + "args": null, "concreteType": "ArticleConnection", "kind": "LinkedField", "name": "__FairArticlesQuery_articlesConnection_connection", @@ -229,11 +223,11 @@ const node: ReaderFragment = { "storageKey": null } ], - "storageKey": "__FairArticlesQuery_articlesConnection_connection(inEditorialFeed:true)" + "storageKey": null } ], "type": "Fair", "abstractKey": null }; -(node as any).hash = '105ebb5748a1592e87cc71d635c7f7bd'; +(node as any).hash = '3617b56cd5e1da3507007fb0522a6f3d'; export default node; diff --git a/src/__generated__/FairEditorialTestsQuery.graphql.ts b/src/__generated__/FairEditorialTestsQuery.graphql.ts index d3dde9334c8..f6fd36389cd 100644 --- a/src/__generated__/FairEditorialTestsQuery.graphql.ts +++ b/src/__generated__/FairEditorialTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 614002b1fde84c246282a59cd05691c5 */ +/* @relayHash a4c687c8474c93af12b5b7a720ca053f */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -33,7 +33,7 @@ query FairEditorialTestsQuery( fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -151,11 +151,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -245,7 +240,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, (v4/*: any*/) ], @@ -254,7 +249,7 @@ return { ] }, "params": { - "id": "614002b1fde84c246282a59cd05691c5", + "id": "a4c687c8474c93af12b5b7a720ca053f", "metadata": { "relayTestingSelectionTypeInfo": { "fair": { diff --git a/src/__generated__/FairEditorial_fair.graphql.ts b/src/__generated__/FairEditorial_fair.graphql.ts index 91d74be8ef6..a749e74fdc7 100644 --- a/src/__generated__/FairEditorial_fair.graphql.ts +++ b/src/__generated__/FairEditorial_fair.graphql.ts @@ -64,11 +64,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -164,12 +159,12 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" } ], "type": "Fair", "abstractKey": null }; })(); -(node as any).hash = 'dcc9e4ac75c08f9729d5731f13fc97fe'; +(node as any).hash = 'c0894b9c1c2e69bc13dde5f5bca3b311'; export default node; diff --git a/src/__generated__/FairQuery.graphql.ts b/src/__generated__/FairQuery.graphql.ts index c47cbb7d066..0dcfa393589 100644 --- a/src/__generated__/FairQuery.graphql.ts +++ b/src/__generated__/FairQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 910bf946214c349eef3acdd70ed8d3e2 */ +/* @relayHash b65aad4342ad2178d42f518b2e9e3afb */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -691,11 +691,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -774,7 +769,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1615,7 +1610,7 @@ return { ] }, "params": { - "id": "910bf946214c349eef3acdd70ed8d3e2", + "id": "b65aad4342ad2178d42f518b2e9e3afb", "metadata": {}, "name": "FairQuery", "operationKind": "query", diff --git a/src/__generated__/FairTestsQuery.graphql.ts b/src/__generated__/FairTestsQuery.graphql.ts index f2c817630e0..cd86e1d8a45 100644 --- a/src/__generated__/FairTestsQuery.graphql.ts +++ b/src/__generated__/FairTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 7c2b278a37c9553cf44bbe2b1b21d68d */ +/* @relayHash 7f0e66ce05b6fcc822099c410bcdc410 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -133,7 +133,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -319,7 +319,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -805,11 +805,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -888,7 +883,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -1729,7 +1724,7 @@ return { ] }, "params": { - "id": "7c2b278a37c9553cf44bbe2b1b21d68d", + "id": "7f0e66ce05b6fcc822099c410bcdc410", "metadata": { "relayTestingSelectionTypeInfo": { "fair": (v30/*: any*/), diff --git a/src/__generated__/Fair_fair.graphql.ts b/src/__generated__/Fair_fair.graphql.ts index f6e241a78a3..9cf12925133 100644 --- a/src/__generated__/Fair_fair.graphql.ts +++ b/src/__generated__/Fair_fair.graphql.ts @@ -81,11 +81,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -108,7 +103,7 @@ return { "storageKey": null } ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -234,5 +229,5 @@ return { "abstractKey": null }; })(); -(node as any).hash = '727444e516cba760bf7d87ed5e868d2d'; +(node as any).hash = '6c991142cc4d3ed85f992de42519c078'; export default node; diff --git a/src/__generated__/SavedAddressesFormQuery.graphql.ts b/src/__generated__/SavedAddressesFormQuery.graphql.ts deleted file mode 100644 index 0ac47e9cd7d..00000000000 --- a/src/__generated__/SavedAddressesFormQuery.graphql.ts +++ /dev/null @@ -1,234 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 4882c50bcdba5ef0707c728f8c12da46 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesFormQueryVariables = {}; -export type SavedAddressesFormQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; - } | null; -}; -export type SavedAddressesFormQuery = { - readonly response: SavedAddressesFormQueryResponse; - readonly variables: SavedAddressesFormQueryVariables; -}; - - - -/* -query SavedAddressesFormQuery { - me { - ...SavedAddressesForm_me - id - } -} - -fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - id - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null -}; -return { - "fragment": { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesFormQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "SavedAddressesForm_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [], - "kind": "Operation", - "name": "SavedAddressesFormQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - (v0/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - (v0/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "4882c50bcdba5ef0707c728f8c12da46", - "metadata": {}, - "name": "SavedAddressesFormQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'b7e7515520a71dc3fbc77471605aae6b'; -export default node; diff --git a/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts b/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts deleted file mode 100644 index 7922e555860..00000000000 --- a/src/__generated__/SavedAddressesFormTestsQuery.graphql.ts +++ /dev/null @@ -1,234 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash c1731f4f53b8c1a40f580d23f8235ef4 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesFormTestsQueryVariables = {}; -export type SavedAddressesFormTestsQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; - } | null; -}; -export type SavedAddressesFormTestsQuery = { - readonly response: SavedAddressesFormTestsQueryResponse; - readonly variables: SavedAddressesFormTestsQueryVariables; -}; - - - -/* -query SavedAddressesFormTestsQuery { - me { - ...SavedAddressesForm_me - id - } -} - -fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - id - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null -}; -return { - "fragment": { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesFormTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": null, - "kind": "FragmentSpread", - "name": "SavedAddressesForm_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": [], - "kind": "Operation", - "name": "SavedAddressesFormTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - (v0/*: any*/), - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - (v0/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "c1731f4f53b8c1a40f580d23f8235ef4", - "metadata": {}, - "name": "SavedAddressesFormTestsQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'c4a3bd662f05db60bd228c93d4e271fd'; -export default node; diff --git a/src/__generated__/SavedAddressesForm_me.graphql.ts b/src/__generated__/SavedAddressesForm_me.graphql.ts deleted file mode 100644 index 73e46156056..00000000000 --- a/src/__generated__/SavedAddressesForm_me.graphql.ts +++ /dev/null @@ -1,170 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck - -import { ReaderFragment } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedAddressesForm_me = { - readonly id: string; - readonly phone: string | null; - readonly addressConnection: { - readonly edges: ReadonlyArray<{ - readonly node: { - readonly internalID: string; - readonly name: string | null; - readonly addressLine1: string; - readonly addressLine2: string | null; - readonly addressLine3: string | null; - readonly country: string; - readonly city: string; - readonly region: string | null; - readonly postalCode: string | null; - readonly isDefault: boolean; - } | null; - } | null> | null; - } | null; - readonly " $refType": "SavedAddressesForm_me"; -}; -export type SavedAddressesForm_me$data = SavedAddressesForm_me; -export type SavedAddressesForm_me$key = { - readonly " $data"?: SavedAddressesForm_me$data; - readonly " $fragmentRefs": FragmentRefs<"SavedAddressesForm_me">; -}; - - - -const node: ReaderFragment = { - "argumentDefinitions": [], - "kind": "Fragment", - "metadata": null, - "name": "SavedAddressesForm_me", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phone", - "storageKey": null - }, - { - "alias": null, - "args": [ - { - "kind": "Literal", - "name": "first", - "value": 3 - } - ], - "concreteType": "UserAddressConnection", - "kind": "LinkedField", - "name": "addressConnection", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddressEdge", - "kind": "LinkedField", - "name": "edges", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "UserAddress", - "kind": "LinkedField", - "name": "node", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "storageKey": "addressConnection(first:3)" - } - ], - "type": "Me", - "abstractKey": null -}; -(node as any).hash = 'b8dc20f08a969820d3a2cd8dc6b674ba'; -export default node; diff --git a/src/__generated__/SavedAddressesQuery.graphql.ts b/src/__generated__/SavedAddressesQuery.graphql.ts index 736b2e5be3e..d8259d16f2a 100644 --- a/src/__generated__/SavedAddressesQuery.graphql.ts +++ b/src/__generated__/SavedAddressesQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 3498416c797ab2cba48a0de89b8851a7 */ +/* @relayHash 307a22f71e0c5528a8308ab10c0a1713 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "3498416c797ab2cba48a0de89b8851a7", + "id": "307a22f71e0c5528a8308ab10c0a1713", "metadata": {}, "name": "SavedAddressesQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts index 55b9b28a7fc..5f8b534b496 100644 --- a/src/__generated__/SavedAddressesRefetchQuery.graphql.ts +++ b/src/__generated__/SavedAddressesRefetchQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash c60103022967beb3a553190cabbfaf38 */ +/* @relayHash 7740bab0af31b45dd30e299ce12294a9 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesRefetchQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "c60103022967beb3a553190cabbfaf38", + "id": "7740bab0af31b45dd30e299ce12294a9", "metadata": {}, "name": "SavedAddressesRefetchQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddressesTestsQuery.graphql.ts b/src/__generated__/SavedAddressesTestsQuery.graphql.ts index 437331f9b13..e81acb0924f 100644 --- a/src/__generated__/SavedAddressesTestsQuery.graphql.ts +++ b/src/__generated__/SavedAddressesTestsQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash 236ca6785dec6683afd20e3dc47b6819 */ +/* @relayHash 4bd30d9d1cbd59daf65fbe033e8bf414 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -28,7 +28,7 @@ query SavedAddressesTestsQuery { fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -37,12 +37,10 @@ fragment SavedAddresses_me on Me { addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } @@ -112,7 +110,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -166,13 +164,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -200,13 +191,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -215,7 +199,7 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" }, (v1/*: any*/) ], @@ -224,7 +208,7 @@ return { ] }, "params": { - "id": "236ca6785dec6683afd20e3dc47b6819", + "id": "4bd30d9d1cbd59daf65fbe033e8bf414", "metadata": {}, "name": "SavedAddressesTestsQuery", "operationKind": "query", diff --git a/src/__generated__/SavedAddresses_me.graphql.ts b/src/__generated__/SavedAddresses_me.graphql.ts index 8a2368e2e99..0b57bf06cb7 100644 --- a/src/__generated__/SavedAddresses_me.graphql.ts +++ b/src/__generated__/SavedAddresses_me.graphql.ts @@ -15,12 +15,10 @@ export type SavedAddresses_me = { readonly addressLine1: string; readonly addressLine2: string | null; readonly addressLine3: string | null; - readonly country: string; readonly city: string; readonly region: string | null; readonly postalCode: string | null; readonly phoneNumber: string | null; - readonly isDefault: boolean; } | null; } | null> | null; } | null; @@ -55,7 +53,7 @@ return { { "kind": "Literal", "name": "first", - "value": 10 + "value": 3 } ], "concreteType": "UserAddressConnection", @@ -115,13 +113,6 @@ return { "name": "addressLine3", "storageKey": null }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, { "alias": null, "args": null, @@ -149,13 +140,6 @@ return { "kind": "ScalarField", "name": "phoneNumber", "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null } ], "storageKey": null @@ -164,12 +148,12 @@ return { "storageKey": null } ], - "storageKey": "addressConnection(first:10)" + "storageKey": "addressConnection(first:3)" } ], "type": "Me", "abstractKey": null }; })(); -(node as any).hash = 'f043741b2994f3b2d418f14b69de0cb2'; +(node as any).hash = '30a29267ac711583ee688cb2cfc22a60'; export default node; diff --git a/src/__generated__/SavedSearchButtonQuery.graphql.ts b/src/__generated__/SavedSearchButtonQuery.graphql.ts deleted file mode 100644 index 57c3ad5d82a..00000000000 --- a/src/__generated__/SavedSearchButtonQuery.graphql.ts +++ /dev/null @@ -1,154 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 28d5a3a40691a84f69881d0cf92d2132 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SearchCriteriaAttributes = { - acquireable?: boolean | null; - additionalGeneIDs?: Array | null; - artistID?: string | null; - atAuction?: boolean | null; - attributionClass?: Array | null; - colors?: Array | null; - dimensionRange?: string | null; - height?: string | null; - inquireableOnly?: boolean | null; - locationCities?: Array | null; - majorPeriods?: Array | null; - materialsTerms?: Array | null; - offerable?: boolean | null; - partnerIDs?: Array | null; - priceRange?: string | null; - width?: string | null; -}; -export type SavedSearchButtonQueryVariables = { - criteria: SearchCriteriaAttributes; -}; -export type SavedSearchButtonQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; - } | null; -}; -export type SavedSearchButtonQuery = { - readonly response: SavedSearchButtonQueryResponse; - readonly variables: SavedSearchButtonQueryVariables; -}; - - - -/* -query SavedSearchButtonQuery( - $criteria: SearchCriteriaAttributes! -) { - me { - ...SavedSearchButton_me_1ff8oJ - id - } -} - -fragment SavedSearchButton_me_1ff8oJ on Me { - savedSearch(criteria: $criteria) { - internalID - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } -], -v1 = [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } -]; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButtonQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": (v1/*: any*/), - "kind": "FragmentSpread", - "name": "SavedSearchButton_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "SavedSearchButtonQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "28d5a3a40691a84f69881d0cf92d2132", - "metadata": {}, - "name": "SavedSearchButtonQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = '449e4412d84929d7c547ad86d3657c1b'; -export default node; diff --git a/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts b/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts deleted file mode 100644 index 7005594f488..00000000000 --- a/src/__generated__/SavedSearchButtonTestsQuery.graphql.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 12121ce84504f77f46b0c4522e5bab66 */ - -import { ConcreteRequest } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SearchCriteriaAttributes = { - acquireable?: boolean | null; - additionalGeneIDs?: Array | null; - artistID?: string | null; - atAuction?: boolean | null; - attributionClass?: Array | null; - colors?: Array | null; - dimensionRange?: string | null; - height?: string | null; - inquireableOnly?: boolean | null; - locationCities?: Array | null; - majorPeriods?: Array | null; - materialsTerms?: Array | null; - offerable?: boolean | null; - partnerIDs?: Array | null; - priceRange?: string | null; - width?: string | null; -}; -export type SavedSearchButtonTestsQueryVariables = { - criteria: SearchCriteriaAttributes; -}; -export type SavedSearchButtonTestsQueryResponse = { - readonly me: { - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; - } | null; -}; -export type SavedSearchButtonTestsQuery = { - readonly response: SavedSearchButtonTestsQueryResponse; - readonly variables: SavedSearchButtonTestsQueryVariables; -}; - - - -/* -query SavedSearchButtonTestsQuery( - $criteria: SearchCriteriaAttributes! -) { - me { - ...SavedSearchButton_me_1ff8oJ - id - } -} - -fragment SavedSearchButton_me_1ff8oJ on Me { - savedSearch(criteria: $criteria) { - internalID - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } -], -v1 = [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } -], -v2 = { - "enumValues": null, - "nullable": false, - "plural": false, - "type": "ID" -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButtonTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "args": (v1/*: any*/), - "kind": "FragmentSpread", - "name": "SavedSearchButton_me" - } - ], - "storageKey": null - } - ], - "type": "Query", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "SavedSearchButtonTestsQuery", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Me", - "kind": "LinkedField", - "name": "me", - "plural": false, - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "12121ce84504f77f46b0c4522e5bab66", - "metadata": { - "relayTestingSelectionTypeInfo": { - "me": { - "enumValues": null, - "nullable": true, - "plural": false, - "type": "Me" - }, - "me.id": (v2/*: any*/), - "me.savedSearch": { - "enumValues": null, - "nullable": true, - "plural": false, - "type": "SearchCriteria" - }, - "me.savedSearch.internalID": (v2/*: any*/) - } - }, - "name": "SavedSearchButtonTestsQuery", - "operationKind": "query", - "text": null - } -}; -})(); -(node as any).hash = 'd369f95a141fe0bd2f24bf5249e083ba'; -export default node; diff --git a/src/__generated__/SavedSearchButton_me.graphql.ts b/src/__generated__/SavedSearchButton_me.graphql.ts deleted file mode 100644 index e8974bb17a1..00000000000 --- a/src/__generated__/SavedSearchButton_me.graphql.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck - -import { ReaderFragment } from "relay-runtime"; -import { FragmentRefs } from "relay-runtime"; -export type SavedSearchButton_me = { - readonly savedSearch: { - readonly internalID: string; - } | null; - readonly " $refType": "SavedSearchButton_me"; -}; -export type SavedSearchButton_me$data = SavedSearchButton_me; -export type SavedSearchButton_me$key = { - readonly " $data"?: SavedSearchButton_me$data; - readonly " $fragmentRefs": FragmentRefs<"SavedSearchButton_me">; -}; - - - -const node: ReaderFragment = { - "argumentDefinitions": [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "criteria" - } - ], - "kind": "Fragment", - "metadata": null, - "name": "SavedSearchButton_me", - "selections": [ - { - "alias": null, - "args": [ - { - "kind": "Variable", - "name": "criteria", - "variableName": "criteria" - } - ], - "concreteType": "SearchCriteria", - "kind": "LinkedField", - "name": "savedSearch", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Me", - "abstractKey": null -}; -(node as any).hash = '47929e285b919e81f21a8625678edd09'; -export default node; diff --git a/src/__generated__/VanityURLEntityQuery.graphql.ts b/src/__generated__/VanityURLEntityQuery.graphql.ts index 37baaf2bba8..65922465c3c 100644 --- a/src/__generated__/VanityURLEntityQuery.graphql.ts +++ b/src/__generated__/VanityURLEntityQuery.graphql.ts @@ -1,7 +1,7 @@ /* tslint:disable */ /* eslint-disable */ // @ts-nocheck -/* @relayHash d459e8eee18b24b81d8e36de3bd3b46e */ +/* @relayHash 15e3966a65b4152669828e6221f47660 */ import { ConcreteRequest } from "relay-runtime"; import { FragmentRefs } from "relay-runtime"; @@ -153,7 +153,7 @@ fragment FairCollections_fair on Fair { fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { @@ -339,7 +339,7 @@ fragment Fair_fair on Fair { internalID slug isActive - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { edges { __typename } @@ -1274,11 +1274,6 @@ return { "name": "first", "value": 5 }, - { - "kind": "Literal", - "name": "inEditorialFeed", - "value": true - }, { "kind": "Literal", "name": "sort", @@ -1351,7 +1346,7 @@ return { }, (v8/*: any*/) ], - "storageKey": "articlesConnection(first:5,inEditorialFeed:true,sort:\"PUBLISHED_AT_DESC\")" + "storageKey": "articlesConnection(first:5,sort:\"PUBLISHED_AT_DESC\")" }, { "alias": null, @@ -2388,7 +2383,7 @@ return { ] }, "params": { - "id": "d459e8eee18b24b81d8e36de3bd3b46e", + "id": "15e3966a65b4152669828e6221f47660", "metadata": {}, "name": "VanityURLEntityQuery", "operationKind": "query", diff --git a/src/__generated__/addNewAddressMutation.graphql.ts b/src/__generated__/addNewAddressMutation.graphql.ts deleted file mode 100644 index 702b617c60c..00000000000 --- a/src/__generated__/addNewAddressMutation.graphql.ts +++ /dev/null @@ -1,290 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 48f9985b022e04924a8464b308ce2ee4 */ - -import { ConcreteRequest } from "relay-runtime"; -export type CreateUserAddressInput = { - attributes: UserAddressAttributes; - clientMutationId?: string | null; -}; -export type UserAddressAttributes = { - addressLine1: string; - addressLine2?: string | null; - addressLine3?: string | null; - city: string; - country: string; - name: string; - phoneNumber?: string | null; - postalCode?: string | null; - region?: string | null; -}; -export type addNewAddressMutationVariables = { - input: CreateUserAddressInput; -}; -export type addNewAddressMutationResponse = { - readonly createUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly city?: string; - readonly country?: string; - readonly isDefault?: boolean; - readonly name?: string | null; - readonly phoneNumber?: string | null; - readonly postalCode?: string | null; - readonly region?: string | null; - readonly errors?: ReadonlyArray<{ - readonly message: string; - }>; - }; - } | null; -}; -export type addNewAddressMutation = { - readonly response: addNewAddressMutationResponse; - readonly variables: addNewAddressMutationVariables; -}; - - - -/* -mutation addNewAddressMutation( - $input: CreateUserAddressInput! -) { - createUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - addressLine1 - addressLine2 - city - country - isDefault - name - phoneNumber - postalCode - region - } - ... on Errors { - errors { - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "addNewAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "CreateUserAddressPayload", - "kind": "LinkedField", - "name": "createUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "addNewAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "CreateUserAddressPayload", - "kind": "LinkedField", - "name": "createUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "48f9985b022e04924a8464b308ce2ee4", - "metadata": {}, - "name": "addNewAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '98ac48306b7d0e1a4ad2ecb4ea70e78b'; -export default node; diff --git a/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts b/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts deleted file mode 100644 index 01049a54e0f..00000000000 --- a/src/__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql.ts +++ /dev/null @@ -1,288 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash c575d1e45a866f470dcf45a28beeb522 */ - -import { ConcreteRequest } from "relay-runtime"; -export type DeleteUserAddressInput = { - clientMutationId?: string | null; - userAddressID: string; -}; -export type deleteSavedAddressDeleteUserAddressMutationVariables = { - input: DeleteUserAddressInput; -}; -export type deleteSavedAddressDeleteUserAddressMutationResponse = { - readonly deleteUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly name?: string | null; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly addressLine3?: string | null; - readonly city?: string; - readonly region?: string | null; - readonly postalCode?: string | null; - readonly phoneNumber?: string | null; - readonly isDefault?: boolean; - readonly errors?: ReadonlyArray<{ - readonly code: string; - readonly message: string; - }>; - }; - } | null; -}; -export type deleteSavedAddressDeleteUserAddressMutation = { - readonly response: deleteSavedAddressDeleteUserAddressMutationResponse; - readonly variables: deleteSavedAddressDeleteUserAddressMutationVariables; -}; - - - -/* -mutation deleteSavedAddressDeleteUserAddressMutation( - $input: DeleteUserAddressInput! -) { - deleteUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - addressLine3 - city - region - postalCode - phoneNumber - isDefault - } - ... on Errors { - errors { - code - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine3", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "code", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "deleteSavedAddressDeleteUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "DeleteUserAddressPayload", - "kind": "LinkedField", - "name": "deleteUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "deleteSavedAddressDeleteUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "DeleteUserAddressPayload", - "kind": "LinkedField", - "name": "deleteUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "c575d1e45a866f470dcf45a28beeb522", - "metadata": {}, - "name": "deleteSavedAddressDeleteUserAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '919ab63c8176f0ebdd4002b0055c6826'; -export default node; diff --git a/src/__generated__/setAsDefaultAddressMutation.graphql.ts b/src/__generated__/setAsDefaultAddressMutation.graphql.ts deleted file mode 100644 index b48928d51ff..00000000000 --- a/src/__generated__/setAsDefaultAddressMutation.graphql.ts +++ /dev/null @@ -1,207 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 1b9e47d6d72070bbc2212342174e93d4 */ - -import { ConcreteRequest } from "relay-runtime"; -export type UpdateUserDefaultAddressInput = { - clientMutationId?: string | null; - userAddressID: string; -}; -export type setAsDefaultAddressMutationVariables = { - input: UpdateUserDefaultAddressInput; -}; -export type setAsDefaultAddressMutationResponse = { - readonly updateUserDefaultAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly isDefault?: boolean; - readonly errors?: ReadonlyArray<{ - readonly message: string; - }>; - }; - } | null; -}; -export type setAsDefaultAddressMutation = { - readonly response: setAsDefaultAddressMutationResponse; - readonly variables: setAsDefaultAddressMutationVariables; -}; - - - -/* -mutation setAsDefaultAddressMutation( - $input: UpdateUserDefaultAddressInput! -) { - updateUserDefaultAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - isDefault - } - ... on Errors { - errors { - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "setAsDefaultAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserDefaultAddressPayload", - "kind": "LinkedField", - "name": "updateUserDefaultAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "setAsDefaultAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserDefaultAddressPayload", - "kind": "LinkedField", - "name": "updateUserDefaultAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "1b9e47d6d72070bbc2212342174e93d4", - "metadata": {}, - "name": "setAsDefaultAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = 'fcb01f6b87f7b3d7148540e9ecda229f'; -export default node; diff --git a/src/__generated__/updateUserAddressMutation.graphql.ts b/src/__generated__/updateUserAddressMutation.graphql.ts deleted file mode 100644 index 4377a950136..00000000000 --- a/src/__generated__/updateUserAddressMutation.graphql.ts +++ /dev/null @@ -1,300 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -// @ts-nocheck -/* @relayHash 42186652b7be904f8449c97721e3f30b */ - -import { ConcreteRequest } from "relay-runtime"; -export type UpdateUserAddressInput = { - attributes: UserAddressAttributes; - clientMutationId?: string | null; - userAddressID: string; -}; -export type UserAddressAttributes = { - addressLine1: string; - addressLine2?: string | null; - addressLine3?: string | null; - city: string; - country: string; - name: string; - phoneNumber?: string | null; - postalCode?: string | null; - region?: string | null; -}; -export type updateUserAddressMutationVariables = { - input: UpdateUserAddressInput; -}; -export type updateUserAddressMutationResponse = { - readonly updateUserAddress: { - readonly userAddressOrErrors: { - readonly id?: string; - readonly internalID?: string; - readonly name?: string | null; - readonly addressLine1?: string; - readonly addressLine2?: string | null; - readonly isDefault?: boolean; - readonly phoneNumber?: string | null; - readonly city?: string; - readonly region?: string | null; - readonly postalCode?: string | null; - readonly country?: string; - readonly errors?: ReadonlyArray<{ - readonly code: string; - readonly message: string; - }>; - }; - } | null; -}; -export type updateUserAddressMutation = { - readonly response: updateUserAddressMutationResponse; - readonly variables: updateUserAddressMutationVariables; -}; - - - -/* -mutation updateUserAddressMutation( - $input: UpdateUserAddressInput! -) { - updateUserAddress(input: $input) { - userAddressOrErrors { - __typename - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - isDefault - phoneNumber - city - region - postalCode - country - } - ... on Errors { - errors { - code - message - } - } - } - } -} -*/ - -const node: ConcreteRequest = (function(){ -var v0 = [ - { - "defaultValue": null, - "kind": "LocalArgument", - "name": "input" - } -], -v1 = [ - { - "kind": "Variable", - "name": "input", - "variableName": "input" - } -], -v2 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "id", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "internalID", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "name", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine1", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "addressLine2", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "isDefault", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "phoneNumber", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "city", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "region", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "postalCode", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "country", - "storageKey": null - } - ], - "type": "UserAddress", - "abstractKey": null -}, -v3 = { - "kind": "InlineFragment", - "selections": [ - { - "alias": null, - "args": null, - "concreteType": "Error", - "kind": "LinkedField", - "name": "errors", - "plural": true, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "code", - "storageKey": null - }, - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "message", - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Errors", - "abstractKey": null -}; -return { - "fragment": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Fragment", - "metadata": null, - "name": "updateUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserAddressPayload", - "kind": "LinkedField", - "name": "updateUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ], - "type": "Mutation", - "abstractKey": null - }, - "kind": "Request", - "operation": { - "argumentDefinitions": (v0/*: any*/), - "kind": "Operation", - "name": "updateUserAddressMutation", - "selections": [ - { - "alias": null, - "args": (v1/*: any*/), - "concreteType": "UpdateUserAddressPayload", - "kind": "LinkedField", - "name": "updateUserAddress", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "concreteType": null, - "kind": "LinkedField", - "name": "userAddressOrErrors", - "plural": false, - "selections": [ - { - "alias": null, - "args": null, - "kind": "ScalarField", - "name": "__typename", - "storageKey": null - }, - (v2/*: any*/), - (v3/*: any*/) - ], - "storageKey": null - } - ], - "storageKey": null - } - ] - }, - "params": { - "id": "42186652b7be904f8449c97721e3f30b", - "metadata": {}, - "name": "updateUserAddressMutation", - "operationKind": "mutation", - "text": null - } -}; -})(); -(node as any).hash = '993b108854d372333cb2260bce841108'; -export default node; diff --git a/src/lib/AndroidApp.tsx b/src/lib/AndroidApp.tsx index 2dab47dbaaf..5ceb3a357b5 100644 --- a/src/lib/AndroidApp.tsx +++ b/src/lib/AndroidApp.tsx @@ -2,7 +2,7 @@ import { GoogleSignin } from "@react-native-google-signin/google-signin" import { getCurrentEmissionState, GlobalStore } from "lib/store/GlobalStore" import { AdminMenuWrapper } from "lib/utils/AdminMenuWrapper" import { addTrackingProvider, track } from "lib/utils/track" -import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" +import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { useDeepLinks } from "lib/utils/useDeepLinks" import { useStripeConfig } from "lib/utils/useStripeConfig" import React, { useEffect } from "react" @@ -20,7 +20,7 @@ import { Onboarding } from "./Scenes/Onboarding/Onboarding" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" import { AnalyticsConstants } from "./utils/track/constants" -addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) +addTrackingProvider("segment rn android", SegmentTrackingProvider) addTrackingProvider("console", ConsoleTrackingProvider) if (UIManager.setLayoutAnimationEnabledExperimental) { diff --git a/src/lib/AppProviders.tsx b/src/lib/AppProviders.tsx index d4e928d0b50..7c36823ea54 100644 --- a/src/lib/AppProviders.tsx +++ b/src/lib/AppProviders.tsx @@ -12,17 +12,19 @@ import { ProvideScreenDimensions } from "./utils/useScreenDimensions" export const AppProviders = ({ children }: { children: ReactNode }) => ( - - - - - <_FancyModalPageWrapper> - {children} - - - - - + + + + + + <_FancyModalPageWrapper> + {children} + + + + + + ) diff --git a/src/lib/AppRegistry.tsx b/src/lib/AppRegistry.tsx index a9d4c4eecd7..ef4961c8696 100644 --- a/src/lib/AppRegistry.tsx +++ b/src/lib/AppRegistry.tsx @@ -1,5 +1,5 @@ import React, { useEffect } from "react" -import { Appearance, AppRegistry, LogBox, Platform, View } from "react-native" +import { AppRegistry, LogBox, Platform, View } from "react-native" import { SafeAreaInsets } from "lib/types/SafeAreaInsets" import { BidFlow } from "./Containers/BidFlow" @@ -63,7 +63,6 @@ import { SaleQueryRenderer } from "./Scenes/Sale" import { SaleFAQ } from "./Scenes/SaleFAQ/SaleFAQ" import { SaleInfoQueryRenderer } from "./Scenes/SaleInfo" import { SavedAddressesQueryRenderer } from "./Scenes/SavedAddresses/SavedAddresses" -import { SavedAddressesFormQueryRenderer } from "./Scenes/SavedAddresses/SavedAddressesForm" import { SalesQueryRenderer } from "./Scenes/Sales" import { Search } from "./Scenes/Search" @@ -71,12 +70,12 @@ import { ShowMoreInfoQueryRenderer, ShowQueryRenderer } from "./Scenes/Show" import { VanityURLEntityRenderer } from "./Scenes/VanityURL/VanityURLEntity" import { GoogleSignin } from "@react-native-google-signin/google-signin" -import StorybookUI from "../storybook/storybook-ui" import { AppProviders } from "./AppProviders" import { ArtsyKeyboardAvoidingViewContext } from "./Components/ArtsyKeyboardAvoidingView" import { ArtsyReactWebViewPage, useWebViewCookies } from "./Components/ArtsyReactWebView" import { RegistrationFlow } from "./Containers/RegistrationFlow" import { useSentryConfig } from "./ErrorReporting" +import { NativeAnalyticsProvider } from "./NativeModules/Events" import { ArticlesQueryRenderer } from "./Scenes/Articles/Articles" import { AuctionResultQueryRenderer } from "./Scenes/AuctionResult/AuctionResult" import { AuctionResultsForYouQueryRenderer } from "./Scenes/AuctionResultsForYou/AuctionResultsForYou" @@ -97,8 +96,6 @@ import { GlobalStore, useFeatureFlag, useSelectedTab } from "./store/GlobalStore import { AdminMenu } from "./utils/AdminMenu" import { addTrackingProvider, Schema, screenTrack, track } from "./utils/track" import { ConsoleTrackingProvider } from "./utils/track/ConsoleTrackingProvider" -import { AnalyticsConstants } from "./utils/track/constants" -import { SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider } from "./utils/track/SegmentTrackingProvider" import { useScreenDimensions } from "./utils/useScreenDimensions" import { useStripeConfig } from "./utils/useStripeConfig" @@ -117,7 +114,7 @@ LogBox.ignoreLogs([ "Picker has been extracted", ]) -addTrackingProvider(SEGMENT_TRACKING_PROVIDER, SegmentTrackingProvider) +addTrackingProvider("native ios analytics", NativeAnalyticsProvider) addTrackingProvider("console", ConsoleTrackingProvider) interface ArtworkProps { @@ -366,10 +363,6 @@ export const modules = defineModules({ Show: reactModule(ShowQueryRenderer, { fullBleed: true }), ShowMoreInfo: reactModule(ShowMoreInfoQueryRenderer), SavedAddresses: reactModule(SavedAddressesQueryRenderer), - SavedAddressesForm: reactModule(SavedAddressesFormQueryRenderer, { - alwaysPresentModally: true, - hasOwnModalCloseButton: false, - }), VanityURLEntity: reactModule(VanityURLEntityRenderer, { fullBleed: true }), ViewingRoom: reactModule(ViewingRoomQueryRenderer, { fullBleed: true }), ViewingRoomArtwork: reactModule(ViewingRoomArtworkQueryRenderer), @@ -380,7 +373,6 @@ export const modules = defineModules({ }), WorksForYou: reactModule(WorksForYouQueryRenderer), LotsByArtistsYouFollow: reactModule(LotsByArtistsYouFollowQueryRenderer), - Storybook: reactModule(StorybookUI, { fullBleed: true, hidesBackButton: true }), }) // Register react modules with the app registry @@ -398,20 +390,6 @@ const Main: React.FC<{}> = track()(({}) => { GoogleSignin.configure({ webClientId: "673710093763-hbj813nj4h3h183c4ildmu8vvqc0ek4h.apps.googleusercontent.com", }) - if (Platform.OS === "ios") { - const scheme = Appearance.getColorScheme() - SegmentTrackingProvider.identify?.(null, { - [AnalyticsConstants.UserInterfaceStyle.key]: (() => { - switch (scheme) { - case "light": - return AnalyticsConstants.UserInterfaceStyle.value.Light - case "dark": - return AnalyticsConstants.UserInterfaceStyle.value.Dark - } - return AnalyticsConstants.UserInterfaceStyle.value.Unspecified - })(), - }) - } }, []) const showNewOnboarding = useFeatureFlag("AREnableNewOnboardingFlow") const isHydrated = GlobalStore.useAppState((state) => state.sessionState.isHydrated) @@ -443,5 +421,5 @@ const Main: React.FC<{}> = track()(({}) => { }) if (Platform.OS === "ios") { - register("Artsy", Main, { fullBleed: true, isMainView: true }) + register("Main", Main, { fullBleed: true, isMainView: true }) } diff --git a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx index 069b85d80ee..d80c9b1102b 100644 --- a/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/ArtistArtworks.tsx @@ -8,7 +8,7 @@ import { prepareFilterArtworksParamsForInput, } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" import { ArtworkFiltersStoreProvider, ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { ORDERED_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters/SortOptions" +import { ORDERED_ARTWORK_SORTS } from 'lib/Components/ArtworkFilter/Filters/SortOptions' import { convertSavedSearchCriteriaToFilterParams } from "lib/Components/ArtworkFilter/SavedSearch/convertersToFilterParams" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" @@ -23,13 +23,11 @@ import { PAGE_SIZE } from "lib/data/constants" import { useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, FilterIcon, Flex, Separator, Spacer, Text, TouchableHighlightColor } from "palette" +import { Box, Separator, Spacer } from "palette" import React, { useContext, useEffect, useMemo, useState } from "react" -import { Platform } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import { SavedSearchBannerQueryRender } from "./SavedSearchBanner" -import { SavedSearchButtonQueryRenderer } from "./SavedSearchButton" interface ArtworksGridProps extends InfiniteScrollGridProps { artist: ArtistArtworks_artist @@ -97,9 +95,7 @@ const ArtistArtworksContainer: React.FC { const tracking = useTracking() - const enableSavedSearch = - Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") - const enableSavedSearchV2 = useFeatureFlag("AREnableSavedSearchV2") + const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const setInitialFilterStateAction = ArtworksFiltersStore.useStoreActions((state) => state.setInitialFilterStateAction) @@ -135,9 +131,12 @@ const ArtistArtworksContainer: React.FC sortEntity.paramValue === "-published_at") + const sortFilterItem = ORDERED_ARTWORK_SORTS.find(sortEntity => sortEntity.paramValue === "-published_at") - setInitialFilterStateAction([...params, sortFilterItem!]) + setInitialFilterStateAction([ + ...params, + sortFilterItem!, + ]) } }, []) @@ -159,44 +158,17 @@ const ArtistArtworksContainer: React.FC { setJSX( - {enableSavedSearchV2 ? ( - <> - - ( - - - - Sort & Filter - - - )} - /> - - - - - ) : ( - <> - - - {!!shouldShowSavedSearchBanner && ( - - - - - )} - + + + {!!shouldShowSavedSearchBanner && ( + + + + )} ) - }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams, enableSavedSearchV2]) + }, [artworksTotal, shouldShowSavedSearchBanner, artistInternalId, filterParams]) const filteredArtworks = () => { if (artworksCount === 0) { diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx index ed118e90cc3..18b6d5ac751 100644 --- a/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/SavedSearchBanner.tsx @@ -12,8 +12,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { PushAuthorizationStatus } from "lib/Scenes/MyProfile/MyProfilePushNotifications" import { Button, Flex, Text } from "palette" import React, { useState } from "react" -import { Alert, AlertButton, Linking, Platform } from "react-native" -import PushNotification from "react-native-push-notification" +import { Alert, Linking, Platform } from "react-native" import { commitMutation, createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" import { useTracking } from "react-tracking" @@ -57,6 +56,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Sorry, an error occured.", message: "Please try again.", + placement: "top", type: "error", }) } @@ -85,6 +85,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been set.", message: "We will send you a push notification once new works are added.", + placement: "top", }) trackToggledSavedSearchEvent(true, response.createSavedSearch?.savedSearchOrErrors.internalID) }, @@ -119,6 +120,7 @@ export const SavedSearchBanner: React.FC = ({ popoverMessage.show({ title: "Your alert has been removed.", message: "Don't worry, you can always create a new one.", + placement: "top", }) trackToggledSavedSearchEvent(false, response.disableSavedSearch?.savedSearchOrErrors.internalID) }, @@ -129,68 +131,47 @@ export const SavedSearchBanner: React.FC = ({ }) } - const showAlert = (permissionsDenied: boolean) => { - if (permissionsDenied) { - const buttons: AlertButton[] = [ - { - text: "Settings", - onPress: () => - Platform.OS === "android" ? Linking.openSettings() : Linking.openURL("App-prefs:NOTIFICATIONS_ID"), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - Alert.alert( - "Artsy would like to send you notifications", - `To receive notifications for your alerts, you will need to enable them in your ${Platform.select({ - ios: "iOS", - android: "android", - default: "device", - })} Settings. ${Platform.select({ - ios: `Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, - default: "", - })} `, - Platform.OS === "ios" ? buttons : buttons.reverse() - ) - } else { - // permissions not determined: Android should never need this - Alert.alert( - "Artsy would like to send you notifications", - "We need your permission to send notifications on alerts you have created.", - [ - { - text: "Proceed", - onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), - }, - { - text: "Cancel", - style: "cancel", - }, - ] - ) - } - } - const checkNotificationPermissionsAndCreate = () => { if (Platform.OS === "android") { - PushNotification.checkPermissions((permissions) => { - if (!permissions.alert) { - return showAlert(true) - } - createSavedSearch() - return - }) + // TODO:- When android Push notification setup is ready add check for permission + // NotificationManagerCompat.from(getReactApplicationContext()).areNotificationsEnabled(); + createSavedSearch() + return } LegacyNativeModules.ARTemporaryAPIModule.fetchNotificationPermissions((_, result: PushAuthorizationStatus) => { switch (result) { case PushAuthorizationStatus.Authorized: return createSavedSearch() case PushAuthorizationStatus.Denied: - return showAlert(true) + return Alert.alert( + "Artsy would like to send you notifications", + `To receive notifications for your alerts, you will need to enable them in your iOS Settings. Tap 'Artsy' and enable "Allow Notifications" for Artsy.`, + [ + { + text: "Settings", + onPress: () => Linking.openURL("App-prefs:NOTIFICATIONS_ID"), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + ) case PushAuthorizationStatus.NotDetermined: - return showAlert(false) + return Alert.alert( + "Artsy would like to send you notifications", + "We need your permission to send notifications on alerts you have created.", + [ + { + text: "Proceed", + onPress: () => LegacyNativeModules.ARTemporaryAPIModule.requestNotificationPermissions(), + }, + { + text: "Cancel", + style: "cancel", + }, + ] + ) default: return } diff --git a/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx b/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx deleted file mode 100644 index cacb2af63a3..00000000000 --- a/src/lib/Components/Artist/ArtistArtworks/SavedSearchButton.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import { captureMessage } from "@sentry/react-native" -import { SavedSearchButton_me } from "__generated__/SavedSearchButton_me.graphql" -import { SavedSearchButtonQuery } from "__generated__/SavedSearchButtonQuery.graphql" -import { FilterParams, prepareFilterParamsForSaveSearchInput } from "lib/Components/ArtworkFilter/ArtworkFilterHelpers" -import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { BellIcon, Button } from "palette" -import React from "react" -import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" - -interface SavedSearchButtonProps { - me?: SavedSearchButton_me | null - loading?: boolean - attributes: SearchCriteriaAttributes -} - -interface SavedSearchButtonQueryRendererProps { - filters: FilterParams - artistId: string -} - -export const SavedSearchButton: React.FC = ({ me, loading, attributes }) => { - const isSavedSearch = !!me?.savedSearch?.internalID - const emptyAttributes = Object.keys(attributes).length === 0 - - const handlePress = () => { - console.log("saved search button pressed") - } - - return ( - - ) -} - -export const SavedSearchButtonFragmentContainer = createFragmentContainer(SavedSearchButton, { - me: graphql` - fragment SavedSearchButton_me on Me @argumentDefinitions(criteria: { type: "SearchCriteriaAttributes" }) { - savedSearch(criteria: $criteria) { - internalID - } - } - `, -}) - -export const SavedSearchButtonQueryRenderer: React.FC = (props) => { - const { filters, artistId } = props - const input = prepareFilterParamsForSaveSearchInput(filters) - const attributes: SearchCriteriaAttributes = { - artistID: artistId, - ...input, - } - - if (Object.keys(input).length === 0) { - return - } - - return ( - - environment={defaultEnvironment} - query={graphql` - query SavedSearchButtonQuery($criteria: SearchCriteriaAttributes!) { - me { - ...SavedSearchButton_me @arguments(criteria: $criteria) - } - } - `} - render={({ props: relayProps, error }) => { - if (error) { - if (__DEV__) { - console.error(error) - } else { - captureMessage(error.stack!) - } - } - - return ( - - ) - }} - variables={{ - criteria: attributes, - }} - /> - ) -} diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx index 42a210c6438..e9585218064 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistCollectionsRail-tests.tsx @@ -1,7 +1,6 @@ import { ArtistCollectionsRailTestsQueryRawResponse } from "__generated__/ArtistCollectionsRailTestsQuery.graphql" import { GenericArtistSeriesRail } from "lib/Components/GenericArtistSeriesRail" import { CardRailCard } from "lib/Components/Home/CardRailCard" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -18,11 +17,9 @@ describe("Artist Series Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx index ae7ec6def3d..75f8bc52e1d 100644 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx +++ b/src/lib/Components/Artist/ArtistArtworks/__tests__/ArtistNotableWorksRail-tests.tsx @@ -2,7 +2,6 @@ import { ArtistNotableWorksRailTestsQueryRawResponse } from "__generated__/Artis import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import { ArtistNotableWorksRailFragmentContainer } from "lib/Components/Artist/ArtistArtworks/ArtistNotableWorksRail" import { ArtworkTileRailCard } from "lib/Components/ArtworkTileRail" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -15,11 +14,9 @@ describe("Notable Works Rail", () => { return renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx b/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx deleted file mode 100644 index c8b48398f3d..00000000000 --- a/src/lib/Components/Artist/ArtistArtworks/__tests__/SavedSearchButton-tests.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { SearchCriteriaAttributes } from "__generated__/SavedSearchBannerQuery.graphql" -import { SavedSearchButtonTestsQuery } from "__generated__/SavedSearchButtonTestsQuery.graphql" -import { mockEnvironmentPayload } from 'lib/tests/mockEnvironmentPayload' -import { renderWithWrappers } from 'lib/tests/renderWithWrappers' -import { Button } from 'palette' -import React from "react" -import { graphql, QueryRenderer } from "react-relay" -import { createMockEnvironment } from "relay-test-utils" -import { SavedSearchButtonFragmentContainer as SavedSearchButton } from "../SavedSearchButton" - -jest.unmock("react-relay") - -const mockedAttributes: SearchCriteriaAttributes = { - acquireable: true, -} - -describe("SavedSearchButton", () => { - let mockEnvironment: ReturnType - - beforeEach(() => { - mockEnvironment = createMockEnvironment() - }) - - const TestRenderer = ({ attributes = mockedAttributes }) => { - return ( - - environment={mockEnvironment} - query={graphql` - query SavedSearchButtonTestsQuery($criteria: SearchCriteriaAttributes!) @relay_test_operation { - me { - ...SavedSearchButton_me @arguments(criteria: $criteria) - } - } - `} - render={({ props, error }) => ( - - )} - variables={{ - criteria: attributes, - }} - /> - ) - } - - it("renders loading state if request didn't return data and an error", () => { - const tree = renderWithWrappers() - - expect(tree.root.findByType(Button).props.loading).toBe(true) - }) - - it("renders enabled button if criteria are not saved", () => { - const tree = renderWithWrappers() - - mockEnvironmentPayload(mockEnvironment, { - Me: () => ({ - savedSearch: null, - }), - }) - - expect(tree.root.findByType(Button).props.disabled).toBe(false) - }) - - it("renders disabled button if criteria are saved", () => { - const tree = renderWithWrappers() - - mockEnvironmentPayload(mockEnvironment, { - Me: () => ({ - savedSearch: { - internalID: 'internalID' - }, - }), - }) - - expect(tree.root.findByType(Button).props.disabled).toBe(true) - }) -}) diff --git a/src/lib/Components/Artist/ArtistHeader.tsx b/src/lib/Components/Artist/ArtistHeader.tsx index 3da6552f30d..02aa7fde3af 100644 --- a/src/lib/Components/Artist/ArtistHeader.tsx +++ b/src/lib/Components/Artist/ArtistHeader.tsx @@ -10,8 +10,6 @@ import { useTracking } from "react-tracking" import styled from "styled-components/native" import { Schema } from "../../utils/track" -export const ARTIST_HEADER_HEIGHT = 156 - interface Props { artist: ArtistHeader_artist relay: RelayProp diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx index 036341a2293..9549a7c5e64 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsights.tsx @@ -4,7 +4,6 @@ import { AnimatedArtworkFilterButton, ArtworkFilterNavigator, FilterModalMode } import { ArtworkFiltersStoreProvider } from "lib/Components/ArtworkFilter/ArtworkFilterStore" import { useOnTabFocusedEffect } from "lib/Components/StickyTabPage/StickyTabPage" import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabPageScrollView" -import { SCROLL_UP_TO_SHOW_THRESHOLD } from "lib/utils/hideBackButtonOnScroll" import { Schema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import React, { useCallback, useRef, useState } from "react" @@ -12,7 +11,6 @@ import { FlatList, NativeScrollEvent, NativeSyntheticEvent, View } from "react-n import { createFragmentContainer, graphql, RelayProp } from "react-relay" import { useTracking } from "react-tracking" import { ReactElement } from "simple-markdown" -import { ARTIST_HEADER_HEIGHT } from "../ArtistHeader" import { ArtistInsightsAuctionResultsPaginationContainer } from "./ArtistInsightsAuctionResults" import { MarketStatsQueryRenderer } from "./MarketStats" @@ -44,7 +42,6 @@ export const ArtistInsights: React.FC = (props) => { const [isFilterButtonVisible, setIsFilterButtonVisible] = useState(false) const [isFilterModalVisible, setIsFilterModalVisible] = useState(false) const auctionResultsYCoordinate = useRef(0) - const contentYScrollOffset = useRef(0) const openFilterModal = () => { tracking.trackEvent(tracks.openFilter(artist.internalID, artist.slug)) @@ -57,19 +54,11 @@ export const ArtistInsights: React.FC = (props) => { } const scrollToTop = useCallback(() => { - let auctionResultYOffset = auctionResultsYCoordinate.current - - // if we scroll up less than SCROLL_UP_TO_SHOW_THRESHOLD the header won't expand and we need another offset - if (contentYScrollOffset.current - 2 * auctionResultYOffset <= SCROLL_UP_TO_SHOW_THRESHOLD) { - auctionResultYOffset += ARTIST_HEADER_HEIGHT - } - flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultYOffset }) - }, [auctionResultsYCoordinate, contentYScrollOffset]) + flatListRef.current?.getNode().scrollToOffset({ animated: true, offset: auctionResultsYCoordinate.current }) + }, [auctionResultsYCoordinate]) // Show or hide floating filter button depending on the scroll position const onScrollEndDrag = useCallback((event: NativeSyntheticEvent) => { - contentYScrollOffset.current = event.nativeEvent.contentOffset.y - if (event.nativeEvent.contentOffset.y > FILTER_BUTTON_OFFSET) { setIsFilterButtonVisible(true) return diff --git a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx index 6b1f9641d1e..465782195d6 100644 --- a/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx +++ b/src/lib/Components/Artist/ArtistInsights/ArtistInsightsAuctionResults.tsx @@ -10,15 +10,14 @@ import { PAGE_SIZE } from "lib/data/constants" import { navigate } from "lib/navigation/navigate" import { useFeatureFlag } from "lib/store/GlobalStore" import { extractNodes } from "lib/utils/extractNodes" -import { debounce } from "lodash" -import { Box, bullet, Flex, Separator, Spacer, Text, useColor } from "palette" -import React, { useCallback, useEffect, useMemo, useState } from "react" +import { Box, bullet, color, Flex, Separator, Spacer, Text } from "palette" +import React, { useCallback, useEffect, useState } from "react" import { FlatList, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" import styled from "styled-components/native" import { useScreenDimensions } from "../../../utils/useScreenDimensions" -import { DEBOUNCE_DELAY, KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" +import { KeywordFilter } from "../../ArtworkFilter/Filters/KeywordFilter" import { AuctionResultFragmentContainer } from "../../Lists/AuctionResultListItem" interface Props { @@ -28,7 +27,6 @@ interface Props { } const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollToTop }) => { - const color = useColor() const tracking = useTracking() const showKeywordFilter = useFeatureFlag("AREnableAuctionResultsKeywordFilter") @@ -37,16 +35,8 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const setFilterTypeAction = ArtworksFiltersStore.useStoreActions((state) => state.setFilterTypeAction) const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) const applyFilters = ArtworksFiltersStore.useStoreState((state) => state.applyFilters) - const filterParams = filterArtworksParams(appliedFilters, "auctionResult") - - const keywordFilterValue = appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword)?.paramValue - const isKeywordFilterActive = !!keywordFilterValue - const [keywordFilterRefetching, setKeywordFilterRefetching] = useState(false) - const endKeywordFilterRefetching = useMemo( - () => debounce(() => setKeywordFilterRefetching(false), DEBOUNCE_DELAY), - [] - ) + const filterParams = filterArtworksParams(appliedFilters, "auctionResult") useEffect(() => { setFilterTypeAction("auctionResult") @@ -57,8 +47,6 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo relay.refetchConnection( PAGE_SIZE, (error) => { - endKeywordFilterRefetching() - if (error) { throw new Error("ArtistInsights/ArtistAuctionResults filter error: " + error.message) } @@ -135,11 +123,11 @@ const ArtistInsightsAuctionResults: React.FC = ({ artist, relay, scrollTo const resultsString = Number(artist.auctionResultsConnection?.totalCount) === 1 ? "result" : "results" + const isKeywordFilterActive = !!appliedFilters?.find((filter) => filter.paramName === FilterParamName.keyword) + ?.paramValue + return ( - + = ({ artist, relay, scrollTo {resultsString} {bullet} Sorted by {getSortDescription()?.toLowerCase()} - {!!showKeywordFilter && ( - setKeywordFilterRefetching(true)} - /> - )} + {!!showKeywordFilter && } {auctionResults.length ? ( { const { is_followed, initials, image, href, name, nationality, birthday, deathday } = artist const imageURl = image && image.url + const TouchableComponent = withFeedback ? Touchable : TouchableWithoutFeedback + if (!name) { return null } return ( - - {({ color }) => ( - { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - > - - - - - - - - - - )} - + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + useDefaultTouchable + > + + + + + + + + + ) } } diff --git a/src/lib/Components/ArtsyReactWebView.tsx b/src/lib/Components/ArtsyReactWebView.tsx index 59a402d2920..7458d13b752 100644 --- a/src/lib/Components/ArtsyReactWebView.tsx +++ b/src/lib/Components/ArtsyReactWebView.tsx @@ -1,11 +1,11 @@ import { OwnerType } from "@artsy/cohesion" +import { color } from "@artsy/palette-tokens" import { addBreadcrumb } from "@sentry/react-native" import { dismissModal, goBack, navigate } from "lib/navigation/navigate" import { matchRoute } from "lib/navigation/routes" import { getCurrentEmissionState, GlobalStore, useEnvironment, useFeatureFlag } from "lib/store/GlobalStore" import { Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { useColor } from "palette/hooks" import { parse as parseQueryString } from "query-string" import React, { useEffect, useRef, useState } from "react" import { Platform, View } from "react-native" @@ -176,12 +176,9 @@ export const ArtsyReactWebView = React.forwardRef< }) const ProgressBar: React.FC<{ loadProgress: number | null }> = ({ loadProgress }) => { - const color = useColor() - if (loadProgress === null) { return null } - const progressPercent = Math.max(loadProgress * 100, 2) return ( > = ({ navigation, route }) => { - const space = useSpace() const tracking = useTracking() const { closeModal, id, mode, slug, title = "Sort & Filter" } = route.params @@ -295,7 +293,7 @@ export const getFilterScreenSortByMode = (mode: FilterModalMode) => ( } export const FilterArtworkButton = styled(Flex)` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; align-items: center; justify-content: center; flex-direction: row; @@ -372,11 +370,11 @@ export const AnimatedArtworkFilterButton: React.FC {} export const ColorsOptionsScreen: React.FC = ({ navigation }) => { - const space = useSpace() const { layout, handleLayout } = useLayout() const { aggregation } = useArtworkFiltersAggregation({ diff --git a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx index 9360c8158e5..8c6110b4258 100644 --- a/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/FilterToggleButton.tsx @@ -1,4 +1,4 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { Switch, View } from "react-native" @@ -10,7 +10,6 @@ interface FilterToggleButtonProps { export const FilterToggleButton: React.FC = (props) => { const { onChange, value, disabled } = props - const color = useColor() return ( diff --git a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx index a0c1538d7f4..23eab0b5eba 100644 --- a/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/KeywordFilter.tsx @@ -4,28 +4,18 @@ import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilter import { Input } from "lib/Components/Input/Input" import SearchIcon from "lib/Icons/SearchIcon" import { OwnerEntityTypes, PageNames } from "lib/utils/track/schema" -import { debounce, throttle } from "lodash" +import { debounce } from "lodash" import React, { useEffect, useMemo, useRef } from "react" -import { Platform } from "react-native" import { useTracking } from "react-tracking" -export const DEBOUNCE_DELAY = 400 +const DEBOUNCE_DELAY = 600 interface KeywordFilterProps { artistId: string artistSlug: string - onFocus?: () => void - loading?: boolean - onTypingStart?: () => void } -export const KeywordFilter: React.FC = ({ - artistId, - artistSlug, - loading, - onFocus, - onTypingStart, -}) => { +export const KeywordFilter: React.FC = ({ artistId, artistSlug }) => { const { trackEvent } = useTracking() const appliedFiltersState = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) @@ -48,7 +38,6 @@ export const KeywordFilter: React.FC = ({ } const handleChangeText = useMemo(() => debounce(updateKeywordFilter, DEBOUNCE_DELAY), [appliedFiltersParams]) - const handleTypingStart = useMemo(() => throttle(() => onTypingStart?.(), DEBOUNCE_DELAY), [onTypingStart]) // clear input text when keyword filter is reseted useEffect(() => { @@ -67,25 +56,14 @@ export const KeywordFilter: React.FC = ({ return () => handleChangeText.cancel() }, []) - // Truncate placeholder for Android to prevent new line. - const placeholder = - Platform.OS === "android" && loading - ? "Search by artwork title, series..." - : "Search by artwork title, series, or description" - return ( } - placeholder={placeholder} - onChangeText={(e) => { - handleTypingStart() - handleChangeText(e) - }} + placeholder="Search by artwork title, series, or description" + onChangeText={handleChangeText} autoCorrect={false} enableClearButton={true} ref={inputRef} - onFocus={onFocus} /> ) } diff --git a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx index 1a91e043304..bbab2b84bd4 100644 --- a/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/PriceRangeOptions.tsx @@ -122,7 +122,6 @@ export const PriceRangeOptionsScreen: React.FC = ( ListHeaderComponent?: JSX.Element withExtraPadding?: boolean - useScrollView?: boolean } const isFilterData = (item: any): item is FilterData => { @@ -31,46 +30,39 @@ export const SingleSelectOptionScreen: React.FC = navigation, ListHeaderComponent, withExtraPadding = false, - useScrollView = false, }) => { const handleBackNavigation = () => { navigation.goBack() } - const keyExtractor = (_item: FilterData | JSX.Element, index: number) => String(index) - const renderItem = (item: FilterData | JSX.Element) => { - if (isFilterData(item)) { - return ( - - ) - } - - // Otherwise just return JSX.Element - return item - } return ( {filterHeaderText} - {useScrollView ? ( - - {ListHeaderComponent} - {filterOptions.map((item, index) => { - return {renderItem(item)} - })} - - ) : ( - renderItem(item)} - /> - )} + String(index)} + data={filterOptions} + ItemSeparatorComponent={null} + renderItem={({ item }) => { + if (isFilterData(item)) { + return ( + + ) + } + + // Otherwise just return JSX.Element + return item + }} + /> ) diff --git a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx index efdee1b38ec..0cdd8f8e3d6 100644 --- a/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/SizeOptions.tsx @@ -33,14 +33,14 @@ export const SIZE_OPTIONS: FilterData[] = IS_USA ? [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 16in)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (under 16in – 40in)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 40in)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] : [ { displayText: "All", paramValue: "*-*", paramName: PARAM_NAME }, { displayText: `Small (under 40cm)`, paramValue: "*-16.0", paramName: PARAM_NAME }, - { displayText: `Medium (40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, + { displayText: `Medium (under 40cm – 100cm)`, paramValue: "16.0-40.0", paramName: PARAM_NAME }, { displayText: `Large (over 100cm)`, paramValue: "40.0-*", paramName: PARAM_NAME }, CUSTOM_SIZE_OPTION, ] @@ -195,7 +195,6 @@ export const SizeOptionsScreen: React.FC = ({ navigation filterHeaderText={FilterDisplayName.size} selectedOption={selectedOption} navigation={navigation} - useScrollView={true} filterOptions={[ ...SIZE_OPTIONS, ...(shouldShowCustomSize diff --git a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx index 4a4988f2390..5681d8924ae 100644 --- a/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/YearOptions.tsx @@ -7,7 +7,7 @@ import { CircleWithBorder } from "lib/Components/CircleWithBorder/CircleWithBord import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { TouchableRow } from "lib/Components/TouchableRow" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CheckIcon, Flex, Separator, Text, useColor } from "palette" +import { Box, CheckIcon, color, Flex, Separator, Text } from "palette" import React, { useState } from "react" import Haptic from "react-native-haptic-feedback" import styled from "styled-components/native" @@ -21,7 +21,6 @@ export const ALLOW_EMPTY_CREATED_DATES_FILTER: FilterData = { } export const YearOptionsScreen: React.FC = ({ navigation }) => { - const color = useColor() const screenWidth = useScreenDimensions().width const appliedFilters = ArtworksFiltersStore.useStoreState((state) => state.appliedFilters) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx index b5e644e97ec..e979768e3b7 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/ColorsSwatch-tests.tsx @@ -1,18 +1,30 @@ import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Box, CheckIcon } from "palette" +import { Box, CheckIcon, color } from "palette" import React from "react" import { ColorsSwatch } from "../ColorsSwatch" describe("Colors swatch", () => { it("adds a check icon when selected", () => { const selectedTree = renderWithWrappers( - + ) const selectedCheckIcon = selectedTree.root.findByType(CheckIcon) expect(selectedCheckIcon.props.fill).toMatch("#fff") const unselectedTree = renderWithWrappers( - + ) const unselectedCheckIcon = unselectedTree.root.findAllByType(CheckIcon) expect(unselectedCheckIcon.length).toEqual(0) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx index aae5dcd8906..8dc87c4185b 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/GalleriesAndInstitutionsOptions-tests.tsx @@ -85,7 +85,7 @@ describe("Galleries and Institutions Options Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Galleries and Institutions")) + const item = items.find((i) => extractText(i).startsWith("Galleries and institutions")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx index 3047481e4cf..c5fb42bbf5b 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/LocationCitiesOptions-tests.tsx @@ -81,7 +81,7 @@ describe(LocationCitiesOptionsScreen, () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Artwork Location")) + const item = items.find((i) => extractText(i).startsWith("Artwork location")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx index aa9a370cd19..d982a38b189 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/SizeOptions-tests.tsx @@ -68,7 +68,7 @@ describe("SizeOptionsNew", () => { expect(text).toContain("All") expect(text).toContain("Small (under 16in)") - expect(text).toContain("Medium (16in – 40in)") + expect(text).toContain("Medium (under 16in – 40in)") expect(text).toContain("Large (over 40in)") expect(text).toContain("Custom size") }) diff --git a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx index 04521963479..b13c90a7326 100644 --- a/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx +++ b/src/lib/Components/ArtworkFilter/Filters/__tests__/TimePeriodOptions-tests.tsx @@ -60,7 +60,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time Period")) + const item = items.find((i) => extractText(i).startsWith("Time period")) expect(item).not.toBeUndefined() @@ -95,7 +95,7 @@ describe("TimePeriodOptions Screen", () => { const tree = renderWithWrappers() const items = tree.root.findAllByType(FilterModalOptionListItem) - const item = items.find((i) => extractText(i).startsWith("Time Period")) + const item = items.find((i) => extractText(i).startsWith("Time period")) expect(item).not.toBeUndefined() if (item) { diff --git a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts index 90435e746be..8bca24401ba 100644 --- a/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts +++ b/src/lib/Components/ArtworkFilter/SavedSearch/__tests__/convertersToFilterParams-tests.ts @@ -76,7 +76,7 @@ describe("convertSizeToFilterParams", () => { it("returns the medium size filter value", () => { expect(convertSizeToFilterParams({ dimensionRange: "16.0-40.0" })).toEqual([ { - displayText: "Medium (16in – 40in)", + displayText: "Medium (under 16in – 40in)", paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }, @@ -524,7 +524,17 @@ describe("convertSavedSearchCriteriaToFilterParams", () => { paramName: FilterParamName.priceRange, }) expect(result).toContainEqual({ - displayText: `Medium (16in – 40in)`, + displayText: `Medium (under 16in – 40in)`, + paramValue: "16.0-40.0", + paramName: FilterParamName.dimensionRange, + }) + expect(result).toContainEqual({ + displayText: `Medium (under 16in – 40in)`, + paramValue: "16.0-40.0", + paramName: FilterParamName.dimensionRange, + }) + expect(result).toContainEqual({ + displayText: `Medium (under 16in – 40in)`, paramValue: "16.0-40.0", paramName: FilterParamName.dimensionRange, }) diff --git a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx index 83a0bad4815..926f7b14041 100644 --- a/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx +++ b/src/lib/Components/ArtworkFilter/__tests__/FilterModal-tests.tsx @@ -417,13 +417,11 @@ describe("Applying filters on Artworks", () => { render={({ props, error }) => { if (props?.marketingCollection) { return ( - - - - - - - + + + + + ) } else if (error) { console.log(error) diff --git a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx index 32ceb385b82..87575204f2a 100644 --- a/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx +++ b/src/lib/Components/ArtworkGrids/FilteredArtworkGridZeroState.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { ArtworksFiltersStore } from "lib/Components/ArtworkFilter/ArtworkFilterStore" -import { Button, Flex, Sans } from "palette" +import { Button, color, Flex, Sans } from "palette" import React from "react" import styled from "styled-components/native" @@ -39,6 +38,6 @@ export const FilteredArtworkGridZeroState: React.FC = (props) => } const ZeroStateMessage = styled(Sans)` - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; text-align: center; ` diff --git a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx index 3c5b411999c..2d2f87fc38f 100644 --- a/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx +++ b/src/lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid.tsx @@ -19,7 +19,7 @@ import { PAGE_SIZE } from "lib/data/constants" import { ScreenOwnerType } from "@artsy/cohesion" import { InfiniteScrollArtworksGrid_connection } from "__generated__/InfiniteScrollArtworksGrid_connection.graphql" import { extractNodes } from "lib/utils/extractNodes" -import { Box, Button, Flex, getColorsForVariant, Theme } from "palette" +import { Box, Button, Flex, getColorsForVariant, space, Theme } from "palette" import { graphql } from "relay-runtime" import ParentAwareScrollView from "../ParentAwareScrollView" @@ -153,7 +153,7 @@ class InfiniteScrollArtworksGrid extends React.Component void) | null | undefined @@ -47,7 +43,6 @@ export const ArtworkTileRailCard: React.FC = ({ useSquareAspectRatio = false, lotLabel, }) => { - const color = useColor() if (!!imageURL && !imageAspectRatio && !useSquareAspectRatio) { throw new Error("imageAspectRatio is required for non-square images") } diff --git a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx index 72d9d174a3e..7ddfc05a4a1 100644 --- a/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx +++ b/src/lib/Components/ArtworkTileRail/__tests__/ArtworkTileRailCard-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { ArtworkTileRailCard, ArtworkTileRailCardProps } from "../ArtworkTileRailCard" @@ -22,11 +21,9 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - - - + + + ) const image = result.find("AROpaqueImageView") @@ -39,11 +36,9 @@ describe("ArtworkTileRailCard", () => { const props = defaultProps const result = mount( - - - - - + + + ) const sans = result.find("Sans") @@ -57,11 +52,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) const sans = result.find("Sans") @@ -75,11 +68,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) expect(result.find("AROpaqueImageView").length).toBe(0) @@ -92,11 +83,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -107,11 +96,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -122,11 +109,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -137,11 +122,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -152,11 +135,9 @@ describe("ArtworkTileRailCard", () => { } mount( - - - - - + + + ) }) @@ -169,11 +150,9 @@ describe("ArtworkTileRailCard", () => { expect(() => mount( - - - - - + + + ) ).toThrowError(error) }) @@ -185,11 +164,9 @@ describe("ArtworkTileRailCard", () => { } const result = mount( - - - - - + + + ) const image = result.find("AROpaqueImageView") diff --git a/src/lib/Components/Buttons/DarkNavigationButton.tsx b/src/lib/Components/Buttons/DarkNavigationButton.tsx index f442079cf0a..7c8bfaa1aec 100644 --- a/src/lib/Components/Buttons/DarkNavigationButton.tsx +++ b/src/lib/Components/Buttons/DarkNavigationButton.tsx @@ -1,5 +1,5 @@ import { navigate } from "lib/navigation/navigate" -import { Box, ClassTheme, Flex, Serif } from "palette" +import { Box, color, Flex, Serif } from "palette" import React from "react" import { Image, TouchableWithoutFeedback } from "react-native" @@ -13,20 +13,16 @@ export default class DarkNavigationButton extends React.Component { render() { const showNavArrow = this.props.href || this.props.onPress return ( - - {({ color }) => ( - - - - - {this.props.title} - - {!!showNavArrow && } - - - - )} - + + + + + {this.props.title} + + {!!showNavArrow && } + + + ) } diff --git a/src/lib/Components/ConnectivityBanner.tsx b/src/lib/Components/ConnectivityBanner.tsx index 0ced957d02b..7e5ccc03708 100644 --- a/src/lib/Components/ConnectivityBanner.tsx +++ b/src/lib/Components/ConnectivityBanner.tsx @@ -4,7 +4,6 @@ import styled from "styled-components/native" import colors from "lib/data/colors" import fonts from "lib/data/fonts" -// @ts-ignore const Container = styled.View` height: 30; background-color: ${colors["yellow-regular"]}; diff --git a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx index 77625ecc004..e633f3ebfbf 100644 --- a/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx +++ b/src/lib/Components/Countdown/__tests__/CountdownTimer-tests.tsx @@ -1,7 +1,7 @@ // Mock moment to always give back a formatted time string -jest.mock("moment-timezone", () => { +jest.mock("moment", () => { const momentMock: any = jest.fn(() => ({ format: (format: string) => (format.length > 3 ? "Mon" : "7pm") })) - momentMock.duration = jest.requireActual("moment-timezone").duration + momentMock.duration = jest.requireActual("moment").duration return momentMock }) diff --git a/src/lib/Components/FancyModal/FancyModalHeader.tsx b/src/lib/Components/FancyModal/FancyModalHeader.tsx index 1a5fcbea047..79679adc80f 100644 --- a/src/lib/Components/FancyModal/FancyModalHeader.tsx +++ b/src/lib/Components/FancyModal/FancyModalHeader.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, Text, useTheme } from "palette" +import { ArrowLeftIcon, ArrowRightIcon, CloseIcon, Flex, Separator, ShareIcon, space, Text } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -26,7 +25,6 @@ export const FancyModalHeader: React.FC = ({ useXButton, useShareButton, }) => { - const { space } = useTheme() const leftButton = () => { if (!useXButton) { return @@ -90,13 +88,13 @@ export const Container = styled(Flex)` flex-direction: row; justify-content: space-between; align-items: center; - height: ${themeGet("space.6")}px; + height: ${space(6)}; ` export const LeftButtonContainer = styled(TouchableOpacity)` - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ` export const RightButtonContainer = styled(TouchableOpacity)` - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ` diff --git a/src/lib/Components/Gene/GeneArtworks.tsx b/src/lib/Components/Gene/GeneArtworks.tsx index 2df36952572..638530022ee 100644 --- a/src/lib/Components/Gene/GeneArtworks.tsx +++ b/src/lib/Components/Gene/GeneArtworks.tsx @@ -16,7 +16,7 @@ import { Schema } from "lib/utils/track" import { Box, Message } from "palette" import React, { useContext, useState } from "react" import { useEffect } from "react" -import { useRef } from "react" +import { useRef } from 'react' import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" diff --git a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx index 8835f97c9b8..d2abbe752cd 100644 --- a/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx +++ b/src/lib/Components/Gene/__tests__/GeneArtworks-tests.tsx @@ -1,17 +1,17 @@ import { GeneArtworksTestsQuery } from "__generated__/GeneArtworksTestsQuery.graphql" -import { ApplyButton } from "lib/Components/ArtworkFilter" +import { ApplyButton } from 'lib/Components/ArtworkFilter' import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { ArtworksFilterHeader } from "lib/Components/ArtworkGrids/FilterHeader" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { StickyTabPage } from "lib/Components/StickyTabPage/StickyTabPage" -import { TouchableRow } from "lib/Components/TouchableRow" -import { extractText } from "lib/tests/extractText" +import { TouchableRow } from 'lib/Components/TouchableRow' +import { extractText } from 'lib/tests/extractText' import { mockEnvironmentPayload } from "lib/tests/mockEnvironmentPayload" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Message, TouchableHighlightColor } from "palette" +import { Message, TouchableHighlightColor } from 'palette' import React from "react" import { graphql, QueryRenderer } from "react-relay" -import { act } from "react-test-renderer" +import { act } from 'react-test-renderer' import { useTracking } from "react-tracking" import { createMockEnvironment } from "relay-test-utils" import { GeneArtworksPaginationContainer } from "../GeneArtworks" @@ -142,7 +142,7 @@ describe("GeneArtworks", () => { artworks: { counts: { total: 0, - }, + } }, } }, diff --git a/src/lib/Components/GenericArtistSeriesRail.tsx b/src/lib/Components/GenericArtistSeriesRail.tsx index 9293db54723..6ed3e862b74 100644 --- a/src/lib/Components/GenericArtistSeriesRail.tsx +++ b/src/lib/Components/GenericArtistSeriesRail.tsx @@ -12,7 +12,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { Schema } from "lib/utils/track" -import { Sans, Spacer, useColor } from "palette" +import { color, Sans, Spacer } from "palette" import React from "react" import { View } from "react-native" import { useTracking } from "react-tracking" @@ -31,7 +31,6 @@ type GenericArtistSeriesItem = | ArtistCollectionsRail_collections[0] export const GenericArtistSeriesRail: React.FC = (props) => { - const color = useColor() const { collections, contextScreenOwnerType, contextScreenOwnerId, contextScreenOwnerSlug } = props const tracking = useTracking() diff --git a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx index afc008ec201..8c3d252f2da 100644 --- a/src/lib/Components/Home/ArtistRails/ArtistCard.tsx +++ b/src/lib/Components/Home/ArtistRails/ArtistCard.tsx @@ -7,7 +7,7 @@ import ImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" import { compact, floor } from "lodash" -import { Button, ClassTheme, CloseIcon, Flex, Join, Sans, Touchable } from "palette" +import { Button, CloseIcon, color, Flex, Join, Sans, Touchable } from "palette" import styled from "styled-components/native" import { CARD_WIDTH, CardRailCard } from "../CardRailCard" @@ -132,33 +132,29 @@ export class ArtistCard extends React.Component { ) : null} {!!this.props.onDismiss && ( - - {({ color }) => ( - - {this.state.isDismissing ? ( - - ) : ( - - )} - + + {this.state.isDismissing ? ( + + ) : ( + )} - + )} ) diff --git a/src/lib/Components/HoursCollapsible.tsx b/src/lib/Components/HoursCollapsible.tsx index b79f84a83f8..cbc74687d99 100644 --- a/src/lib/Components/HoursCollapsible.tsx +++ b/src/lib/Components/HoursCollapsible.tsx @@ -2,7 +2,7 @@ import { HoursCollapsible_location } from "__generated__/HoursCollapsible_locati import { Markdown } from "lib/Components/Markdown" import ChevronIcon from "lib/Icons/ChevronIcon" import { defaultRules } from "lib/utils/renderMarkdown" -import { Box, ClassTheme, Collapse as _Collapse, Flex, Sans, Spacer } from "palette" +import { Box, Collapse as _Collapse, color, Flex, Sans, Spacer } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -81,25 +81,21 @@ export class HoursCollapsible extends React.Component { render() { const { isExpanded } = this.state return ( - - {({ color }) => ( - - - - - Opening hours - - - - - - - - {this.renderHours()} - - - )} - + + + + + Opening hours + + + + + + + + {this.renderHours()} + + ) } } diff --git a/src/lib/Components/Input/Input.tsx b/src/lib/Components/Input/Input.tsx index f1f260ca30c..7d5a2199472 100644 --- a/src/lib/Components/Input/Input.tsx +++ b/src/lib/Components/Input/Input.tsx @@ -1,5 +1,5 @@ import _ from "lodash" -import { Color, EyeOpenedIcon, Flex, Sans, Spinner, TEXT_FONTS, useTheme, XCircleIcon } from "palette" +import { color, Color, EyeOpenedIcon, Flex, Sans, TEXT_FONTS, XCircleIcon } from "palette" import { fontFamily } from "palette/platform/fonts/fontFamily" import React, { useEffect, useImperativeHandle, useRef, useState } from "react" import { @@ -24,7 +24,6 @@ export interface InputProps extends Omit { description?: string error?: string icon?: JSX.Element - loading?: boolean disabled?: boolean required?: boolean title?: string @@ -69,7 +68,6 @@ export const Input = React.forwardRef( disabled, error, icon, - loading, required, enableClearButton, title, @@ -83,7 +81,6 @@ export const Input = React.forwardRef( }, ref ) => { - const { color } = useTheme() const [focused, setFocused] = useState(false) const [showPassword, setShowPassword] = useState(!secureTextEntry) const [value, setValue] = useState(rest.value ?? rest.defaultValue ?? "") @@ -254,26 +251,17 @@ export const Input = React.forwardRef( /> {renderShowPasswordIcon()} - {loading ? ( - - + {!!(value !== undefined && value !== "" && enableClearButton) && ( + + { + localClear() + }} + hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} + > + + - ) : ( - !!(value !== undefined && value !== "" && enableClearButton) && ( - - { - localClear() - }} - hitSlop={{ bottom: 40, right: 40, left: 0, top: 40 }} - > - - - - ) )} diff --git a/src/lib/Components/Input/InputTitle.tsx b/src/lib/Components/Input/InputTitle.tsx index 1960f53f3e2..ac518786a43 100644 --- a/src/lib/Components/Input/InputTitle.tsx +++ b/src/lib/Components/Input/InputTitle.tsx @@ -1,8 +1,7 @@ -import { Text, useColor } from "palette" +import { color, Text } from "palette" import React from "react" export const InputTitle: React.FC<{ required?: boolean }> = ({ children: title, required }) => { - const color = useColor() if (!title) { return null } diff --git a/src/lib/Components/Lists/AuctionResultListItem.tsx b/src/lib/Components/Lists/AuctionResultListItem.tsx index 0acf78d737c..5f773ed804d 100644 --- a/src/lib/Components/Lists/AuctionResultListItem.tsx +++ b/src/lib/Components/Lists/AuctionResultListItem.tsx @@ -4,7 +4,7 @@ import { auctionResultHasPrice, auctionResultText } from "lib/Scenes/AuctionResu import { QAInfoManualPanel, QAInfoRow } from "lib/utils/QAInfo" import { capitalize } from "lodash" import moment from "moment" -import { bullet, Flex, NoArtworkIcon, Text, Touchable, useColor } from "palette" +import { bullet, color, Flex, NoArtworkIcon, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { AuctionResultsMidEstimate } from "../AuctionResult/AuctionResultMidEstimate" @@ -16,7 +16,6 @@ interface Props { } const AuctionResultListItem: React.FC = ({ auctionResult, onPress, showArtistName }) => { - const color = useColor() const QAInfo: React.FC = () => ( diff --git a/src/lib/Components/Lists/SavedItemRow.tsx b/src/lib/Components/Lists/SavedItemRow.tsx index 1d624a7c91e..a75b0a8b356 100644 --- a/src/lib/Components/Lists/SavedItemRow.tsx +++ b/src/lib/Components/Lists/SavedItemRow.tsx @@ -1,7 +1,7 @@ import React from "react" import { navigate } from "lib/navigation/navigate" -import { Flex, Sans, Spacer, Touchable, useColor } from "palette" +import { color, Flex, Sans, Spacer, Touchable } from "palette" import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" interface SavedItemRowProps { @@ -15,7 +15,6 @@ interface SavedItemRowProps { } export const SavedItemRow: React.FC = ({ href, name, image, square_image, size = 60 }) => { - const color = useColor() const imageURL = image?.url return ( diff --git a/src/lib/Components/Lists/ShowItemRow.tsx b/src/lib/Components/Lists/ShowItemRow.tsx index 62e9fcdfa13..0b033583250 100644 --- a/src/lib/Components/Lists/ShowItemRow.tsx +++ b/src/lib/Components/Lists/ShowItemRow.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { ShowItemRow_show } from "__generated__/ShowItemRow_show.graphql" import { ShowItemRowMutation } from "__generated__/ShowItemRowMutation.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" @@ -9,7 +8,7 @@ import { exhibitionDates } from "lib/Scenes/Map/exhibitionPeriodParser" import { hrefForPartialShow } from "lib/utils/router" import { Schema, Track, track as _track } from "lib/utils/track" import { debounce } from "lodash" -import { Box, Button, ClassTheme, Flex, Sans, Touchable } from "palette" +import { Box, Button, color, Flex, Sans, space, Touchable } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -125,55 +124,51 @@ export class ShowItemRow extends React.Component { const imageURL = mainCoverImageURL || galleryProfileIcon return ( - - {({ color }) => ( - - {!imageURL ? ( - - - - ) : ( - - - - )} - - {!!(show.partner && show.partner.name) && ( - - {show.partner.name} - - )} - {!!show.name && ( - - {show.name} - - )} - {!!(show.exhibition_period && show.status) && ( - - {show.status.includes("closed") - ? show.status.charAt(0).toUpperCase() + show.status.slice(1) - : exhibitionDates( - show.exhibition_period, - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - show.end_at - )} - - )} - - {!shouldHideSaveButton && ( - - )} - + + {!imageURL ? ( + + + + ) : ( + + + )} - + + {!!(show.partner && show.partner.name) && ( + + {show.partner.name} + + )} + {!!show.name && ( + + {show.name} + + )} + {!!(show.exhibition_period && show.status) && ( + + {show.status.includes("closed") + ? show.status.charAt(0).toUpperCase() + show.status.slice(1) + : exhibitionDates( + show.exhibition_period, + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + show.end_at + )} + + )} + + {!shouldHideSaveButton && ( + + )} + ) } @@ -181,17 +176,13 @@ export class ShowItemRow extends React.Component { const { show, isListItem } = this.props return isListItem ? ( - - {({ color }) => ( - this.handleTap(show.slug, show.internalID)} - style={{ paddingHorizontal: 20, paddingVertical: 5 }} - > - {this.renderItemDetails()} - - )} - + this.handleTap(show.slug, show.internalID)} + style={{ paddingHorizontal: 20, paddingVertical: 5 }} + > + {this.renderItemDetails()} + ) : ( this.handleTap(show.slug, show.internalID)}> {this.renderItemDetails()} @@ -237,6 +228,6 @@ export const ShowItemRowContainer = createFragmentContainer(ShowItemRow, { const DefaultImageContainer = styled(Box)` align-items: center; background-color: ${colors["gray-regular"]}; - height: ${themeGet("space.6")}px; - width: ${themeGet("space.6")}px; + height: ${space(6)}; + width: ${space(6)}; ` diff --git a/src/lib/Components/LoadFailureView.tsx b/src/lib/Components/LoadFailureView.tsx index aca22a30f64..aa37ac2d6c1 100644 --- a/src/lib/Components/LoadFailureView.tsx +++ b/src/lib/Components/LoadFailureView.tsx @@ -1,6 +1,6 @@ import { screen } from "lib/utils/track/helpers" import { debounce } from "lodash" -import { Flex, Text, Touchable, useColor } from "palette" +import { color, Flex, Text, Touchable } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, Easing } from "react-native" import { useTracking } from "react-tracking" @@ -12,7 +12,6 @@ interface LoadFailureViewProps { } export const LoadFailureView: React.FC = (props) => { - const color = useColor() const spinAnimation = useRef(new Animated.Value(0)).current const [isAnimating, setIsAnimating] = useState(false) diff --git a/src/lib/Components/LocationMap/index.tsx b/src/lib/Components/LocationMap/index.tsx index ac5a0932b70..1f50ea3ae9d 100644 --- a/src/lib/Components/LocationMap/index.tsx +++ b/src/lib/Components/LocationMap/index.tsx @@ -1,11 +1,10 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import Clipboard from "@react-native-community/clipboard" import MapboxGL from "@react-native-mapbox-gl/maps" -import { themeGet } from "@styled-system/theme-get" import { LocationMap_location } from "__generated__/LocationMap_location.graphql" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, Flex, Text } from "palette" +import { Box, color, Flex, Text } from "palette" import React from "react" import { Linking, TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -16,7 +15,7 @@ MapboxGL.setAccessToken(Config.MAPBOX_API_CLIENT_KEY) const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` interface Props { diff --git a/src/lib/Components/MenuItem.tsx b/src/lib/Components/MenuItem.tsx index b470771ce30..35ef3a23378 100644 --- a/src/lib/Components/MenuItem.tsx +++ b/src/lib/Components/MenuItem.tsx @@ -1,4 +1,4 @@ -import { ChevronIcon, Flex, Sans, SansProps, Touchable, useColor } from "palette" +import { ChevronIcon, color, Flex, Sans, SansProps, Touchable } from "palette" import React from "react" import { StyleProp, ViewStyle } from "react-native" @@ -23,7 +23,6 @@ export const MenuItem: React.FC<{ ellipsizeMode, style, }) => { - const color = useColor() return ( >(({ value, onChange, onChangeText, maxModalHeight, ...rest }, outerRef) => { - const color = useColor() const innerRef = useRef() const initialValues = cleanUserPhoneNumber(value ?? "") diff --git a/src/lib/Components/Photos/AddEditPhotos.tsx b/src/lib/Components/Photos/AddEditPhotos.tsx index 9728bd4845e..12cd1bb2752 100644 --- a/src/lib/Components/Photos/AddEditPhotos.tsx +++ b/src/lib/Components/Photos/AddEditPhotos.tsx @@ -7,7 +7,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, Button, Flex, Spacer, useColor, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, Button, color, Flex, Spacer, XCircleIcon } from "palette" import React, { useState } from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { Image as RNCImage } from "react-native-image-crop-picker" @@ -87,7 +87,6 @@ const AddPhotosButton: React.FC<{ imageSize: number; addPhotos: (addedImages: RN imageSize, addPhotos, }) => { - const color = useColor() const { showActionSheetWithOptions } = useActionSheet() return ( diff --git a/src/lib/Components/PopoverMessage/PopoverMessage.tsx b/src/lib/Components/PopoverMessage/PopoverMessage.tsx index 031f8f64430..072f55bf1ad 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessage.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessage.tsx @@ -1,31 +1,20 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, CloseIcon, Color, Flex, Text, Touchable, useColor } from "palette" -import React from "react" -import { Animated } from "react-native" +import { Box, CloseIcon, Color, color, Flex, Text, Touchable } from "palette" +import React, { useEffect, useRef, useState } from "react" +import { Animated, Platform } from "react-native" +import useTimeoutFn from "react-use/lib/useTimeoutFn" import { usePopoverMessage } from "./popoverMessageHooks" export const AnimatedFlex = Animated.createAnimatedComponent(Flex) +const EDGE_POPOVER_MESSAGE_HEIGHT = Platform.OS === "ios" ? 80 : 90 const EDGE_POPOVER_MESSAGE_PADDING = 10 +const FRICTION = 20 const NAVBAR_HEIGHT = 44 export type PopoverMessagePlacement = "top" | "bottom" export type PopoverMessageType = "info" | "success" | "error" | "default" -export type PopoverMessageItem = Omit - -export interface PopoverMessageProps { - placement?: PopoverMessagePlacement - title: string - translateYAnimation: Animated.Value - opacityAnimation: Animated.Value - message?: string - autoHide?: boolean - hideTimeout?: number - showCloseIcon?: boolean - type?: PopoverMessageType - onPress?: () => void - onClose?: () => void -} +export type PopoverMessageOptions = Omit export const getTitleColorByType = (type?: PopoverMessageType): Color => { if (type === "success") { @@ -39,38 +28,95 @@ export const getTitleColorByType = (type?: PopoverMessageType): Color => { return "black100" } +export interface PopoverMessageProps { + id: string + positionIndex: number + placement: PopoverMessagePlacement + title: string + message?: string + autoHide?: boolean + hideTimeout?: number + showCloseIcon?: boolean + type?: PopoverMessageType + onPress?: () => void + onClose?: () => void +} + // TODO: Remove NAVBAR_HEIGHT when a new design without a floating back button is added export const PopoverMessage: React.FC = (props) => { - const color = useColor() const { - placement = "top", + id, + positionIndex, + placement, title, message, + autoHide = true, + hideTimeout = 3500, showCloseIcon = true, type, - translateYAnimation, - opacityAnimation, onPress, onClose, } = props const { safeAreaInsets } = useScreenDimensions() const { hide } = usePopoverMessage() + const [opacityAnim] = useState(new Animated.Value(0)) + const [translateYAnim] = useState(new Animated.Value(0)) + const isClosed = useRef(false) const titleColor = getTitleColorByType(type) + useEffect(() => { + Animated.parallel([ + Animated.spring(translateYAnim, { + toValue: 1, + useNativeDriver: true, + friction: FRICTION, + }), + Animated.timing(opacityAnim, { + toValue: 1, + useNativeDriver: true, + duration: 450, + }), + ]).start() + }, []) + + const hideAnimation = () => { + isClosed.current = true + Animated.parallel([ + Animated.spring(translateYAnim, { + toValue: 0, + useNativeDriver: true, + friction: FRICTION, + }), + Animated.timing(opacityAnim, { + toValue: 0, + useNativeDriver: true, + duration: 250, + }), + ]).start(() => hide(id)) + } + const handlePopoverMessagePress = () => { - hide() + hideAnimation() onPress?.() } const handlePopoverMessageClosePress = () => { - hide() + hideAnimation() onClose?.() } - const range = [-150, 0] + useTimeoutFn(() => { + if (autoHide && !isClosed.current) { + hideAnimation() + } + }, hideTimeout) + + const range = [-EDGE_POPOVER_MESSAGE_HEIGHT, 0] const outputRange = placement === "top" ? range : range.map((item) => item * -1) - const translateY = translateYAnimation.interpolate({ inputRange: [0, 1], outputRange }) - const opacity = opacityAnimation.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) + const translateY = translateYAnim.interpolate({ inputRange: [0, 1], outputRange }) + const opacity = opacityAnim.interpolate({ inputRange: [0, 1], outputRange: [0, 1] }) + const offset = + EDGE_POPOVER_MESSAGE_PADDING + positionIndex * (EDGE_POPOVER_MESSAGE_HEIGHT + EDGE_POPOVER_MESSAGE_PADDING) const content = ( @@ -80,7 +126,7 @@ export const PopoverMessage: React.FC = (props) => { {title} {!!message && ( - + {message} )} @@ -101,8 +147,9 @@ export const PopoverMessage: React.FC = (props) => { position="absolute" left="1" right="1" - bottom={placement === "bottom" ? safeAreaInsets.bottom + EDGE_POPOVER_MESSAGE_PADDING : undefined} - top={placement === "top" ? safeAreaInsets.top + EDGE_POPOVER_MESSAGE_PADDING + NAVBAR_HEIGHT : undefined} + height={EDGE_POPOVER_MESSAGE_HEIGHT} + bottom={placement === "bottom" ? safeAreaInsets.bottom + offset : undefined} + top={placement === "top" ? safeAreaInsets.top + offset + NAVBAR_HEIGHT : undefined} style={{ opacity, transform: [{ translateY }], diff --git a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx index a99a9073342..14dd8a6f7d9 100644 --- a/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx +++ b/src/lib/Components/PopoverMessage/PopoverMessageProvider.tsx @@ -1,113 +1,55 @@ -import React, { useCallback, useState } from "react" -import { useEffect } from "react" -import { useRef } from "react" -import { Animated } from "react-native" -import { PopoverMessage, PopoverMessageItem } from "./PopoverMessage" +import React, { useCallback, useMemo, useState } from "react" +import { PopoverMessage, PopoverMessageOptions, PopoverMessagePlacement, PopoverMessageProps } from "./PopoverMessage" interface PopoverMessageContextContextValue { - show: (options: PopoverMessageItem) => void - hide: () => void + show: (options: PopoverMessageOptions) => void + hide: (id: string) => void } -const SHOW_ANIMATION_VELOCITY = 450 -const HIDE_ANIMATION_VELOCITY = 400 -const REPLACE_ANIMATION_VELOCITY = 350 +// tslint:disable-next-line:no-empty +export const PopoverMessageContext = React.createContext({ show: () => {}, hide: () => {} }) -const delay = (time: number) => new Promise((resolve) => setTimeout(resolve, time)) +const filterPopoverMessagesByPosition = ( + popoverMessages: Array>, + placement: PopoverMessagePlacement +): PopoverMessageProps[] => { + const filteredByPlacement = popoverMessages.filter((t) => t.placement === placement) + const formatted = filteredByPlacement.map((popoverMessage, positionIndex) => ({ + ...popoverMessage, + positionIndex, + })) -export const PopoverMessageContext = React.createContext({ - // tslint:disable-next-line:no-empty - show: () => {}, - // tslint:disable-next-line:no-empty - hide: () => {}, -}) + return formatted +} export const PopoverMessageProvider: React.FC = ({ children }) => { - const [popoverMessage, setPopoverMessage] = useState(null) - const showingPopoverMessage = useRef(false) - const lastStartedAt = useRef(null) - const timer = useRef(null) - const [opacityAnim] = useState(new Animated.Value(0)) - const [translateYAnim] = useState(new Animated.Value(0)) - - const runAnimation = useCallback((mode: "show" | "hide") => { - const nextAnimationValue = mode === "show" ? 1 : 0 - const animationDuration = mode === "show" ? SHOW_ANIMATION_VELOCITY : HIDE_ANIMATION_VELOCITY - - return new Promise((resolve) => { - if (__TEST__) { - return resolve(null) - } - - Animated.parallel([ - Animated.spring(translateYAnim, { - toValue: nextAnimationValue, - useNativeDriver: true, - friction: 55, - }), - Animated.timing(opacityAnim, { - toValue: nextAnimationValue, - useNativeDriver: true, - duration: animationDuration, - }), - ]).start(resolve) - }) - }, []) - - const clearStartedTimeout = useCallback(() => { - if (timer.current) { - clearTimeout(timer.current) - timer.current = null - } - }, []) - - const hide: PopoverMessageContextContextValue["hide"] = useCallback(async () => { - await runAnimation("hide") - setPopoverMessage(null) - clearStartedTimeout() - showingPopoverMessage.current = false - }, [setPopoverMessage]) + const [popoverMessages, setPopoverMessages] = useState>>([]) const show: PopoverMessageContextContextValue["show"] = useCallback( - async (options) => { - const { autoHide = true, hideTimeout = 3500 } = options - const now = Date.now() - lastStartedAt.current = now - - clearStartedTimeout() - - if (showingPopoverMessage.current) { - runAnimation("hide") - await delay(REPLACE_ANIMATION_VELOCITY) - } - - // Check race condition - if (lastStartedAt.current === now) { - setPopoverMessage(options) - showingPopoverMessage.current = true - - if (autoHide) { - timer.current = setTimeout(hide, hideTimeout) - } + (options) => { + setPopoverMessages((prevPopoverMessage) => [...prevPopoverMessage, { id: `${Date.now()}`, ...options }]) + }, + [setPopoverMessages] + ) - lastStartedAt.current = null - } + const hide: PopoverMessageContextContextValue["hide"] = useCallback( + (id) => { + setPopoverMessages((prevPopoverMessage) => prevPopoverMessage.filter((t) => t.id !== id)) }, - [clearStartedTimeout, hide, setPopoverMessage] + [setPopoverMessages] ) - useEffect(() => { - if (popoverMessage) { - runAnimation("show") - } - }, [popoverMessage]) + const topPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "top"), [popoverMessages]) + const bottomPopoverMessages = useMemo(() => filterPopoverMessagesByPosition(popoverMessages, "bottom"), [ + popoverMessages, + ]) return ( {children} - {!!popoverMessage && ( - - )} + {[...topPopoverMessages, ...bottomPopoverMessages].map((popoverMessageProps) => ( + + ))} ) } diff --git a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx index 7306299b1ae..20ffec0ec67 100644 --- a/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx +++ b/src/lib/Components/PopoverMessage/__tests__/PopoverMessage-tests.tsx @@ -1,13 +1,12 @@ -import { flushPromiseQueue } from 'lib/tests/flushPromiseQueue' import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { AnimatedFlex, PopoverMessage, PopoverMessageItem } from "../PopoverMessage" +import { AnimatedFlex, PopoverMessage, PopoverMessageOptions } from "../PopoverMessage" import { usePopoverMessage } from "../popoverMessageHooks" -const TestRenderer: React.FC<{ options: PopoverMessageItem }> = (props) => { +const TestRenderer: React.FC<{ options: PopoverMessageOptions }> = (props) => { const popoverMessage = usePopoverMessage() return ( @@ -18,12 +17,22 @@ const TestRenderer: React.FC<{ options: PopoverMessageItem }> = (props) => { } describe("PopoverMessage", () => { + beforeEach(() => { + jest.clearAllMocks() + jest.useFakeTimers() + }) + + afterEach(() => { + jest.useRealTimers() + }) + it("renders when `show` is called", async () => { const tree = renderWithWrappers( ) @@ -34,14 +43,19 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) + + jest.advanceTimersByTime(3500) + + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) - it("renders 1 popover message when `show` is called twice", async () => { + it("renders 2 popover messages when `show` is called twice", async () => { const tree = renderWithWrappers( ) @@ -52,7 +66,7 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) + expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(2) }) it("renders with title and message", async () => { @@ -61,6 +75,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -81,6 +96,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", type: "error", }} /> @@ -99,6 +115,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -133,12 +150,12 @@ describe("PopoverMessage", () => { }) it("does not hide after timeout if autoHide is set to false", async () => { - jest.useFakeTimers() const tree = renderWithWrappers( @@ -155,12 +172,12 @@ describe("PopoverMessage", () => { }) it("should hide after `hideTimeout` time", async () => { - jest.useFakeTimers() const tree = renderWithWrappers( @@ -172,11 +189,7 @@ describe("PopoverMessage", () => { jest.advanceTimersByTime(3500) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(1) - jest.advanceTimersByTime(2000) - jest.useRealTimers() - - await flushPromiseQueue() - + jest.advanceTimersByTime(5000) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -186,6 +199,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", }} /> ) @@ -194,8 +208,7 @@ describe("PopoverMessage", () => { act(() => buttonInstance.props.onPress()) act(() => tree.root.findByType(PopoverMessage).findByType(Touchable).props.onPress()) - jest.useRealTimers() - await flushPromiseQueue() + jest.advanceTimersByTime(1000) expect(tree.root.findAllByType(PopoverMessage)).toHaveLength(0) }) @@ -207,6 +220,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", onClose, }} /> @@ -225,6 +239,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", showCloseIcon: false, }} /> @@ -243,6 +258,7 @@ describe("PopoverMessage", () => { options={{ title: "Some title", message: "Some message", + placement: "top", onPress, }} /> diff --git a/src/lib/Components/RelatedArtists/RelatedArtist.tsx b/src/lib/Components/RelatedArtists/RelatedArtist.tsx index ee2d723e1e6..19a50191e3c 100644 --- a/src/lib/Components/RelatedArtists/RelatedArtist.tsx +++ b/src/lib/Components/RelatedArtists/RelatedArtist.tsx @@ -1,6 +1,6 @@ import { RelatedArtist_artist } from "__generated__/RelatedArtist_artist.graphql" import { navigate } from "lib/navigation/navigate" -import { ClassTheme, Sans, Spacer } from "palette" +import { color, Sans, Spacer } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -31,13 +31,9 @@ class RelatedArtist extends Component { {artist.name} - - {({ color }) => ( - - {this.artworksString(artist.counts)} - - )} - + + {this.artworksString(artist.counts)} + ) diff --git a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx index ab4b4485df5..0c166465daa 100644 --- a/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx +++ b/src/lib/Components/SaleArtworkTileRailCard/SaleArtworkTileRailCard.tsx @@ -1,7 +1,6 @@ import { ContextModule, OwnerType, ScreenOwnerType, tappedEntityGroup, TappedEntityGroupArgs } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { SaleArtworkTileRailCard_saleArtwork } from "__generated__/SaleArtworkTileRailCard_saleArtwork.graphql" -import { Box, Flex, Sans, useColor } from "palette" +import { Box, color, Flex, Sans } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -11,10 +10,7 @@ import OpaqueImageView from "../OpaqueImageView/OpaqueImageView" export const CONTAINER_HEIGHT = 120 -const SaleArtworkCard = styled.TouchableHighlight.attrs({ - underlayColor: themeGet("colors.white100"), - activeOpacity: 0.8, -})`` +const SaleArtworkCard = styled.TouchableHighlight.attrs({ underlayColor: color("white100"), activeOpacity: 0.8 })`` export interface SaleArtworkTileRailCardProps { onPress: () => void @@ -31,7 +27,6 @@ export const SaleArtworkTileRailCard: React.FC = ( useSquareAspectRatio = false, contextScreenOwnerType, }) => { - const color = useColor() const tracking = useTracking() const artwork = saleArtwork.artwork! diff --git a/src/lib/Components/ScrollableTabBar.tsx b/src/lib/Components/ScrollableTabBar.tsx index 13d3b03c3f5..9cbb1273f4d 100644 --- a/src/lib/Components/ScrollableTabBar.tsx +++ b/src/lib/Components/ScrollableTabBar.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { Sans } from "palette" +import { color, Sans } from "palette" import React from "react" import { Animated, Dimensions, LayoutRectangle, ScrollView, View } from "react-native" import styled from "styled-components/native" @@ -24,7 +23,7 @@ const Button = styled.TouchableWithoutFeedback` const Tabs = styled.ScrollView` height: 50px; border-bottom-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` const TabButton = styled(View)<{ active: boolean }>` @@ -37,7 +36,7 @@ const TabButton = styled(View)<{ active: boolean }>` ${(p) => p.active && ` - border-color: ${themeGet("colors.black100")}; + border-color: ${color("black100")}; border-bottom-width: 2px; `}; ` @@ -47,7 +46,7 @@ interface ScrollableTabProps { } const TabLabel = styled(Sans)<{ isActive: boolean }>` - color: ${(p) => (p.isActive ? themeGet("colors.black100") : themeGet("colors.black30"))}; + color: ${(p) => (p.isActive ? color("black100") : color("black30"))}; ` export const ScrollableTab: React.FC = ({ children }) => ( diff --git a/src/lib/Components/SectionTitle.tsx b/src/lib/Components/SectionTitle.tsx index a2134c8839b..9f6310ecf81 100644 --- a/src/lib/Components/SectionTitle.tsx +++ b/src/lib/Components/SectionTitle.tsx @@ -1,4 +1,4 @@ -import { ArrowRightIcon, Flex, Text, useSpace } from "palette" +import { ArrowRightIcon, Flex, space, Text } from "palette" import React from "react" import { TouchableOpacity, View } from "react-native" @@ -20,7 +20,6 @@ export const SectionTitle: React.FC<{ onPress?: () => any RightButtonContent?: React.ComponentType | null }> = ({ title, subtitle, onPress, RightButtonContent }) => { - const space = useSpace() return ( diff --git a/src/lib/Components/Select.tsx b/src/lib/Components/Select.tsx index f3467fe2318..c7f377b855e 100644 --- a/src/lib/Components/Select.tsx +++ b/src/lib/Components/Select.tsx @@ -1,6 +1,6 @@ import { TriangleDown } from "lib/Icons/TriangleDown" import { Autocomplete } from "lib/utils/Autocomplete" -import { CheckIcon, CloseIcon, Flex, Sans, Separator, Spacer, Touchable, useColor } from "palette" +import { CheckIcon, CloseIcon, color, Flex, Sans, Separator, Spacer, Touchable } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList, TextInput, TouchableOpacity } from "react-native" import { FancyModal } from "./FancyModal/FancyModal" @@ -111,7 +111,6 @@ const SelectButton: React.FC<{ hasError?: boolean onPress(): void }> = ({ value, placeholder, onPress, title, showTitleLabel, subTitle, hasError }) => { - const color = useColor() return ( {showTitleLabel ? {title} : null} @@ -161,8 +160,6 @@ const SelectModal: React.FC<{ renderItemLabel?(value: SelectOption): JSX.Element onModalFinishedClosing?(): void }> = (props) => { - const color = useColor() - // we need to be able to have a local version of the value state so we can show the updated // state between the moment the user taps a selection and the moment we automatically // close the modal. We don't want to tell the consuming component about the user's selection until the diff --git a/src/lib/Components/Spinner.tsx b/src/lib/Components/Spinner.tsx index 8e6b1e3ba62..995d4605fcf 100644 --- a/src/lib/Components/Spinner.tsx +++ b/src/lib/Components/Spinner.tsx @@ -1,4 +1,5 @@ -import { Color, Spinner as PaletteSpinner } from "palette" +import { Spinner as PaletteSpinner } from "palette" +import { Color } from "palette/Theme" import React from "react" import { StyleSheet, View, ViewProps } from "react-native" diff --git a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx index a5153160f89..262e6ad8ae7 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageFlatList.tsx @@ -1,4 +1,4 @@ -import { useSpace } from "palette" +import { space } from "palette" import React, { useContext, useRef, useState } from "react" import { FlatList, FlatListProps } from "react-native" import Animated from "react-native-reanimated" @@ -36,7 +36,6 @@ export interface StickyTabFlatListProps } export const StickyTabPageFlatList: React.FC = (props) => { - const space = useSpace() const { staticHeaderHeight, stickyHeaderHeight, headerOffsetY } = useStickyTabPageContext() if (!staticHeaderHeight) { throw new Error("invalid state, mounted flat list before staticHeaderHeight was determined") diff --git a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx index 323549e4652..c1fa39c82f7 100644 --- a/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx +++ b/src/lib/Components/StickyTabPage/StickyTabPageTabBar.tsx @@ -1,6 +1,6 @@ import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact } from "lodash" -import { Sans, useSpace, useTheme } from "palette" +import { color, Sans, space } from "palette" import React, { useEffect, useRef, useState } from "react" import { Animated, LayoutRectangle, ScrollView, TouchableOpacity, View, ViewProps } from "react-native" import { useStickyTabPageContext } from "./SitckyTabPageContext" @@ -10,7 +10,6 @@ export const TAB_BAR_HEIGHT = 48 export const StickyTabPageTabBar: React.FC<{ onTabPress?(tab: { label: string; index: number }): void }> = ({ onTabPress, }) => { - const { color, space } = useTheme() const screen = useScreenDimensions() const { tabLabels, activeTabIndex, setActiveTabIndex } = useStickyTabPageContext() activeTabIndex.useUpdates() @@ -127,8 +126,6 @@ const ActiveTabBorder: React.FC<{ tabLayouts: LayoutRectangle[]; activeTabIndex: tabLayouts, activeTabIndex, }) => { - const space = useSpace() - // We resize this border using the `scaleX` transform property rather than the `width` property, to avoid running // animations on the JS thread, so we need to set an initial, pre-transform span for the border. const preTransformSpan = 100 diff --git a/src/lib/Components/SwitchMenu.tsx b/src/lib/Components/SwitchMenu.tsx index dc1168dbddf..677584452a3 100644 --- a/src/lib/Components/SwitchMenu.tsx +++ b/src/lib/Components/SwitchMenu.tsx @@ -1,4 +1,4 @@ -import { Flex, Sans, useColor } from "palette" +import { color, Flex, Sans } from "palette" import React from "react" import { Switch } from "react-native" @@ -10,26 +10,23 @@ interface SwitchMenuProps { disabled?: boolean } -export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => { - const color = useColor() - return ( - - - - {title} - - - {description} - - - - - +export const SwitchMenu = ({ onChange, value, title, description, disabled = false }: SwitchMenuProps) => ( + + + + {title} + + + {description} + - ) -} + + + + +) diff --git a/src/lib/Components/TabBar.tsx b/src/lib/Components/TabBar.tsx index e424419d304..089f289c146 100644 --- a/src/lib/Components/TabBar.tsx +++ b/src/lib/Components/TabBar.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import React from "react" import { Animated, View } from "react-native" import styled from "styled-components/native" -import { Box, ClassTheme, Sans } from "palette" +import { Box, color, Sans, space } from "palette" /** * Nearly all props are given by the ScrollableTabView, @@ -46,7 +45,7 @@ const TabButton = styled.View<{ spaceEvenly?: boolean; active?: boolean }>` !p.spaceEvenly && p.active && ` - border-color: ${themeGet("colors.black100")}; + border-color: ${color("black100")}; border-bottom-width: 1px; margin-bottom: -1px; `}; @@ -70,72 +69,63 @@ export default class TabBar extends React.Component { onPress={() => onPressHandler(page)} > - - {({ color }) => ( - - {name} - - )} - + + {name} + ) } render() { - return ( - - {({ space }) => { - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const containerWidth = this.props.containerWidth - space(4) - const numberOfTabs = this.props.tabs.length + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const containerWidth = this.props.containerWidth - space(4) + const numberOfTabs = this.props.tabs.length + + // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 + const translateX = this.props.scrollValue.interpolate({ + inputRange: [0, 1], + outputRange: [0, containerWidth / numberOfTabs], + }) - // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 - const translateX = this.props.scrollValue.interpolate({ - inputRange: [0, 1], - outputRange: [0, containerWidth / numberOfTabs], - }) - return ( - - - {this.props.tabs.map((name, page) => { - const isTabActive = this.props.activeTab === page - return this.renderTab(name, page, isTabActive, this.props.goToPage) - })} - {this.props.spaceEvenly ? ( - - ) : null} - - - ) - }} - + return ( + + + {this.props.tabs.map((name, page) => { + const isTabActive = this.props.activeTab === page + return this.renderTab(name, page, isTabActive, this.props.goToPage) + })} + {this.props.spaceEvenly ? ( + + ) : null} + + ) } } const Wrapper = styled(Box)` border-bottom-width: 1px; - border-bottom-color: ${themeGet("colors.black30")}; + border-bottom-color: ${color("black30")}; ` diff --git a/src/lib/Components/TextArea.tsx b/src/lib/Components/TextArea.tsx index a99182ccdac..1cd835c1dcf 100644 --- a/src/lib/Components/TextArea.tsx +++ b/src/lib/Components/TextArea.tsx @@ -1,12 +1,11 @@ -import { themeGet } from "@styled-system/theme-get" -import { Text, useColor } from "palette" +import { color, space, Text } from "palette" import React, { useState } from "react" import { TextInput, TextInputProps } from "react-native" import styled from "styled-components/native" const StyledTextArea = styled(TextInput)` border: solid 1px; - padding: ${themeGet("space.1")}px; + padding: ${space(1)}px; height: 88px; ` @@ -14,7 +13,6 @@ interface TextAreaProps extends TextInputProps { title: string } export const TextArea: React.FC = ({ title, ...props }) => { - const color = useColor() const [borderColor, setBorderColor] = useState(color("black10")) return ( diff --git a/src/lib/Components/Toast/Toast.ts b/src/lib/Components/Toast/Toast.ts deleted file mode 100644 index d6f8b8bb21f..00000000000 --- a/src/lib/Components/Toast/Toast.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { GlobalStore } from "lib/store/GlobalStore" -import { ToastOptions, ToastPlacement } from "./types" - -export const Toast = { - show: (message: string, placement: ToastPlacement, options?: ToastOptions) => - GlobalStore.actions.toast.add({ message, placement, options }), - hide: (id: number) => GlobalStore.actions.toast.remove(id), - hideOldest: () => GlobalStore.actions.toast.removeOldest(), -} diff --git a/src/lib/Components/Toast/ToastComponent.tsx b/src/lib/Components/Toast/Toast.tsx similarity index 77% rename from src/lib/Components/Toast/ToastComponent.tsx rename to src/lib/Components/Toast/Toast.tsx index d6e46ebf0b3..12efc4bea2d 100644 --- a/src/lib/Components/Toast/ToastComponent.tsx +++ b/src/lib/Components/Toast/Toast.tsx @@ -1,11 +1,9 @@ -import { useActionSheet } from "@expo/react-native-action-sheet" -import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Text, Touchable, useColor } from "palette" +import { color, Flex, IconProps, Text, Touchable } from "palette" import React, { useEffect, useState } from "react" import { Animated } from "react-native" import useTimeoutFn from "react-use/lib/useTimeoutFn" -import { ToastDetails } from "./types" +import { useToast } from "./toastHook" const AnimatedFlex = Animated.createAnimatedComponent(Flex) @@ -14,16 +12,24 @@ const EDGE_TOAST_HEIGHT = 60 const EDGE_TOAST_PADDING = 10 const NAVBAR_HEIGHT = 44 -type ToastProps = ToastDetails +export type ToastPlacement = "middle" | "top" | "bottom" +export interface ToastProps { + id: string + positionIndex: number -export const ToastComponent: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { - const color = useColor() + placement: ToastPlacement + message: string + + onPress?: (id: string) => void + Icon?: React.FC +} + +export const Toast: React.FC = ({ id, positionIndex, placement, message, onPress, Icon }) => { const { width, height } = useScreenDimensions() + const { hide } = useToast() const { top: topSafeAreaInset } = useScreenDimensions().safeAreaInsets const [opacityAnim] = useState(new Animated.Value(0)) - const { showActionSheetWithOptions } = useActionSheet() - useEffect(() => { Animated.timing(opacityAnim, { toValue: 1, @@ -37,7 +43,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem toValue: 0, useNativeDriver: true, duration: 450, - }).start(() => GlobalStore.actions.toast.remove(id)) + }).start(() => hide(id)) }, 2500) if (placement === "middle") { @@ -63,11 +69,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem overflow="hidden" > {onPress !== undefined ? ( - onPress({ id, showActionSheetWithOptions })} - underlayColor={color("black60")} - > + onPress(id)} underlayColor={color("black60")}> {innerMiddle} ) : ( @@ -111,11 +113,7 @@ export const ToastComponent: React.FC = ({ id, positionIndex, placem overflow="hidden" > {onPress !== undefined ? ( - onPress({ id, showActionSheetWithOptions })} - underlayColor={color("black60")} - > + onPress(id)} underlayColor={color("black60")}> {innerTopBottom} ) : ( diff --git a/src/lib/Components/Toast/__tests__/Toast-tests.tsx b/src/lib/Components/Toast/__tests__/Toast-tests.tsx index 3b2c9e42a1d..ce87a959a58 100644 --- a/src/lib/Components/Toast/__tests__/Toast-tests.tsx +++ b/src/lib/Components/Toast/__tests__/Toast-tests.tsx @@ -3,7 +3,7 @@ import { Touchable } from "palette" import React from "react" import { Text } from "react-native" import { act } from "react-test-renderer" -import { ToastComponent } from "../ToastComponent" +import { Toast } from "../Toast" import { useToast } from "../toastHook" const TestRenderer: React.FC = () => { @@ -29,15 +29,15 @@ describe("Toast", () => { it("renders a toast when show toast is called", async () => { const tree = renderWithWrappers() - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) + expect(tree.root.findAllByType(Toast)).toHaveLength(0) const buttonInstance = tree.root.findByType(Touchable) act(() => buttonInstance.props.onPress()) - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(1) + expect(tree.root.findAllByType(Toast)).toHaveLength(1) jest.advanceTimersByTime(3000) - expect(tree.root.findAllByType(ToastComponent)).toHaveLength(0) + expect(tree.root.findAllByType(Toast)).toHaveLength(0) }) }) diff --git a/src/lib/Components/Toast/toastHook.tsx b/src/lib/Components/Toast/toastHook.tsx index 2b7cec3093a..e7b105696a5 100644 --- a/src/lib/Components/Toast/toastHook.tsx +++ b/src/lib/Components/Toast/toastHook.tsx @@ -1,10 +1,18 @@ -import { GlobalStore } from "lib/store/GlobalStore" -import React, { useContext, useMemo } from "react" -import { Toast } from "./Toast" -import { ToastComponent } from "./ToastComponent" -import { ToastDetails, ToastPlacement } from "./types" +// Some stealing from https://github.com/arnnis/react-native-fast-toast +// but simplified +import React, { useCallback, useContext, useMemo, useState } from "react" +import useCounter from "react-use/lib/useCounter" +import { Toast, ToastPlacement, ToastProps } from "./Toast" -type ToastContextValue = typeof Toast +interface ToastContextValue { + show: ( + message: string, + placement: ToastPlacement, + options?: Omit + ) => void + hide: (id: string) => void + hideOldest: () => void +} // tslint:disable-next-line:no-empty const ToastContext = React.createContext({ show: () => {}, hide: () => {}, hideOldest: () => {} }) @@ -24,28 +32,51 @@ export const useToast = () => { } const filterToastsAndPosition = ( - toasts: Array>, + toasts: Array>, placement: ToastPlacement -): ToastDetails[] => +): ToastProps[] => toasts .filter((t) => t.placement === placement) - .reduce<{ idx: number; arr: ToastDetails[] }>( + .reduce<{ idx: number; arr: ToastProps[] }>( ({ idx, arr }, t) => ({ idx: idx + 1, arr: [...arr, { ...t, positionIndex: idx }] }), { idx: 0, arr: [] } ).arr export const ToastProvider: React.FC = ({ children }) => { - const toasts = GlobalStore.useAppState((store) => store.toast.sessionState.toasts) + const [toasts, setToasts] = useState>>([]) + const [nextId, { inc: incrementNextId }] = useCounter() + + const show: ToastContextValue["show"] = useCallback( + (message, placement, options) => { + setToasts((prevToasts) => [...prevToasts, { id: `${nextId}`, placement, message, ...options }]) + incrementNextId() + }, + [setToasts, nextId, incrementNextId] + ) + + const hide: ToastContextValue["hide"] = useCallback( + (id) => { + setToasts((prevToasts) => prevToasts.filter((t) => t.id !== id)) + }, + [setToasts] + ) + + const hideOldest: ToastContextValue["hideOldest"] = useCallback(() => { + setToasts((prevToasts) => { + const [, ...tail] = prevToasts + return tail + }) + }, [setToasts]) const topToasts = useMemo(() => filterToastsAndPosition(toasts, "top"), [toasts]) const bottomToasts = useMemo(() => filterToastsAndPosition(toasts, "bottom"), [toasts]) const middleToasts = useMemo(() => filterToastsAndPosition(toasts, "middle"), [toasts]) return ( - + {children} {[...topToasts, ...bottomToasts, ...middleToasts].map((toastProps) => ( - + ))} ) diff --git a/src/lib/Components/Toast/types.ts b/src/lib/Components/Toast/types.ts deleted file mode 100644 index dc5e1393367..00000000000 --- a/src/lib/Components/Toast/types.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { ActionSheetProps } from "@expo/react-native-action-sheet" -import { IconProps } from "palette" - -export type ToastPlacement = "middle" | "top" | "bottom" - -export interface ToastOnPressHelpers { - id: number - showActionSheetWithOptions: ActionSheetProps["showActionSheetWithOptions"] -} - -export interface ToastDetails { - id: number - positionIndex: number - - placement: ToastPlacement - message: string - - onPress?: (helpers: ToastOnPressHelpers) => void - Icon?: React.FC -} - -export type ToastOptions = Omit diff --git a/src/lib/Components/TouchableRow.tsx b/src/lib/Components/TouchableRow.tsx index 5ff95be488e..581c7e60584 100644 --- a/src/lib/Components/TouchableRow.tsx +++ b/src/lib/Components/TouchableRow.tsx @@ -1,13 +1,10 @@ -import { Touchable, TouchableProps, useColor } from "palette" +import { color, Touchable, TouchableProps } from "palette" import React from "react" export type TouchableRowProps = TouchableProps -export const TouchableRow: React.FC = ({ children, ...rest }) => { - const color = useColor() - return ( - - {children} - - ) -} +export const TouchableRow: React.FC = ({ children, ...rest }) => ( + + {children} + +) diff --git a/src/lib/Components/WorksForYou/Notification.tsx b/src/lib/Components/WorksForYou/Notification.tsx index 5c70889c8d7..2716515076e 100644 --- a/src/lib/Components/WorksForYou/Notification.tsx +++ b/src/lib/Components/WorksForYou/Notification.tsx @@ -8,7 +8,7 @@ import GenericGrid from "../ArtworkGrids/GenericGrid" import { Notification_notification } from "__generated__/Notification_notification.graphql" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { ClassTheme, Sans } from "palette" +import { color, Sans } from "palette" interface Props { // Special notifications will pass down an artistHref. Otherwise, grab it from the artworks. @@ -37,28 +37,24 @@ export class Notification extends React.Component { } return ( - - {({ color }) => ( - - - - {!!notification.image && ( - - )} - - {notification.artists} - - {notification.summary} - - - - - - + + + + {!!notification.image && ( + + )} + + {notification.artists} + + {notification.summary} + - )} - + + + + + ) } } diff --git a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx index c711b2be246..70bc403fbf9 100644 --- a/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx +++ b/src/lib/Components/WorksForYou/__tests__/Notification-tests.tsx @@ -15,7 +15,7 @@ it("renders without throwing an error for read notification", () => { renderWithLayout(, { width: 768 }) }) -fit("renders without throwing an error if no avatar image exists", () => { +it("renders without throwing an error if no avatar image exists", () => { const props = notification() // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 props.image.resized.url = null diff --git a/src/lib/Components/__tests__/ArtistListItem-tests.tsx b/src/lib/Components/__tests__/ArtistListItem-tests.tsx index fa7679bf2a1..5502c07ed7a 100644 --- a/src/lib/Components/__tests__/ArtistListItem-tests.tsx +++ b/src/lib/Components/__tests__/ArtistListItem-tests.tsx @@ -1,8 +1,9 @@ import { ArtistListItemTestsQuery } from "__generated__/ArtistListItemTestsQuery.graphql" -import { Touchable } from "palette" import React from "react" +import { TouchableWithoutFeedback } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment } from "relay-test-utils" +import { Touchable } from "../../../palette/elements/Touchable" import { mockEnvironmentPayload } from "../../tests/mockEnvironmentPayload" import { renderWithWrappers } from "../../tests/renderWithWrappers" import { ArtistListItemContainer, formatTombstoneText } from "../ArtistListItem" @@ -37,15 +38,15 @@ describe("ArtistListItem", () => { }) it("renders without feedback without throwing an error", () => { - const tree = renderWithWrappers().root + const tree = renderWithWrappers() mockEnvironmentPayload(mockEnvironment) - expect(tree.findByType(Touchable).props.noFeedback).toBe(true) + expect(tree.root.findAllByType(TouchableWithoutFeedback)).toHaveLength(2) }) it("renders with feedback without throwing an error", () => { - const tree = renderWithWrappers().root + const tree = renderWithWrappers() mockEnvironmentPayload(mockEnvironment) - expect(tree.findByType(Touchable).props.noFeedback).toBe(false) + expect(tree.root.findAllByType(Touchable)).toHaveLength(1) }) }) diff --git a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx index 09290a2506f..e62598700e0 100644 --- a/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx +++ b/src/lib/Components/__tests__/ArtsyReactWebView-tests.tsx @@ -226,7 +226,7 @@ describe(__webViewTestUtils__?.expandGoogleAdLink!, () => { }) it("expands google ad links with url params", () => { - const targetURL = "https://www.artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) + const targetURL = "https://artsy.net/search?" + stringify({ query: "Hello World &hello=world" }) const googleURL = "https://googleads.g.doubleclick.net/pcs/click?" + stringify({ adurl: targetURL }) const expanded = __webViewTestUtils__?.expandGoogleAdLink(googleURL) diff --git a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx index 3123493283e..c338f793ae1 100644 --- a/src/lib/Components/__tests__/HoursCollapsible-tests.tsx +++ b/src/lib/Components/__tests__/HoursCollapsible-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Markdown } from "lib/Components/Markdown" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TouchableWithoutFeedback } from "react-native" @@ -14,11 +13,9 @@ describe("HoursCollapsible", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("Opening hours") @@ -26,11 +23,9 @@ describe("HoursCollapsible", () => { it("expands when pressed", () => { const comp = mount( - - - - - + + + ) comp.find(TouchableWithoutFeedback).props().onPress() @@ -44,11 +39,9 @@ describe("HoursCollapsible", () => { } const comp = mount( - - - - - + + + ) comp.find(TouchableWithoutFeedback).props().onPress() diff --git a/src/lib/Components/__tests__/ReadMore-tests.tsx b/src/lib/Components/__tests__/ReadMore-tests.tsx index ae7de0661cf..17b695b75aa 100644 --- a/src/lib/Components/__tests__/ReadMore-tests.tsx +++ b/src/lib/Components/__tests__/ReadMore-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, shallow } from "enzyme" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Sans, Serif, Text, Theme } from "palette" import React from "react" import { ReadMore } from "../ReadMore" @@ -32,11 +31,9 @@ describe("ReadMore", () => { it("Shows the 'Read more' link when the length of the text is > the number of characters allowed", () => { const component = mount( - - - - - + + + ) expect(component.find(Text).length).toEqual(2) @@ -54,15 +51,13 @@ describe("ReadMore", () => { it("truncates correctly if there are links within the text", () => { const component = mount( - - - - - + + + ) expect(component.find(Text).length).toEqual(2) @@ -82,11 +77,9 @@ describe("ReadMore", () => { it("opens links modally when specified", () => { const component = mount( - - - - - + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() @@ -96,11 +89,9 @@ describe("ReadMore", () => { it("doesn't open links modally when not specified", () => { const component = mount( - - - - - + + + ) // Clicking "Read more" expands the text component.find(LinkText).at(0).props().onPress() diff --git a/src/lib/Icons/ChevronIcon.tsx b/src/lib/Icons/ChevronIcon.tsx index d113d744570..e54f034f1c1 100644 --- a/src/lib/Icons/ChevronIcon.tsx +++ b/src/lib/Icons/ChevronIcon.tsx @@ -1,4 +1,4 @@ -import { Color, useColor } from "palette" +import { color } from "palette" import React from "react" import Svg, { G, Path } from "react-native-svg" @@ -7,11 +7,10 @@ interface ChevronIconProps extends React.Props { initialDirection?: string width?: number height?: number - color?: Color + color?: string } const ChevronIcon: React.FC = (props) => { - const color = useColor() let rotation if (props.expanded) { rotation = "rotate(-90, 25, 25)" @@ -26,7 +25,7 @@ const ChevronIcon: React.FC = (props) => { @@ -37,6 +36,7 @@ const ChevronIcon: React.FC = (props) => { ChevronIcon.defaultProps = { height: 14, width: 14, + color: color("black30"), } export default ChevronIcon diff --git a/src/lib/Icons/Crosshair.tsx b/src/lib/Icons/Crosshair.tsx index 193a4e6f07c..0c4ba8143a5 100644 --- a/src/lib/Icons/Crosshair.tsx +++ b/src/lib/Icons/Crosshair.tsx @@ -1,22 +1,23 @@ -import { Color, useColor } from "palette" +import { color } from "palette" import React from "react" import Svg, { Circle, G, Path } from "react-native-svg" -const Crosshair: React.FC<{ color?: Color }> = (props) => { - const color = useColor() - return ( - - - - - - - ) +const Crosshair: React.FC<{ color?: string }> = (props) => ( + + + + + + +) + +Crosshair.defaultProps = { + color: color("black100"), } export default Crosshair diff --git a/src/lib/NativeModules/Events.tsx b/src/lib/NativeModules/Events.tsx index ffdb8df5d8b..ba6b0371d34 100644 --- a/src/lib/NativeModules/Events.tsx +++ b/src/lib/NativeModules/Events.tsx @@ -1,5 +1,16 @@ +import { addBreadcrumb } from "@sentry/react-native" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { getCurrentEmissionState } from "lib/store/GlobalStore" +import { TrackingProvider } from "lib/utils/track/providers" + +function postEvent(info: any) { + addBreadcrumb({ + message: `${JSON.stringify(info, null, 2)}`, + category: "analytics", + }) + + LegacyNativeModules.AREventsModule.postEvent(info) +} // Whether we have requested during the current session or not. let hasRequested = false @@ -21,3 +32,7 @@ export function userHadMeaningfulInteraction() { } } } + +export const NativeAnalyticsProvider: TrackingProvider = { + postEvent, +} diff --git a/src/lib/NativeModules/LegacyNativeModules.tsx b/src/lib/NativeModules/LegacyNativeModules.tsx index 78b815dae68..f085728e6da 100644 --- a/src/lib/NativeModules/LegacyNativeModules.tsx +++ b/src/lib/NativeModules/LegacyNativeModules.tsx @@ -80,6 +80,7 @@ interface LegacyNativeModules { triggerCameraModal(reactTag: number | null): Promise } AREventsModule: { + postEvent(info: any): void requestAppStoreRating(): void } } @@ -128,6 +129,8 @@ export const LegacyNativeModules: LegacyNativeModules = }, ARScreenPresenterModule, AREventsModule: { + // tslint:disable-next-line:no-empty + postEvent: () => {}, // this is not needed, we use segment RN. We will migrate ios to that too. requestAppStoreRating: noop("requestAppStoreRating"), }, } diff --git a/src/lib/Scenes/About/About.tsx b/src/lib/Scenes/About/About.tsx index 7a8c5096db2..1529b9d130e 100644 --- a/src/lib/Scenes/About/About.tsx +++ b/src/lib/Scenes/About/About.tsx @@ -3,14 +3,13 @@ import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { useToast } from "lib/Components/Toast/toastHook" import { navigate } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" -import { useColor } from "palette/hooks" +import { color } from "palette" import React, { useEffect, useState } from "react" import { ScrollView } from "react-native" import { getVersion } from "react-native-device-info" import useDebounce from "react-use/lib/useDebounce" export const About: React.FC = () => { - const color = useColor() const appVersion = getVersion() const toast = useToast() const [tapCount, updateTapCount] = useState(0) diff --git a/src/lib/Scenes/Artist/Artist.tsx b/src/lib/Scenes/Artist/Artist.tsx index 6245b0a406e..a500fc6c9d4 100644 --- a/src/lib/Scenes/Artist/Artist.tsx +++ b/src/lib/Scenes/Artist/Artist.tsx @@ -10,7 +10,7 @@ import { ArtistAboutContainer } from "lib/Components/Artist/ArtistAbout/ArtistAb import ArtistArtworks from "lib/Components/Artist/ArtistArtworks/ArtistArtworks" import { ArtistHeaderFragmentContainer } from "lib/Components/Artist/ArtistHeader" import { ArtistInsightsFragmentContainer } from "lib/Components/Artist/ArtistInsights/ArtistInsights" -import { DEFAULT_ARTWORK_SORT } from "lib/Components/ArtworkFilter/Filters/SortOptions" +import { DEFAULT_ARTWORK_SORT } from 'lib/Components/ArtworkFilter/Filters/SortOptions' import { getOnlyFilledSearchCriteriaValues } from "lib/Components/ArtworkFilter/SavedSearch/searchCriteriaHelpers" import { SearchCriteriaAttributes } from "lib/Components/ArtworkFilter/SavedSearch/types" import { HeaderTabsGridPlaceholder } from "lib/Components/HeaderTabGridPlaceholder" diff --git a/src/lib/Scenes/Artist/SearchCriteria.tsx b/src/lib/Scenes/Artist/SearchCriteria.tsx index b051bd50705..573d2cb69e0 100644 --- a/src/lib/Scenes/Artist/SearchCriteria.tsx +++ b/src/lib/Scenes/Artist/SearchCriteria.tsx @@ -5,7 +5,6 @@ import { useFeatureFlag } from "lib/store/GlobalStore" import { ProvidePlaceholderContext } from "lib/utils/placeholders" import { isNull } from "lodash" import React from "react" -import { Platform } from "react-native" import { graphql, QueryRenderer } from "react-relay" import { RelayModernEnvironment } from "relay-runtime/lib/store/RelayModernEnvironment" @@ -24,8 +23,7 @@ export interface SearchCriteriaQueryRendererProps { export const SearchCriteriaQueryRenderer: React.FC = (props) => { const { render, searchCriteriaId, environment = defaultEnvironment } = props const { renderComponent, renderPlaceholder } = render - const enableSavedSearch = - Platform.OS === "ios" ? useFeatureFlag("AREnableSavedSearch") : useFeatureFlag("AREnableSavedSearchAndroid") + const enableSavedSearch = useFeatureFlag("AREnableSavedSearch") if (enableSavedSearch && searchCriteriaId) { return ( diff --git a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx index 341fa79aeb4..ec2aff5c73d 100644 --- a/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx +++ b/src/lib/Scenes/Artist/__tests__/ArtistSavedSearch-tests.tsx @@ -1,5 +1,4 @@ import { SavedSearchBanner } from "lib/Components/Artist/ArtistArtworks/SavedSearchBanner" -import { SavedSearchButtonQueryRenderer } from 'lib/Components/Artist/ArtistArtworks/SavedSearchButton' import { CurrentOption } from "lib/Components/ArtworkFilter" import { PopoverMessage } from "lib/Components/PopoverMessage/PopoverMessage" import { __globalStoreTestUtils__ } from "lib/store/GlobalStore" @@ -124,19 +123,6 @@ describe("Saved search banner on artist screen", () => { expect(textInstances[0].props.children).toEqual("Sorry, an error occured") expect(textInstances[1].props.children).toEqual("Failed to get saved search criteria") }) - - it("should render new saved search component if AREnableSavedSearchV2 flag set to true", async () => { - __globalStoreTestUtils__?.injectFeatureFlags({ AREnableSavedSearchV2: true }) - - const tree = getTree() - - mockMostRecentOperation("ArtistAboveTheFoldQuery", MockArtistAboveTheFoldQuery) - - await flushPromiseQueue() - - expect(tree.root.findAllByType(SavedSearchButtonQueryRenderer)).toHaveLength(1) - expect(tree.root.findAllByType(SavedSearchBanner)).toHaveLength(0) - }) }) const MockSearchCriteriaQuery = { diff --git a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx index 7339934ad37..69c12f35dca 100644 --- a/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx +++ b/src/lib/Scenes/ArtistSeries/ArtistSeriesListItem.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, ScreenOwnerType, TappedArtistSeri import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { ArtistSeriesConnectionEdge } from "lib/Scenes/ArtistSeries/ArtistSeriesMoreSeries" -import { ArrowRightIcon, Flex, Sans, Touchable, useColor } from "palette" +import { ArrowRightIcon, color, Flex, Sans, Touchable } from "palette" import React from "react" import { useTracking } from "react-tracking" @@ -24,7 +24,6 @@ export const ArtistSeriesListItem: React.FC = ({ horizontalSlidePosition, listItem, }) => { - const color = useColor() const { trackEvent } = useTracking() const artworksCountMessage = listItem?.node?.artworksCountMessage diff --git a/src/lib/Scenes/Artwork/Artwork.tsx b/src/lib/Scenes/Artwork/Artwork.tsx index 9d46592ee38..0176dbc0491 100644 --- a/src/lib/Scenes/Artwork/Artwork.tsx +++ b/src/lib/Scenes/Artwork/Artwork.tsx @@ -20,7 +20,7 @@ import { import { QAInfoPanel } from "lib/utils/QAInfo" import { Schema, screenTrack } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Separator, Spacer, useSpace } from "palette" +import { Box, Separator, space, Spacer } from "palette" import React from "react" import { ActivityIndicator, FlatList, View } from "react-native" import { RefreshControl } from "react-native" @@ -525,7 +525,6 @@ export const ArtworkQueryRenderer: React.FC<{ } const AboveTheFoldPlaceholder: React.FC<{}> = ({}) => { - const space = useSpace() const screenDimensions = useScreenDimensions() // The logic for artworkHeight comes from the zeplin spec https://zpl.io/25JLX0Q const artworkHeight = screenDimensions.width >= 375 ? 340 : 290 diff --git a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx index fd6848ab605..ff86b52f2f7 100644 --- a/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx +++ b/src/lib/Scenes/Artwork/Components/ArtworkActions.tsx @@ -10,7 +10,7 @@ import { BellFillIcon, BellIcon, Box, - ClassTheme, + color, EyeOpenedIcon, Flex, HeartFillIcon, @@ -107,26 +107,18 @@ export class ArtworkActions extends React.Component { this.handleArtworkSave()}> {is_saved ? : } - - {({ color }) => ( - - Watch lot - - )} - + + Watch lot + ) : ( this.handleArtworkSave()}> {is_saved ? : } - - {({ color }) => ( - - {is_saved ? "Saved" : "Save"} - - )} - + + {is_saved ? "Saved" : "Save"} + )} diff --git a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx index cfac0ba20a5..92ae037f2e3 100644 --- a/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx +++ b/src/lib/Scenes/Artwork/Components/CommercialButtons/BidButton.tsx @@ -4,7 +4,7 @@ import { AuctionTimerState } from "lib/Components/Bidding/Components/Timer" import { navigate } from "lib/navigation/navigate" import { bidderNeedsIdentityVerification } from "lib/utils/auction" import { Schema } from "lib/utils/track" -import { Button, ClassTheme, Sans } from "palette" +import { Button, color, Sans } from "palette" import React from "react" import { Text } from "react-native" import { createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -129,13 +129,9 @@ export class BidButton extends React.Component { return ( <> {isWatchOnly && ( - - {({ color }) => ( - - Registration closed - - )} - + + Registration closed + )} - + this.handleTap()}> + + {!!url && ( + + - - )} - + )} + + + + {partnerName} + + + {name} + + {!!exhibition_period && ( + + {exhibitionDates(exhibition_period, end_at! /* STRICTNESS_MIGRATION */)} + + )} + + + + + ) } } diff --git a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx index 7c944665f2d..fd52f464f26 100644 --- a/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/EventSection/__tests__/index-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { RelayProp } from "react-relay" @@ -25,17 +24,15 @@ const data = [ describe("CityEvent", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("Gallery shows") diff --git a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx index 3bacf5be8c6..08384ad36b8 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/Components/FairEventSectionCard.tsx @@ -1,8 +1,7 @@ -import { themeGet } from "@styled-system/theme-get" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans, space } from "palette" import React, { Component } from "react" import { Dimensions, Image, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -49,7 +48,7 @@ export class FairEventSectionCard extends Component { } const BackgroundImage = styled(OpaqueImageView)` - background: ${themeGet("colors.black60")}; + background: ${color("black60")}; position: absolute; height: 100%; width: 100%; @@ -60,7 +59,7 @@ const Container = styled(Box)` height: 310; position: relative; overflow: hidden; - background: ${themeGet("colors.black60")}; + background: ${color("black60")}; ` // Set background color of overlay based on logo color @@ -75,6 +74,7 @@ const Logo = styled(Image)` width: 100; height: 100; background-color: transparent; - margin-bottom: ${themeGet("space.1")}px; + margin-bottom: ${space(1)}; + /* stylelint-disable */ tint-color: white; ` diff --git a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx index 041e112d407..1a77a6f14cc 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/__tests__/index-tests.tsx @@ -1,6 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { FairEventSection } from "../index" @@ -22,11 +21,9 @@ const data = [ describe("FairEventSection", () => { it("renders properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("TEFAF New York Fall 2019") diff --git a/src/lib/Scenes/City/Components/FairEventSection/index.tsx b/src/lib/Scenes/City/Components/FairEventSection/index.tsx index b01da8b45c2..6a9d699870f 100644 --- a/src/lib/Scenes/City/Components/FairEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/FairEventSection/index.tsx @@ -1,7 +1,6 @@ -import { themeGet } from "@styled-system/theme-get" import { CaretButton } from "lib/Components/Buttons/CaretButton" import { navigate } from "lib/navigation/navigate" -import { Box, ClassTheme, Serif } from "palette" +import { Box, Serif, space } from "palette" import { Component } from "react" import React from "react" import { FlatList } from "react-native" @@ -10,7 +9,7 @@ import { FairEventSectionCard } from "./Components/FairEventSectionCard" const FairSectionBackground = styled(Box)` background: black; - margin-bottom: ${themeGet("space.1")}px; + margin-bottom: ${space(1)}; ` interface Props { @@ -38,33 +37,29 @@ export class FairEventSection extends Component { render() { const { data } = this.props return ( - - {({ space }) => ( - - - - Fairs - - - Boolean(fair.image))} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - contentContainerStyle={{ padding: space(2) }} - horizontal + + + + Fairs + + + Boolean(fair.image))} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + contentContainerStyle={{ padding: space(2) }} + horizontal + /> + {data.length > 2 && ( + + this.viewAllPressed()} + text={`View all ${data.length} fairs`} + textColor="white" /> - {data.length > 2 && ( - - this.viewAllPressed()} - text={`View all ${data.length} fairs`} - textColor="white" - /> - - )} - + )} - + ) } } diff --git a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx index 0f2f6e3c96c..314ba4a61c1 100644 --- a/src/lib/Scenes/City/Components/SavedEventSection/index.tsx +++ b/src/lib/Scenes/City/Components/SavedEventSection/index.tsx @@ -1,10 +1,9 @@ -import { themeGet } from "@styled-system/theme-get" import ChevronIcon from "lib/Icons/ChevronIcon" import PinSavedOff from "lib/Icons/PinSavedOff" import PinSavedOn from "lib/Icons/PinSavedOn" import { navigate } from "lib/navigation/navigate" import { Track, track as _track } from "lib/utils/track" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -37,7 +36,7 @@ export class SavedEventSection extends Component { {data.length > 1 ? data.length + " saved events" : data.length + " saved event"} - + ) @@ -74,5 +73,5 @@ export class SavedEventSection extends Component { const SavedBox = styled(Box)` border-radius: 2px; border-width: 1px; - border-color: ${themeGet("colors.black30")}; + border-color: ${color("black30")}; ` diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx index 512bfe264a0..bb43833cc16 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/__tests__/index-tests.tsx @@ -1,7 +1,6 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount } from "enzyme" import { Fair } from "lib/Scenes/Map/types" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import React from "react" import { TabFairItemRow } from "../index" @@ -27,11 +26,9 @@ const fairData = ({ describe("TabFairItemRow", () => { it("renders Fair properly", () => { const comp = mount( - - - - - + + + ) expect(comp.text()).toContain("TEFAF New York Spring 2019") diff --git a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx index d7370ceae42..a80c38d3e16 100644 --- a/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx +++ b/src/lib/Scenes/City/Components/TabFairItemRow/index.tsx @@ -1,7 +1,7 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" import { Fair } from "lib/Scenes/Map/types" -import { Box, ClassTheme, Flex, Sans } from "palette" +import { Box, Flex, Sans, space } from "palette" import React from "react" import { Dimensions, TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -17,41 +17,33 @@ export class TabFairItemRow extends React.Component { render() { const { item } = this.props + const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) const fairImage = item.image ? item.image.url : null return ( - - {({ space }) => { - const boxWidth = Dimensions.get("window").width - 62 - space(4) - space(1) - return ( - this.handleTap(item)}> - - - - - - {!!item.name && ( - - {item.name} - - )} - {!!item.counts && !!item.counts.partners && ( - - {item.counts.partners > 1 - ? `${item.counts.partners} Exhibitors` - : `${item.counts.partners} Exhibitor`} - - )} - {!!item.exhibition_period && ( - - {item.exhibition_period} - - )} - - - - ) - }} - + this.handleTap(item)}> + + + + + + {!!item.name && ( + + {item.name} + + )} + {!!item.counts && !!item.counts.partners && ( + + {item.counts.partners > 1 ? `${item.counts.partners} Exhibitors` : `${item.counts.partners} Exhibitor`} + + )} + {!!item.exhibition_period && ( + + {item.exhibition_period} + + )} + + + ) } } diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx index a6c946a841a..ef7488eb557 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/__tests__/CollectionArtistSeriesRail-tests.tsx @@ -21,7 +21,6 @@ import { CollectionArtistSeriesRail, CollectionArtistSeriesRailContainer, } from "lib/Scenes/Collection/Components/CollectionHubsRails/ArtistSeries/CollectionArtistSeriesRail" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { Sans, Theme } from "palette" import { useTracking } from "react-tracking" @@ -124,11 +123,9 @@ describe("Artist Series Rail", () => { it("renders the Trending Artists Series rail component", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesRail)).toHaveLength(1) @@ -136,11 +133,9 @@ describe("Artist Series Rail", () => { it("renders three artist series in the Trending Artists Series", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ArtworkImageContainer)).toHaveLength(3) @@ -148,11 +143,9 @@ describe("Artist Series Rail", () => { it("renders three images of the correct size in an artist series", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ImageView).at(0).props().imageURL).toBe( @@ -182,11 +175,9 @@ describe("Artist Series Rail", () => { it("renders the collection hub rail title", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(Sans).text()).toBe("Trending Artist Series") @@ -194,11 +185,9 @@ describe("Artist Series Rail", () => { it("renders each artist series' title", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesTitle).at(0).text()).toBe("Cindy Sherman: Untitled Film Stills") @@ -210,11 +199,9 @@ describe("Artist Series Rail", () => { it("renders each artist series' metadata", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(GenericArtistSeriesMeta).at(0).text()).toBe("From $20,000") @@ -226,11 +213,9 @@ describe("Artist Series Rail", () => { it("navigates to a new collection when a series is tapped", () => { const wrapper = mount( - - - - - + + + ) wrapper.find(CardRailCard).at(0).props().onPress() diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx index 3e8e00bd053..223041cbc21 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/FeaturedCollections/FeaturedCollectionsRail.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { FeaturedCollectionsRail_collection } from "__generated__/FeaturedCollectionsRail_collection.graphql" import { FeaturedCollectionsRail_collectionGroup } from "__generated__/FeaturedCollectionsRail_collectionGroup.graphql" import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" @@ -7,7 +6,7 @@ import { navigate } from "lib/navigation/navigate" import { defaultRules } from "lib/utils/renderMarkdown" import { renderMarkdown } from "lib/utils/renderMarkdown" import { Schema } from "lib/utils/track" -import { Flex, Sans, Spacer, Touchable, useColor } from "palette" +import { color, Flex, Sans, Spacer, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -21,7 +20,6 @@ interface FeaturedCollectionsRailProps { type FeaturedCollection = FeaturedCollectionsRail_collectionGroup["members"][0] export const FeaturedCollectionsRail: React.FC = (props) => { - const color = useColor() const tracking = useTracking() const { collection, collectionGroup } = props const collections = collectionGroup?.members ?? [] @@ -109,7 +107,7 @@ export const FeaturedCollectionsRail: React.FC = ( } export const ImageWrapper = styled(Flex)` - border: solid 1px ${themeGet("colors.black10")}; + border: solid 1px ${color("black10")}; height: 385px; width: 260px; border-radius: 5px; diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx index 0bbe596a1c8..5dd3bcd230c 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/OtherCollectionsRail.tsx @@ -1,19 +1,25 @@ import { OtherCollectionsRail_collectionGroup } from "__generated__/OtherCollectionsRail_collectionGroup.graphql" import { CardRailFlatList } from "lib/Components/Home/CardRailFlatList" import { navigate } from "lib/navigation/navigate" -import { Sans, SansProps, Spacer } from "palette" +import { Sans, Spacer } from "palette" import React, { useRef } from "react" import { TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" +import styled from "styled-components/native" export interface OtherCollectionsRailProps { collectionGroup: OtherCollectionsRail_collectionGroup } -export const CollectionGroupMemberPill: React.FC> = (props) => ( - // @ts-ignore - -) +export const CollectionGroupMemberPill = styled(Sans).attrs({ + px: 3, + py: 2, + size: "3t", + bg: "black10", +})` + overflow: hidden; + border-radius: 6px; +` export const OtherCollectionsRail: React.FC = ({ collectionGroup: { name, members } }) => { const ref = useRef(null) diff --git a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx index f3006056ab7..9b33f7339b9 100644 --- a/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx +++ b/src/lib/Scenes/Collection/Components/CollectionHubsRails/OtherCollections/__tests__/OtherCollectionsRail-tests.tsx @@ -15,7 +15,7 @@ describe("Other Collections Rail", () => { const { root } = renderWithWrappers() const { props: { children }, - } = root.findAllByType(Sans)[0] + } = root.findByType(Sans) expect(children).toContain("Browse by Movement") }) diff --git a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx index 1286e2b8437..b39c9af2d0d 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FeaturedArtists-tests.tsx @@ -1,6 +1,5 @@ import { FeaturedArtistsTestsQueryRawResponse } from "__generated__/FeaturedArtistsTestsQuery.graphql" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { postEventToProviders } from "lib/utils/track/providers" @@ -105,11 +104,9 @@ describe("FeaturedArtists", () => { const render = (collection: FeaturedArtistsTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - - - + + + )), query: graphql` query FeaturedArtistsTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx index 929ae82bc8a..070ac52ef82 100644 --- a/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx +++ b/src/lib/Scenes/Collection/Components/__tests__/FullFeaturedArtistList-tests.tsx @@ -1,5 +1,4 @@ import { FullFeaturedArtistListTestsQueryRawResponse } from "__generated__/FullFeaturedArtistListTestsQuery.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { mockTracking } from "lib/tests/mockTracking" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" @@ -13,11 +12,9 @@ describe("FullFeaturedArtistList", () => { const render = (collection: FullFeaturedArtistListTestsQueryRawResponse["marketingCollection"]) => renderRelayTree({ Component: mockTracking(({ marketingCollection }) => ( - - - - - + + + )), query: graphql` query FullFeaturedArtistListTestsQuery @raw_response_type { diff --git a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx index e13f35af673..5f82cad3907 100644 --- a/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx +++ b/src/lib/Scenes/Collection/Screens/__tests__/CollectionHeader-tests.tsx @@ -3,7 +3,6 @@ import { CollectionHeaderTestsQueryRawResponse } from "__generated__/CollectionH import { mount } from "enzyme" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { ReadMore } from "lib/Components/ReadMore" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Sans, Theme } from "palette" import React from "react" @@ -16,11 +15,9 @@ jest.unmock("react-relay") it("renders without throwing an error", async () => { await renderRelayTree({ Component: (props: any) => ( - - - - - + + + ), query: graphql` query CollectionHeaderTestsQuery @raw_response_type { @@ -43,22 +40,18 @@ describe("collection header", () => { it("passes the collection header image url to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("http://imageuploadedbymarketingteam.jpg") }) it("passes the collection header title to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(Sans).at(0).html()).toContain("Street Art Now") @@ -67,11 +60,9 @@ describe("collection header", () => { it("passes the url of the most marketable artwork in the collection to the collection header when there is no headerImage value present", () => { props.collection.headerImage = null const wrapper = mount( - - - - - + + + ) expect(wrapper.find(OpaqueImageView).html()).toContain("https://defaultmostmarketableartworkincollectionimage.jpg") }) @@ -79,22 +70,18 @@ describe("collection header", () => { it("does not render the Read More component when there is no description", () => { props.collection.descriptionMarkdown = null const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ReadMore).exists()).toBe(false) }) it("passes the collection header description to collection header", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find(ReadMore).exists()).toBe(true) diff --git a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx index 1d8afa876b8..130193e833f 100644 --- a/src/lib/Scenes/Consignments/Components/ImageSelection.tsx +++ b/src/lib/Scenes/Consignments/Components/ImageSelection.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Touchable, useColor } from "palette" +import { color, Touchable } from "palette" import React from "react" import { Dimensions, FlatList, Image, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -17,7 +16,7 @@ const SelectedIndicator = styled.View` ` const Overlay = styled.View` - ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${themeGet("colors.black80")}`}; + ${(p: { selected: boolean }) => p.selected && `border-width: 1; border-color: ${color("black80")}`}; ` export interface ImageData { @@ -66,7 +65,6 @@ const TakePhotoImage = (props: TakePhotoImageProps) => { } const ImageForURI = (props: ImagePreviewProps) => { - const color = useColor() const { width } = useScreenDimensions() const imageSize = (width - 60) / 2 diff --git a/src/lib/Scenes/Consignments/Components/SearchResults.tsx b/src/lib/Scenes/Consignments/Components/SearchResults.tsx index 20b50141cfb..43660b5e535 100644 --- a/src/lib/Scenes/Consignments/Components/SearchResults.tsx +++ b/src/lib/Scenes/Consignments/Components/SearchResults.tsx @@ -1,4 +1,4 @@ -import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, color, Flex, Sans, Spacer } from "palette" import React from "react" import { ScrollView, TouchableOpacity, View } from "react-native" import styled from "styled-components/native" @@ -24,13 +24,9 @@ const noResults = (props: SearchQueryProps) => { return null } return ( - - {({ color }) => ( - - {props.noResultsMessage} {props.query} - - )} - + + {props.noResultsMessage} {props.query} + ) } diff --git a/src/lib/Scenes/Consignments/Components/TextArea.tsx b/src/lib/Scenes/Consignments/Components/TextArea.tsx index 240aab84966..08d44f65494 100644 --- a/src/lib/Scenes/Consignments/Components/TextArea.tsx +++ b/src/lib/Scenes/Consignments/Components/TextArea.tsx @@ -1,13 +1,13 @@ -import { themeGet } from "@styled-system/theme-get" import colors from "lib/data/colors" import fonts from "lib/data/fonts" +import { color } from "palette" import React from "react" import { Platform, TextInputProps, View, ViewProps } from "react-native" import styled from "styled-components/native" const Input = styled.TextInput` height: 100%; - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; font-family: "${fonts["unica77ll-regular"]}"; font-size: 16; ` diff --git a/src/lib/Scenes/Consignments/Components/TextInput.tsx b/src/lib/Scenes/Consignments/Components/TextInput.tsx index 6e0ee78dfbb..65c2066a0d5 100644 --- a/src/lib/Scenes/Consignments/Components/TextInput.tsx +++ b/src/lib/Scenes/Consignments/Components/TextInput.tsx @@ -1,6 +1,5 @@ -import { themeGet } from "@styled-system/theme-get" import { Fonts } from "lib/data/fonts" -import { Box, ClassTheme, useColor } from "palette" +import { Box, color } from "palette" import React, { FunctionComponent } from "react" import { ActivityIndicator, @@ -32,14 +31,13 @@ interface State { const Input = styled.TextInput` height: 40; - color: ${themeGet("colors.black100")}; + color: ${color("black100")}; font-family: "${Fonts.Unica77LLRegular}"; font-size: 16; flex: 1; ` const Separator = (focused: boolean) => { - const color = useColor() return ( { ) } -const ReadOnlyInput = (props: TextInputProps) => { - const color = useColor() - return ( - - {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} - - ) -} +const ReadOnlyInput = (props: TextInputProps) => ( + + {props.text! /* STRICTNESS_MIGRATION */.value || props.text! /* STRICTNESS_MIGRATION */.placeholder} + +) export default class TextInputField extends React.Component { inputRef: TextInput | null = null @@ -90,55 +85,49 @@ export default class TextInputField extends React.Component - {({ color }) => ( - - - { - // LocationIcon needs offset because the pin icon from pallete - // is centered on the pin's tip + + + { + // LocationIcon needs offset because the pin icon from pallete + // is centered on the pin's tip + } + {!!LocationIcon && ( + + + + )} + {!!this.props.preImage && } + {this.props.readonly ? ( + ReadOnlyInput(this.props) + ) : ( + (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} + autoCorrect={false} + clearButtonMode="while-editing" + keyboardAppearance="dark" + placeholderTextColor={color("black60")} + selectionColor={color("black60")} + {...this.props.text} + autoFocus={false} + onFocus={(e) => + this.setState( + { focused: true }, + () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) + ) + } + onBlur={(e) => + this.setState( + { focused: false }, + () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) + ) } - {!!LocationIcon && ( - - - - )} - {!!this.props.preImage && ( - - )} - {this.props.readonly ? ( - ReadOnlyInput(this.props) - ) : ( - (this.inputRef = ref as any) /* STRICTNESS_MIGRATION */} - autoCorrect={false} - clearButtonMode="while-editing" - keyboardAppearance="dark" - placeholderTextColor={color("black60")} - selectionColor={color("black60")} - {...this.props.text} - autoFocus={false} - onFocus={(e) => - this.setState( - { focused: true }, - () => this.props.text && this.props.text.onFocus && this.props.text.onFocus(e) - ) - } - onBlur={(e) => - this.setState( - { focused: false }, - () => this.props.text && this.props.text.onBlur && this.props.text.onBlur(e) - ) - } - /> - )} + /> + )} - {this.props.searching ? : null} - - {Separator(this.state.focused)} - - )} - + {this.props.searching ? : null} + + {Separator(this.state.focused)} + ) } } diff --git a/src/lib/Scenes/Consignments/Components/Toggle.tsx b/src/lib/Scenes/Consignments/Components/Toggle.tsx index b5b2631f69a..376e1751e4f 100644 --- a/src/lib/Scenes/Consignments/Components/Toggle.tsx +++ b/src/lib/Scenes/Consignments/Components/Toggle.tsx @@ -1,5 +1,5 @@ import fonts from "lib/data/fonts" -import { ClassTheme } from "palette" +import { color } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -63,21 +63,17 @@ const render = (props: ToggleProps) => { const Circle = WhiteCircle return ( - - {({ color }) => ( - - - - {selected ? props.left : ""} - {selected ? "" : props.right} - - - - - - - )} - + + + + {selected ? props.left : ""} + {selected ? "" : props.right} + + + + + + ) } diff --git a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx index 7e1e6779654..2b57fdb61dc 100644 --- a/src/lib/Scenes/Consignments/Screens/Confirmation.tsx +++ b/src/lib/Scenes/Consignments/Screens/Confirmation.tsx @@ -3,7 +3,7 @@ import Spinner from "lib/Components/Spinner" import { dismissModal, navigate } from "lib/navigation/navigate" import NavigatorIOS from "lib/utils/__legacy_do_not_use__navigator-ios-shim" import { Schema, screenTrack } from "lib/utils/track" -import { Box, Button, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, Button, color, Flex, Sans, Spacer } from "palette" import React from "react" import { Alert, BackHandler, NativeEventSubscription, View, ViewProps } from "react-native" import styled from "styled-components/native" @@ -98,66 +98,57 @@ export default class Confirmation extends React.Component { ) successContent = () => ( - - {({ color }) => ( - - - - Thank you for submitting your consignment - - - - Our team of specialists are reviewing your work. You'll receive an email update once the status of your - submission changes. - - - - If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. - - - - - - - - - - )} - + + + + Thank you for submitting your consignment + + + + Our team of specialists are reviewing your work. You'll receive an email update once the status of your + submission changes. + + + + If your work is accepted, Artsy will gather competitive offers and guide you through the selling process. + + + + + + + + + ) - failedContent = () => ( - - {({ color }) => ( - - - - Submission failed - - - - We’re sorry, something went wrong. Please try submitting your consignment again. - - - - - - - - - - - - )} - + + + + Submission failed + + + + We’re sorry, something went wrong. Please try submitting your consignment again. + + + + + + + + + + + ) confirmationContent() { diff --git a/src/lib/Scenes/Consignments/Screens/Location.tsx b/src/lib/Scenes/Consignments/Screens/Location.tsx index e5a02f66578..92f409bfb0a 100644 --- a/src/lib/Scenes/Consignments/Screens/Location.tsx +++ b/src/lib/Scenes/Consignments/Screens/Location.tsx @@ -9,6 +9,7 @@ import { ConsignmentSetup, LocationResult } from "../index" import { stringify } from "qs" import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" +import { Theme } from "palette" import { Dimensions } from "react-native" import Config from "react-native-config" import { BottomAlignedButton } from "../Components/BottomAlignedButton" @@ -104,29 +105,31 @@ export default class Location extends React.Component { const isPad = Dimensions.get("window").width > 700 return ( - - Location - - - results={this.state.results} - query={this.state.query} - onChangeText={this.textChanged} - searching={this.state.searching} - resultSelected={this.locationSelected} - LocationIcon={LocationIcon} - placeholder="City, Country" - noResultsMessage="Could not find" - /> - - + + + Location + + + results={this.state.results} + query={this.state.query} + onChangeText={this.textChanged} + searching={this.state.searching} + resultSelected={this.locationSelected} + LocationIcon={LocationIcon} + placeholder="City, Country" + noResultsMessage="Could not find" + /> + + + ) } } diff --git a/src/lib/Scenes/Fair/Components/FairEditorial.tsx b/src/lib/Scenes/Fair/Components/FairEditorial.tsx index a9efc30d330..dbb4e94e9e1 100644 --- a/src/lib/Scenes/Fair/Components/FairEditorial.tsx +++ b/src/lib/Scenes/Fair/Components/FairEditorial.tsx @@ -2,7 +2,7 @@ import { ActionType, ContextModule, OwnerType, TappedArticleGroup } from "@artsy import { FairEditorial_fair } from "__generated__/FairEditorial_fair.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" -import { Box, BoxProps, Text, Touchable, useColor } from "palette" +import { Box, BoxProps, color, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" import { useTracking } from "react-tracking" @@ -12,7 +12,6 @@ interface FairEditorialProps extends BoxProps { } export const FairEditorial: React.FC = ({ fair, ...rest }) => { - const color = useColor() const tracking = useTracking() const trackTappedArticle = (articleID: string, articleSlug: string) => { @@ -92,7 +91,7 @@ export const FairEditorialFragmentContainer = createFragmentContainer(FairEditor fragment FairEditorial_fair on Fair { internalID slug - articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC, inEditorialFeed: true) { + articles: articlesConnection(first: 5, sort: PUBLISHED_AT_DESC) { totalCount edges { node { diff --git a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx index 81121006186..76ef819eafc 100644 --- a/src/lib/Scenes/Fair/Components/SimpleTabs.tsx +++ b/src/lib/Scenes/Fair/Components/SimpleTabs.tsx @@ -1,4 +1,4 @@ -import { Box, Flex, Text, useColor } from "palette" +import { Box, color, Flex, Text } from "palette" import React, { Dispatch, SetStateAction } from "react" import { TouchableOpacity, View } from "react-native" @@ -43,7 +43,6 @@ interface TabsProps { * Renders a list of tabs. Evenly-spaces them across the screen. */ export const Tabs: React.FC = ({ setActiveTab, activeTab, tabs }) => { - const color = useColor() const tabWidth = 100 / tabs.length return ( = ({ fair, relay }) => { - const space = useSpace() const articles = fair.articlesConnection?.edges const totalCount = fair.articlesConnection?.totalCount ?? 0 const [isLoading, setIsLoading] = useState(false) @@ -161,7 +160,7 @@ export const FairArticlesPaginationContainer = createPaginationContainer( fair: graphql` fragment FairArticles_fair on Fair @argumentDefinitions(first: { type: "Int" }, after: { type: "String" }) { slug - articlesConnection(first: $first, after: $after, inEditorialFeed: true) @connection(key: "FairArticlesQuery_articlesConnection") { + articlesConnection(first: $first, after: $after) @connection(key: "FairArticlesQuery_articlesConnection") { totalCount edges { node { diff --git a/src/lib/Scenes/Favorites/FavoriteArtists.tsx b/src/lib/Scenes/Favorites/FavoriteArtists.tsx index f0a88499726..50db3fa9a19 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtists.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtists.tsx @@ -15,7 +15,7 @@ import { StickyTabPageScrollView } from "lib/Components/StickyTabPage/StickyTabP import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" -import { ClassTheme, Spacer } from "palette" +import { space, Spacer } from "palette" interface Props { me: FavoriteArtists_me @@ -83,24 +83,18 @@ class Artists extends React.Component { } return ( - - {({ space }) => ( - - } - style={{ paddingHorizontal: 0 }} - ItemSeparatorComponent={() => } - ListFooterComponent={ - this.state.fetchingMoreData ? : null - } - /> - )} - + } + style={{ paddingHorizontal: 0 }} + ItemSeparatorComponent={() => } + ListFooterComponent={ + this.state.fetchingMoreData ? : null + } + /> ) } } diff --git a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx index 130b10a9056..1ce854d84b0 100644 --- a/src/lib/Scenes/Favorites/FavoriteArtworks.tsx +++ b/src/lib/Scenes/Favorites/FavoriteArtworks.tsx @@ -14,7 +14,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, ClassTheme } from "palette" +import { Button, space } from "palette" interface Props { me: FavoriteArtworks_me @@ -96,19 +96,13 @@ export class SavedWorks extends Component { } return ( - - {({ space }) => ( - - } - > - - - )} - + } + > + + ) } } diff --git a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx index 7f3c69b37b3..d6a638af797 100644 --- a/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx +++ b/src/lib/Scenes/ForceUpdate/ForceUpdate.tsx @@ -1,4 +1,4 @@ -import { ArtsyLogoIcon, Button, Flex, Text, useColor } from "palette" +import { ArtsyLogoIcon, Button, color, Flex, Text } from "palette" import React from "react" import { Linking, Platform } from "react-native" @@ -10,7 +10,6 @@ const PLAYSTORE_URL = "https://play.google.com/store/apps/details?id=net.artsy.a const APP_STORE_URL = "https://apps.apple.com/us/app/artsy-buy-sell-original-art/id703796080" export const ForceUpdate: React.FC = ({ forceUpdateMessage }) => { - const color = useColor() const handleUpdate = () => { const storeURL = Platform.OS === "android" ? PLAYSTORE_URL : APP_STORE_URL Linking.canOpenURL(storeURL).then( diff --git a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx index 820f4e5a85f..65543287024 100644 --- a/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx +++ b/src/lib/Scenes/Home/Components/EmailConfirmationBanner.tsx @@ -1,4 +1,4 @@ -import { Flex, Sans, SansProps, Spinner, useColor } from "palette" +import { color, Flex, Sans, SansProps, Spinner } from "palette" import React, { FC, useState } from "react" import { Image, TouchableWithoutFeedback } from "react-native" import { commitMutation, createFragmentContainer, graphql, RelayProp } from "react-relay" @@ -45,7 +45,6 @@ const submitMutation = async (relayEnvironment: Environment) => { } export const EmailConfirmationBanner: React.FC = ({ me, relay }) => { - const color = useColor() const [shouldDisplayBanner, toggleVisible] = useState(me?.canRequestEmailConfirmation) const [isLoading, setLoading] = useState(false) const [confirmed, setConfirmed] = useState(false) diff --git a/src/lib/Scenes/Home/Components/HomeHero.tsx b/src/lib/Scenes/Home/Components/HomeHero.tsx index 8efd9ec71f2..2d8653003c7 100644 --- a/src/lib/Scenes/Home/Components/HomeHero.tsx +++ b/src/lib/Scenes/Home/Components/HomeHero.tsx @@ -3,7 +3,7 @@ import { HomeHero_homePage } from "__generated__/HomeHero_homePage.graphql" import { navigate } from "lib/navigation/navigate" import { isPad } from "lib/utils/hardware" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Sans, useColor } from "palette" +import { color, Flex, Sans } from "palette" import React, { useState } from "react" import { Image, TouchableOpacity, View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -16,7 +16,6 @@ const useHeroDimensions = () => { } const HomeHero: React.FC<{ homePage: HomeHero_homePage }> = ({ homePage }) => { - const color = useColor() const tracking = useTracking() const [hasLoaded, setHasLoaded] = useState(false) const unit = homePage?.heroUnits?.[0] diff --git a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx index 6dbf4456144..d53e284569d 100644 --- a/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx +++ b/src/lib/Scenes/Home/Components/SaleArtworksHomeRail.tsx @@ -53,7 +53,7 @@ export const SaleArtworksHomeRail: React.FC = ({ me, relay, onShow, onHid navigate("/lots-by-artists-you-follow")} /> diff --git a/src/lib/Scenes/Home/Components/SalesRail.tsx b/src/lib/Scenes/Home/Components/SalesRail.tsx index d5285d20606..7af998c8cbb 100644 --- a/src/lib/Scenes/Home/Components/SalesRail.tsx +++ b/src/lib/Scenes/Home/Components/SalesRail.tsx @@ -1,3 +1,4 @@ +import { OwnerType } from "@artsy/cohesion" import { SalesRail_salesModule } from "__generated__/SalesRail_salesModule.graphql" import { CARD_RAIL_ARTWORKS_HEIGHT as ARTWORKS_HEIGHT, @@ -12,6 +13,8 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" import { formatDisplayTimelyAt } from "lib/Scenes/Sale/helpers" import { extractNodes } from "lib/utils/extractNodes" +import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" +import { screen } from "lib/utils/track/helpers" import { compact } from "lodash" import { bullet, Flex, Sans } from "palette" import React, { useImperativeHandle, useRef } from "react" @@ -46,75 +49,83 @@ const SalesRail: React.FC = (props) => { } return ( - - - { - tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) - navigate("/auctions") - }} - /> - - - listRef={listRef} - data={props.salesModule.results} - renderItem={({ item: result, index }) => { - // Sales are expected to always have >= 2 artworks, but we should - // still be cautious to avoid crashes if this assumption is broken. - const availableArtworkImageURLs = compact( - extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) - ) + + + + { + tracking.trackEvent(HomeAnalytics.auctionHeaderTapEvent()) + navigate("/auctions") + }} + /> + + + listRef={listRef} + data={props.salesModule.results} + renderItem={({ item: result, index }) => { + // Sales are expected to always have >= 2 artworks, but we should + // still be cautious to avoid crashes if this assumption is broken. + const availableArtworkImageURLs = compact( + extractNodes(result?.saleArtworksConnection, (artwork) => artwork.artwork?.image?.url) + ) - // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 - const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { - return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] - }, []) + // Ensure we have an array of exactly 3 URLs, copying over the last image if we have less than 3 + const artworkImageURLs = [null, null, null].reduce((acc: string[], _, i) => { + return [...acc, availableArtworkImageURLs[i] || acc[i - 1]] + }, []) - return ( - { - tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) - const url = result?.liveURLIfOpen ?? result?.href - if (url) { - navigate(url) - } - }} - > - - - - - - - - - - - - - {result?.name} - - - {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} - - - - - ) - }} - /> - + return ( + { + tracking.trackEvent(HomeAnalytics.auctionThumbnailTapEvent(result?.internalID, result?.slug, index)) + const url = result?.liveURLIfOpen ?? result?.href + if (url) { + navigate(url) + } + }} + > + + + + + + + + + + + + + {result?.name} + + + {getSaleSubtitle(result?.liveStartAt, result?.displayTimelyAt).trim()} + + + + + ) + }} + /> + + ) } diff --git a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx index d4e6bbd803c..c380b2b149e 100644 --- a/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx +++ b/src/lib/Scenes/Home/Components/__tests__/SaleArtworksHomeRail-tests.tsx @@ -48,7 +48,7 @@ describe("SaleArtworksHomeRail", () => { await flushPromiseQueue() expect(onShowMock).toHaveBeenCalled() - expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction Lots for You Ending Soon") + expect(tree.root.findAllByType(SectionTitle)[0].props.title).toEqual("Auction lots for you ending soon") expect(tree.root.findAllByType(SaleArtworkTileRailCardContainer)).toHaveLength(PAGE_SIZE) }) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx index 74f99630375..79841fde1e0 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Composer.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { Composer_conversation } from "__generated__/Composer_conversation.graphql" import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingView" import colors from "lib/data/colors" import { Schema, Track, track as _track } from "lib/utils/track" -import { Button, ClassTheme, Flex, themeProps } from "palette" +import { Button, color, Flex, themeProps } from "palette" import React from "react" import { Keyboard, TextInput, TouchableWithoutFeedback } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -19,7 +18,7 @@ const Container = styled.View` justify-content: space-between; align-items: flex-start; border-top-width: 1; - border-top-color: ${themeGet("colors.black10")}; + border-top-color: ${color("black10")}; padding: 10px; background-color: ${(p: ContainerProps) => (p.active ? "white" : colors["gray-light"])}; ` @@ -74,50 +73,45 @@ export default class Composer extends React.Component { render() { const disableSendButton = !(this.state.text && this.state.text.length) || this.props.disabled + // The TextInput loses its isFocused() callback as a styled component + const inputStyles = { + flex: 1, + fontSize: 13, + paddingLeft: 10, + paddingTop: 13, + paddingBottom: 10, + paddingRight: 10, + borderColor: this.state.active ? color("purple100") : "transparent", + borderWidth: 1, + fontFamily: themeProps.fontFamily.sans.regular.normal, + } + return ( - - {({ color }) => { - // The TextInput loses its isFocused() callback as a styled component - const inputStyles = { - flex: 1, - fontSize: 13, - paddingLeft: 10, - paddingTop: 13, - paddingBottom: 10, - paddingRight: 10, - borderColor: this.state.active ? color("purple100") : "transparent", - borderWidth: 1, - fontFamily: themeProps.fontFamily.sans.regular.normal, - } - return ( - - {this.props.children} - - - - this.setState({ active: false })} - onFocus={() => this.setState({ active: this.input.isFocused() })} - onChangeText={(text) => this.setState({ text })} - ref={(input) => (this.input = input)} - style={inputStyles} - multiline={true} - value={this.state.text || undefined} - /> - - - - - - - ) - }} - + + {this.props.children} + + + + this.setState({ active: false })} + onFocus={() => this.setState({ active: this.input.isFocused() })} + onChangeText={(text) => this.setState({ text })} + ref={(input) => (this.input = input)} + style={inputStyles} + multiline={true} + value={this.state.text || undefined} + /> + + + + + + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx index 942d50e445c..e2f61933038 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/ConversationSnippet.tsx @@ -9,7 +9,7 @@ import { Colors } from "lib/data/colors" import styled from "styled-components/native" import { ConversationSnippet_conversation } from "__generated__/ConversationSnippet_conversation.graphql" -import { ClassTheme, Flex, Sans, Touchable } from "palette" +import { color, Flex, Sans, Touchable } from "palette" const Unread = styled(Flex)` height: 14; @@ -89,57 +89,58 @@ export class ConversationSnippet extends React.Component { // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 const date = moment(conversation.lastMessageAt).fromNow(true) + " ago" return ( - - {({ color }) => ( - this.conversationSelected()} underlayColor={color("black5")}> - - - - {!!conversation.unread && ( - - - - )} - + this.conversationSelected()} underlayColor={color("black5")}> + + + + {!!conversation.unread && ( + + + + )} + + + + + + + {partnerName} + - - - - - {partnerName} - - - - - - {date} - - - - {!!conversationText && ( - - {conversationText} - - )} + + + + {date} + + {!!conversationText && ( + + {conversationText} + + )} - - )} - + + + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx index dbc6843bf52..b661fe19d04 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Conversations.tsx @@ -16,7 +16,7 @@ import { extractNodes } from "lib/utils/extractNodes" import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" import { screen } from "lib/utils/track/helpers" import { ActionNames, ActionTypes } from "lib/utils/track/schema" -import { Flex, Sans, Separator, useColor } from "palette" +import { color, Flex, Sans, Separator } from "palette" import { useTracking } from "react-tracking" interface Props { @@ -31,7 +31,6 @@ type Item = NonNullable = (props) => { - const color = useColor() const [isLoading, setIsLoading] = React.useState(false) const [isFetching, setIsFetching] = React.useState(false) const { trackEvent } = useTracking() diff --git a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx index 31b5b619335..72d4f30a588 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/EditionSelectBox.tsx @@ -1,5 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" -import { BorderBox, Flex, Text, Touchable, useColor } from "palette" +import { BorderBox, color, Flex, Text, Touchable } from "palette" import React from "react" import { View } from "react-native" import styled from "styled-components/native" @@ -10,12 +9,11 @@ const UnavailableIndicator = styled(View)` height: 8px; width: 8px; border-radius: 4px; - background-color: ${themeGet("colors.red100")}; + background-color: ${color("red100")}; margin-right: 6px; ` export const RadioButton: React.FC<{ selected: boolean }> = (props) => { - const color = useColor() const { selected } = props return ( { message: Message_message showTimeSince?: boolean @@ -90,39 +95,25 @@ export class Message extends React.Component { render() { const { message, showTimeSince } = this.props const { isFromUser, body } = message + const backgroundColor = color(isFromUser ? "black100" : "black10") const textColor = isFromUser ? "white100" : "black100" const alignSelf = isFromUser ? "flex-end" : undefined const alignAttachments = isFromUser ? "flex-end" : "flex-start" return ( - - {({ color }) => { - const backgroundColor = color(isFromUser ? "black100" : "black10") - const linkStyle = { - color: color("purple100"), - textDecorationLine: "underline", - } - return ( - <> - - - - - {body} - - - - {!!message.attachments?.length && } - {this.renderAttachmentPreviews(message.attachments, backgroundColor)} - - {!!showTimeSince && } - - ) - }} - + <> + + + + + {body} + + + + {!!message.attachments?.length && } + {this.renderAttachmentPreviews(message.attachments, backgroundColor)} + + {showTimeSince && } + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx index 48bbdbc3d45..68ff97360a3 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/OfferIcon.tsx @@ -1,15 +1,12 @@ -import { IconProps, useColor } from "palette" +import { color, IconProps } from "palette" import React from "react" import Svg, { Path } from "react-native-svg" -export const OfferIcon: React.FC = (props) => { - const color = useColor() - return ( - - - - ) -} +export const OfferIcon: React.FC = (props) => ( + + + +) diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx index cf325b8cba4..5ec06e9b5f5 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ArtworkPreview.tsx @@ -5,20 +5,19 @@ import styled from "styled-components/native" import { ArtworkPreview_artwork } from "__generated__/ArtworkPreview_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { Colors } from "lib/data/colors" -import { Flex, Text, Touchable } from "palette" +import { color, Flex, Text, Touchable } from "palette" -import { themeGet } from "@styled-system/theme-get" import { Schema, Track, track as _track } from "lib/utils/track" const Container = styled.View` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx index 71a5942db7d..7cd4704783d 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/AttachmentPreview.tsx @@ -4,7 +4,7 @@ import { createFragmentContainer, graphql } from "react-relay" import styled from "styled-components/native" import { AttachmentPreview_attachment } from "__generated__/AttachmentPreview_attachment.graphql" -import { ClassTheme, Touchable } from "palette" +import { color, Touchable } from "palette" const Container = styled.View` flex-direction: column; @@ -26,16 +26,12 @@ export class AttachmentPreview extends React.Component { render() { const { attachment, children, onSelected } = this.props return ( - - {({ color }) => ( - onSelected?.(findNodeHandle(this)!, attachment.internalID)} - > - {children} - - )} - + onSelected?.(findNodeHandle(this)!, attachment.internalID)} + > + {children} + ) } } diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx index a0edca466da..471ec8b566f 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/Attachment/FileDownload.tsx @@ -14,7 +14,6 @@ export const NoBorderContainer = styled.View` flex: 1; flex-direction: row; ` - interface Props extends AttachmentProps { attachment: FileDownload_attachment tiny?: boolean diff --git a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx index 07dc39cb531..b30763b92ad 100644 --- a/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx +++ b/src/lib/Scenes/Inbox/Components/Conversations/Preview/ShowPreview.tsx @@ -1,24 +1,25 @@ -import { Schema, Track, track as _track } from "lib/utils/track" -import { Flex, Text, Touchable } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" +import { Schema, Track, track as _track } from "lib/utils/track" + +import { color, Flex, Text, Touchable } from "palette" + import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import colors from "lib/data/colors" import styled from "styled-components/native" -import { themeGet } from "@styled-system/theme-get" import { ShowPreview_show } from "__generated__/ShowPreview_show.graphql" const Container = styled.View` - background-color: ${themeGet("colors.black100")}; + background-color: ${color("black100")}; border-radius: 15; overflow: hidden; margin-bottom: 5; ` const ImageContainer = styled(Flex)` - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; padding: 10px; flex: 1; ` diff --git a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx index 9109885b1a9..848084fbfe1 100644 --- a/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx +++ b/src/lib/Scenes/Inbox/Screens/ConversationDetails.tsx @@ -108,7 +108,7 @@ export const ConversationDetailsFragmentContainer = createFragmentContainer(Conv `, }) -export const ConversationDetailsQueryRenderer: React.FC<{ +export const ConversationDetailsQueryRenderer: React.SFC<{ conversationID: string }> = ({ conversationID }) => { return ( diff --git a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx index f0c953a1977..e71a22496f2 100644 --- a/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx +++ b/src/lib/Scenes/Map/Components/CitySwitcherButton.tsx @@ -1,7 +1,7 @@ import Spinner from "lib/Components/Spinner" import ChevronIcon from "lib/Icons/ChevronIcon" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" -import { Box, ClassTheme, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { Component } from "react" import { TouchableWithoutFeedback } from "react-native" import styled from "styled-components/native" @@ -32,47 +32,42 @@ export class CitySwitcherButton extends Component { render() { const { city, isLoading, sponsoredContentUrl } = this.props return isLoading || city ? ( - - {({ color }) => ( - { - if (this.props.onPress) { - this.props.onPress() - } - LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { - ...(sponsoredContentUrl && { sponsoredContentUrl }), - }) - }} - > - - {city ? ( - <> - - {city.name} - - - {/* @ts-ignore */} - - - - ) : ( - - - - )} - - - )} - + { + if (this.props.onPress) { + this.props.onPress() + } + LegacyNativeModules.ARNotificationsManager.postNotificationName("ARLocalDiscoveryOpenCityPicker", { + ...(sponsoredContentUrl && { sponsoredContentUrl }), + }) + }} + > + + {city ? ( + <> + + {city.name} + + + + + + ) : ( + + + + )} + + ) : null } } diff --git a/src/lib/Scenes/Map/Components/ShowCard.tsx b/src/lib/Scenes/Map/Components/ShowCard.tsx index afcd7f7cf87..cec5de63032 100644 --- a/src/lib/Scenes/Map/Components/ShowCard.tsx +++ b/src/lib/Scenes/Map/Components/ShowCard.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { ShowItemRow } from "lib/Components/Lists/ShowItemRow" import { navigate } from "lib/navigation/navigate" import { TabFairItemRow } from "lib/Scenes/City/Components/TabFairItemRow" import { isEqual } from "lodash" -import { Box, ClassTheme, Sans } from "palette" +import { Box, color, Sans, space } from "palette" import React, { Component } from "react" import { Dimensions, FlatList, TouchableOpacity } from "react-native" import { RelayProp } from "react-relay" @@ -18,7 +17,7 @@ const shadowDetails: any = { } const Background = styled(Box)` - background: ${themeGet("colors.white100")}; + background: ${color("white100")}; height: 82; border-radius: 2px; ` @@ -36,9 +35,9 @@ interface ShowCardState { } const PageIndicator = styled(Box)` - height: ${themeGet("space.2")}px; - border-radius: ${themeGet("space.1")}px; - background: ${themeGet("colors.white100")}; + height: ${space(2)}px; + border-radius: ${space(1)}px; + background: ${color("white100")}; margin-left: 15px; margin-right: auto; margin-top: -15px; @@ -148,32 +147,28 @@ export class ShowCard extends Component { return hasOne ? ( show && this.renderItem({ item: show }, true) ) : ( - - {({ space }) => ( - <> - - {`${currentPage} of ${shows.length}`} - - (this.list = c as any)} - data={shows} - style={{ marginHorizontal: "auto" }} - renderItem={this.renderItem} - keyExtractor={(item) => item.id} - onScroll={this.onScroll} - showsHorizontalScrollIndicator={false} - snapToInterval={this.cardWidth + space(1)} - contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} - scrollEventThrottle={299} - directionalLockEnabled={true} - overScrollMode="always" - snapToAlignment="start" - decelerationRate="fast" - horizontal - /> - - )} - + <> + + {`${currentPage} of ${shows.length}`} + + (this.list = c as any)} + data={shows} + style={{ marginHorizontal: "auto" }} + renderItem={this.renderItem} + keyExtractor={(item) => item.id} + onScroll={this.onScroll} + showsHorizontalScrollIndicator={false} + snapToInterval={this.cardWidth + space(1)} + contentContainerStyle={{ paddingLeft: space(0.5), paddingRight: space(2) + space(0.3) }} + scrollEventThrottle={299} + directionalLockEnabled={true} + overScrollMode="always" + snapToAlignment="start" + decelerationRate="fast" + horizontal + /> + ) } } diff --git a/src/lib/Scenes/Map/Components/UserPositionButton.tsx b/src/lib/Scenes/Map/Components/UserPositionButton.tsx index 7c30823328e..dd2759009f7 100644 --- a/src/lib/Scenes/Map/Components/UserPositionButton.tsx +++ b/src/lib/Scenes/Map/Components/UserPositionButton.tsx @@ -1,5 +1,5 @@ import Crosshair from "lib/Icons/Crosshair" -import { Box, Flex } from "palette" +import { Box, color, Flex } from "palette" import React, { Component } from "react" import { TouchableOpacity } from "react-native" import styled from "styled-components/native" @@ -37,7 +37,7 @@ export class UserPositionButton extends Component { - + diff --git a/src/lib/Scenes/Map/GlobalMap.tsx b/src/lib/Scenes/Map/GlobalMap.tsx index 9c4d7f4c955..bb0852a34c7 100644 --- a/src/lib/Scenes/Map/GlobalMap.tsx +++ b/src/lib/Scenes/Map/GlobalMap.tsx @@ -10,7 +10,7 @@ import { convertCityToGeoJSON, fairToGeoCityFairs, showsToGeoCityShow } from "li import { extractNodes } from "lib/utils/extractNodes" import { Schema, screenTrack, track } from "lib/utils/track" import { get, isEqual, uniq } from "lodash" -import { Box, ClassTheme, Flex, Sans, Theme } from "palette" +import { Box, color, Flex, Sans, Theme } from "palette" import React from "react" import { Animated, Dimensions, Easing, Image, View } from "react-native" import Config from "react-native-config" @@ -376,22 +376,18 @@ export class GlobalMap extends React.Component { clusterLat && clusterLng && pointCount && ( - - {({ color }) => ( - - - - {pointCount} - - - - )} - + + + + {pointCount} + + + ) ) } diff --git a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx index 5cee135f906..99503f235bf 100644 --- a/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx +++ b/src/lib/Scenes/MyAccount/Components/MyAccountFieldEditScreen.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import LoadingModal from "lib/Components/Modals/LoadingModal" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" import { goBack } from "lib/navigation/navigate" -import { Text } from "palette" +import { Sans } from "palette" import React, { useImperativeHandle, useRef, useState } from "react" import { Alert, @@ -26,14 +26,13 @@ export interface MyAccountFieldEditScreenProps { title: string canSave: boolean contentContainerStyle?: ViewStyle - isSaveButtonVisible?: boolean - onSave?(dismiss: () => void, alert: AlertStatic["alert"]): Promise | undefined + onSave(dismiss: () => void, alert: AlertStatic["alert"]): Promise } export const MyAccountFieldEditScreen = React.forwardRef< { scrollToEnd(): void }, React.PropsWithChildren ->(({ children, canSave, onSave, isSaveButtonVisible, title, contentContainerStyle }, ref) => { +>(({ children, canSave, onSave, title, contentContainerStyle }, ref) => { const [isSaving, setIsSaving] = useState(false) const afterLoadingAlert = useRef() const scrollViewRef = useRef(null) @@ -50,9 +49,7 @@ export const MyAccountFieldEditScreen = React.forwardRef< Keyboard.dismiss() try { setIsSaving(true) - if (!(isSaveButtonVisible === false) && onSave) { - await onSave(goBack, doTheAlert) - } + await onSave(goBack, doTheAlert) } catch (e) { console.error(e) } finally { @@ -80,20 +77,18 @@ export const MyAccountFieldEditScreen = React.forwardRef< - + Cancel - + } title={title} right={ - !(isSaveButtonVisible === false) && ( - - - Save - - - ) + + + Save + + } > = ({ children, title }) => ( - - {children} - -) +export const MyAccountFieldEditScreenPlaceholder: React.FC<{ title: string }> = ({ children, title }) => { + return ( + null}> + {children} + + ) +} diff --git a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx index 6bd73dfec3a..764e2f22aa7 100644 --- a/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx +++ b/src/lib/Scenes/MyCollection/Screens/Artwork/Components/MyCollectionArtworkHeader.tsx @@ -5,7 +5,7 @@ import { navigate } from "lib/navigation/navigate" import { ScreenMargin } from "lib/Scenes/MyCollection/Components/ScreenMargin" import { Image } from "lib/Scenes/MyCollection/State/MyCollectionArtworkModel" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { ArtworkIcon, Flex, Spacer, Text, useColor } from "palette" +import { ArtworkIcon, color, Flex, Spacer, Text } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import { createRefetchContainer, graphql, RelayRefetchProp } from "react-relay" @@ -18,7 +18,6 @@ interface MyCollectionArtworkHeaderProps { } export const MyCollectionArtworkHeader: React.FC = (props) => { - const color = useColor() const { artwork: { artistNames, date, images, internalID, title, slug }, relay, diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx index a1f07e12165..4e70d336852 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Components/Dimensions.tsx @@ -1,11 +1,10 @@ import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { useArtworkForm } from "lib/Scenes/MyCollection/Screens/ArtworkFormModal/Form/useArtworkForm" -import { Flex, Sans, Spacer, useSpace } from "palette" +import { Flex, Sans, space, Spacer } from "palette" import React, { useRef } from "react" export const Dimensions: React.FC = () => { - const space = useSpace() const { formik } = useArtworkForm() const metricInputRef = useRef>(null) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx index 5a104afb245..b61d2180672 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAddPhotos.tsx @@ -8,7 +8,7 @@ import { isPad } from "lib/utils/hardware" import { showPhotoActionSheet } from "lib/utils/requestPhotos" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { chunk } from "lodash" -import { AddIcon, BorderBox, Box, Flex, useColor, XCircleIcon } from "palette" +import { AddIcon, BorderBox, Box, color, Flex, XCircleIcon } from "palette" import React from "react" import { Image, ScrollView, TouchableOpacity } from "react-native" import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" @@ -57,7 +57,6 @@ export const MyCollectionAddPhotos: React.FC = ({ imageSize }) => { - const color = useColor() const artworkActions = GlobalStore.actions.myCollection.artwork const { showActionSheetWithOptions } = useActionSheet() diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx index 5cae184343e..48843eaccf5 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkFormModal/Screens/MyCollectionArtworkFormAdditionalDetails.tsx @@ -4,7 +4,7 @@ import { FancyModalHeader } from "lib/Components/FancyModal/FancyModalHeader" import { Input } from "lib/Components/Input/Input" import { Select } from "lib/Components/Select" import { TextArea } from "lib/Components/TextArea" -import { Flex, Join, Sans, Spacer, useSpace } from "palette" +import { Flex, Join, Sans, space, Spacer } from "palette" import React, { useRef, useState } from "react" import { ScrollView } from "react-native-gesture-handler" import { useArtworkForm } from "../Form/useArtworkForm" @@ -13,7 +13,6 @@ import { ArtworkFormModalScreen } from "../MyCollectionArtworkFormModal" export const MyCollectionAdditionalDetailsForm: React.FC<{ navigation: NavigationProp }> = ({ navigation, }) => { - const space = useSpace() const { formik } = useArtworkForm() const formikValues = formik?.values const [isEdition, setIsEdition] = useState(formikValues?.isEdition) diff --git a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx index 6b4de573cc2..4e615576445 100644 --- a/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx +++ b/src/lib/Scenes/MyCollection/Screens/ArtworkList/MyCollectionArtworkListItem.tsx @@ -1,5 +1,4 @@ import { tappedCollectedArtwork } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { MyCollectionArtworkListItem_artwork } from "__generated__/MyCollectionArtworkListItem_artwork.graphql" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { navigate } from "lib/navigation/navigate" @@ -7,7 +6,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { artworkMediumCategories } from "lib/utils/artworkMediumCategories" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { capitalize } from "lodash" -import { Box, Flex, Sans, useColor } from "palette" +import { Box, color, Flex, Sans } from "palette" import React from "react" import { Image as RNImage } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -19,7 +18,6 @@ interface MyCollectionArtworkListItemProps { } const MyCollectionArtworkListItem: React.FC = ({ artwork }) => { - const color = useColor() const { trackEvent } = useTracking() const imageURL = artwork.images?.find((i: any) => i?.isDefault)?.url || (artwork.images && artwork.images[0]?.url) const { width } = useScreenDimensions() @@ -122,7 +120,7 @@ export const MyCollectionArtworkListItemFragmentContainer = createFragmentContai }) const TouchElement = styled.TouchableHighlight.attrs({ - underlayColor: themeGet("colors.white100"), + underlayColor: color("white100"), activeOpacity: 0.8, })`` diff --git a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx index dc33900cd6f..e8e207ea386 100644 --- a/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx +++ b/src/lib/Scenes/MyProfile/__tests__/MyProfilePushNotifications-tests.tsx @@ -114,9 +114,9 @@ describe(MyProfilePushNotificationsQueryRenderer, () => { // mockFetchNotificationPermissions.mockImplementationOnce(cb => cb(null, PushAuthorizationStatus.Denied)) // const tree = create( - // + // // - // + // // ) // expect(env.mock.getMostRecentOperation().request.node.operation.name).toBe("MyProfilePushNotificationsQuery") diff --git a/src/lib/Scenes/Onboarding/ForgotPassword.tsx b/src/lib/Scenes/Onboarding/ForgotPassword.tsx index b2637061c70..f14c52f3048 100644 --- a/src/lib/Scenes/Onboarding/ForgotPassword.tsx +++ b/src/lib/Scenes/Onboarding/ForgotPassword.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Button, Flex, Spacer, Text, useColor } from "palette" +import { Button, color, Flex, Spacer, Text } from "palette" import React, { useRef, useState } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -37,7 +37,6 @@ export const ForgotPasswordForm: React.FC = ({ dirty, isSubmitting, } = useFormikContext() - const color = useColor() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx index 01ef906dbda..ff3dbb762d8 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccount.tsx @@ -5,7 +5,7 @@ import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore, useEnvironment } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, Flex, Spacer, Text, Touchable, useColor } from "palette" +import { Box, Button, color, Flex, Spacer, Text, Touchable } from "palette" import React, { useEffect, useRef, useState } from "react" import { Alert, Animated, Linking, ScrollView } from "react-native" import * as Yup from "yup" @@ -161,7 +161,6 @@ export const OnboardingCreateAccountScreenWrapper: React.FC { - const color = useColor() return ( {} export const OnboardingCreateAccountEmail: React.FC = ({ route }) => { - const color = useColor() const { values, handleChange, errors, setErrors, handleSubmit } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx index 1aa99b2fad8..2575644b9fe 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountName.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,7 +13,6 @@ export interface OnboardingCreateAccountNameProps extends StackScreenProps {} export const OnboardingCreateAccountName: React.FC = ({ navigation }) => { - const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx index ad24cab7eca..c2b239fbb0f 100644 --- a/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingCreateAccount/OnboardingCreateAccountPassword.tsx @@ -1,7 +1,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useFormikContext } from "formik" import { Input } from "lib/Components/Input/Input" -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { OnboardingCreateAccountNavigationStack, @@ -13,7 +13,6 @@ interface OnboardingCreateAccountPasswordProps extends StackScreenProps {} export const OnboardingCreateAccountPassword: React.FC = ({ navigation }) => { - const color = useColor() const { values, handleSubmit, handleChange, errors, setErrors } = useFormikContext() return ( diff --git a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx index 799a557bdb1..d6d0c0aaa03 100644 --- a/src/lib/Scenes/Onboarding/OnboardingLogin.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingLogin.tsx @@ -4,7 +4,7 @@ import { Input } from "lib/Components/Input/Input" import { BackButton } from "lib/navigation/BackButton" import { GlobalStore } from "lib/store/GlobalStore" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Box, Button, Flex, Spacer, Text, useColor } from "palette" +import { Box, Button, color, Flex, Spacer, Text } from "palette" import React, { useEffect, useRef } from "react" import { ScrollView, View } from "react-native" import * as Yup from "yup" @@ -24,7 +24,6 @@ export const loginSchema = Yup.object().shape({ }) export const OnboardingLoginForm: React.FC = ({ navigation, route }) => { - const color = useColor() const { values, handleSubmit, diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx index fdde67093d3..430b0642ea0 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalization.tsx @@ -10,7 +10,7 @@ import { GlobalStore } from "lib/store/GlobalStore" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { compact, times } from "lodash" -import { Box, Button, Flex, Join, Spacer, Text, useColor, useSpace } from "palette" +import { Box, Button, color, Flex, Join, space, Spacer, Text } from "palette" import React, { useEffect, useRef, useState } from "react" import { FlatList, ScrollView, TouchableWithoutFeedback } from "react-native" import { SafeAreaView } from "react-native-safe-area-context" @@ -57,40 +57,36 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationLi relay: RelayRefetchProp } -const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => { - const color = useColor() - return ( - <> - - What artists do you collect? - - - Follow at least three artists you’re looking to collect or track so we can personalize your experience. - - - - - {/* Fake search Input */} - - - - - - - - - Search artists - - +const OnboardingPersonalizationListHeader = ({ navigateToModal }: { navigateToModal: () => void }) => ( + <> + + What artists do you collect? + + + Follow at least three artists you’re looking to collect or track so we can personalize your experience. + + + + + {/* Fake search Input */} + + + + + - - - - ) -} + + + Search artists + + + + + + +) export const OnboardingPersonalizationList: React.FC = ({ ...props }) => { - const space = useSpace() const popularArtists = compact(props.highlights.popularArtists) const animatedOpacitiesRef = useRef<{ [key: string]: Disappearable | null }>({}) const { safeAreaInsets } = useScreenDimensions() diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx index 425b03b7abc..86aa5be32f9 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationArtistListItem.tsx @@ -6,7 +6,7 @@ import { OnboardingPersonalizationModal_artists } from "__generated__/Onboarding import { followArtistMutation } from "lib/Components/ArtistListItem" import { navigate } from "lib/navigation/navigate" import { Schema, track } from "lib/utils/track" -import { Button, ClassTheme, EntityHeader, Flex, Touchable } from "palette" +import { Button, color, EntityHeader, Flex, Touchable } from "palette" import React from "react" import { StyleProp, TouchableWithoutFeedback, ViewStyle } from "react-native" import { RelayPaginationProp } from "react-relay" @@ -125,43 +125,40 @@ export class OnboardingPersonalizationArtistListItem extends React.Component - {({ color }) => ( - { - if (href && !disableNavigation) { - this.handleTap(href) - } - }} - underlayColor={color("black5")} - style={containerStyle} - > - - - - - - - - - - )} - + { + if (href && !disableNavigation) { + this.handleTap(href) + } + }} + underlayColor={color("black5")} + style={containerStyle} + useDefaultTouchable + > + + + + + + + + + ) } } diff --git a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx index 7fe1227038f..c0d986a7c6b 100644 --- a/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingPersonalization/OnboardingPersonalizationModal.tsx @@ -6,7 +6,7 @@ import { SearchInput } from "lib/Components/SearchInput" import { BackButton } from "lib/navigation/BackButton" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import { isEqual } from "lodash" -import { Flex, Spinner, Text, useSpace } from "palette" +import { Flex, space, Spinner, Text } from "palette" import React, { useEffect, useMemo, useRef, useState } from "react" import { FlatList } from "react-native" import { createPaginationContainer, graphql, QueryRenderer, RelayPaginationProp } from "react-relay" @@ -26,7 +26,6 @@ interface OnboardingPersonalizationListProps extends OnboardingPersonalizationMo } const OnboardingPersonalizationModal: React.FC = (props) => { - const space = useSpace() const [query, setQuery] = useState("") const flatListRef = useRef>(null) const [fetchingMoreData, setFetchingMoreData] = useState(false) diff --git a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx index 1b1eac058eb..b514f6fd772 100644 --- a/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx +++ b/src/lib/Scenes/Onboarding/OnboardingWelcome.tsx @@ -2,7 +2,7 @@ import { StackScreenProps } from "@react-navigation/stack" import { useAnimatedValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { ArtsyNativeModule } from "lib/NativeModules/ArtsyNativeModule" import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { Flex, Spacer, Text, Touchable, useTheme } from "palette" +import { color, Flex, space, Spacer, Text, Touchable } from "palette" import React, { useEffect } from "react" import { Dimensions, Image, Platform } from "react-native" import LinearGradient from "react-native-linear-gradient" @@ -18,7 +18,6 @@ const BUTTON_HEIGHT = 41 const imgProps = Image.resolveAssetSource(backgoundImage) export const OnboardingWelcome: React.FC = ({ navigation }) => { - const { color, space } = useTheme() const { width: screenWidth } = useScreenDimensions() const { safeAreaInsets } = useScreenDimensions() // useScreenDimensions() returns the window height instead of the screen diff --git a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx index 9f4c540b8a0..4dce2b650c0 100644 --- a/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx +++ b/src/lib/Scenes/OrderHistory/OrderDetails/Components/OrderDetailsPayment.tsx @@ -1,5 +1,5 @@ import { OrderDetailsPayment_order } from "__generated__/OrderDetailsPayment_order.graphql" -import { Box, CreditCardIcon, Flex, Text, useSpace } from "palette" +import { Box, CreditCardIcon, Flex, space, Text } from "palette" import React from "react" import { createFragmentContainer, graphql } from "react-relay" @@ -8,7 +8,6 @@ interface OrderDetailsPaymentProps { } const CreditCardDetails: React.FC = ({ order }) => { - const space = useSpace() const creditCard = order.creditCard || null return ( diff --git a/src/lib/Scenes/Partner/Components/PartnerMap.tsx b/src/lib/Scenes/Partner/Components/PartnerMap.tsx index 9d0317e6440..57a4c7cd3c5 100644 --- a/src/lib/Scenes/Partner/Components/PartnerMap.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerMap.tsx @@ -1,11 +1,10 @@ import { useActionSheet } from "@expo/react-native-action-sheet" import MapboxGL from "@react-native-mapbox-gl/maps" -import { themeGet } from "@styled-system/theme-get" import { PartnerMap_location } from "__generated__/PartnerMap_location.graphql" import { cityAndPostalCode, tappedOnMap } from "lib/Components/LocationMap" import { Pin } from "lib/Icons/Pin" import { ArtsyMapStyleURL } from "lib/Scenes/Map/GlobalMap" -import { Box, Flex, Sans, Serif, Spacer } from "palette" +import { Box, color, Flex, Sans, Serif, Spacer } from "palette" import React from "react" import { TouchableOpacity } from "react-native" import Config from "react-native-config" @@ -94,5 +93,5 @@ export const PartnerMapContainer = createFragmentContainer(PartnerMap, { const MapWrapper = styled(Flex)` border-width: 1px; - border-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; ` diff --git a/src/lib/Scenes/Partner/Components/PartnerShows.tsx b/src/lib/Scenes/Partner/Components/PartnerShows.tsx index 555e93a8ed7..84011d94dbb 100644 --- a/src/lib/Scenes/Partner/Components/PartnerShows.tsx +++ b/src/lib/Scenes/Partner/Components/PartnerShows.tsx @@ -1,4 +1,3 @@ -import { themeGet } from "@styled-system/theme-get" import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { useNativeValue } from "lib/Components/StickyTabPage/reanimatedHelpers" import { @@ -9,7 +8,7 @@ import { import { TabEmptyState } from "lib/Components/TabEmptyState" import { navigate } from "lib/navigation/navigate" import { extractNodes } from "lib/utils/extractNodes" -import { Box, ClassTheme, Flex, Sans, Spacer } from "palette" +import { Box, color, Flex, Sans, space, Spacer } from "palette" import React, { useContext, useState } from "react" import { ActivityIndicator, ImageBackground, TouchableWithoutFeedback, View } from "react-native" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" @@ -32,32 +31,26 @@ class ShowGridItem extends React.Component { render() { const { show, itemIndex } = this.props const showImageURL = show.coverImage && show.coverImage.url + const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } return ( - - {({ space }) => { - const styles = itemIndex % 2 === 0 ? { paddingRight: space(1) } : { paddingLeft: space(1) } - return ( - - - - {showImageURL ? ( - - ) : ( - - )} - - {show.name} - - {show.exhibitionPeriod} - - - - - - ) - }} - + + + + {showImageURL ? ( + + ) : ( + + )} + + {show.name} + + {show.exhibitionPeriod} + + + + + ) } } @@ -114,41 +107,37 @@ export const PartnerShows: React.FC<{ const tabIsActive = Boolean(useNativeValue(tabContext.tabIsActive, 0)) return ( - - {({ space }) => ( - - section.key.startsWith("chunk")) + 1} - windowSize={tabIsActive ? 5 : 1} - onEndReached={() => { - if (isLoadingMore || !relay.hasMore()) { - return - } - setIsLoadingMore(true) - relay.loadMore(PAGE_SIZE, (error) => { - if (error) { - // FIXME: Handle error - console.error("PartnerShows.tsx", error.message) - } - setIsLoadingMore(false) - }) - }} - refreshing={isLoadingMore} - contentContainerStyle={{ paddingTop: 20 }} - ListEmptyComponent={} - ListFooterComponent={ - - {isLoadingMore ? : null} - + + section.key.startsWith("chunk")) + 1} + windowSize={tabIsActive ? 5 : 1} + onEndReached={() => { + if (isLoadingMore || !relay.hasMore()) { + return + } + setIsLoadingMore(true) + relay.loadMore(PAGE_SIZE, (error) => { + if (error) { + // FIXME: Handle error + console.error("PartnerShows.tsx", error.message) } - /> - - )} - + setIsLoadingMore(false) + }) + }} + refreshing={isLoadingMore} + contentContainerStyle={{ paddingTop: 20 }} + ListEmptyComponent={} + ListFooterComponent={ + + {isLoadingMore ? : null} + + } + /> + ) } @@ -227,7 +216,7 @@ const GridItem = styled(Box)` const EmptyImage = styled(Box)` height: 120; - background-color: ${themeGet("colors.black10")}; + background-color: ${color("black10")}; ` GridItem.displayName = "GridItem" diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx index 777a00961ef..3059c5b95d9 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerLocationSection-tests.tsx @@ -1,5 +1,4 @@ import { PartnerLocationSection_partner } from "__generated__/PartnerLocationSection_partner.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { Theme } from "palette" import React from "react" @@ -24,11 +23,9 @@ describe("PartnerLoationSection", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx index 54b6b2b90fb..d5f9158ac80 100644 --- a/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx +++ b/src/lib/Scenes/Partner/Components/__tests__/PartnerShows-tests.tsx @@ -1,6 +1,5 @@ import { PartnerShows_partner } from "__generated__/PartnerShows_partner.graphql" import { PartnerShowsTestsQueryRawResponse } from "__generated__/PartnerShowsTestsQuery.graphql" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { renderRelayTree } from "lib/tests/renderRelayTree" import { cloneDeep } from "lodash" import { Theme } from "palette" @@ -16,11 +15,9 @@ describe("PartnerShows", () => { await renderRelayTree({ Component: (props: any) => { return ( - - - - - + + + ) }, query: graphql` diff --git a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx index fcec7667d50..78ddf037f09 100644 --- a/src/lib/Scenes/Sale/Components/SaleLotsList.tsx +++ b/src/lib/Scenes/Sale/Components/SaleLotsList.tsx @@ -1,5 +1,4 @@ import { OwnerType } from "@artsy/cohesion" -import { themeGet } from "@styled-system/theme-get" import { SaleLotsList_saleArtworksConnection } from "__generated__/SaleLotsList_saleArtworksConnection.graphql" import { SaleLotsList_unfilteredSaleArtworksConnection } from "__generated__/SaleLotsList_unfilteredSaleArtworksConnection.graphql" import { @@ -13,7 +12,7 @@ import { ORDERED_SALE_ARTWORK_SORTS } from "lib/Components/ArtworkFilter/Filters import { FilteredArtworkGridZeroState } from "lib/Components/ArtworkGrids/FilteredArtworkGridZeroState" import { InfiniteScrollArtworksGridContainer } from "lib/Components/ArtworkGrids/InfiniteScrollArtworksGrid" import { Schema } from "lib/utils/track" -import { Box, Flex, Sans } from "palette" +import { Box, color, Flex, Sans } from "palette" import React, { useCallback, useEffect, useState } from "react" import { createPaginationContainer, graphql, RelayPaginationProp } from "react-relay" import { useTracking } from "react-tracking" @@ -177,7 +176,7 @@ export const SaleLotsList: React.FC = ({ export const FilterTitle = styled(Sans)`` export const FilterDescription = styled(Sans)` - color: ${themeGet("colors.black60")}; + color: ${color("black60")}; ` export const SaleLotsListContainer = createPaginationContainer( diff --git a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx index 42dcaac35e1..5afaa8dfb73 100644 --- a/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx +++ b/src/lib/Scenes/SaleFAQ/SaleFAQ.tsx @@ -6,7 +6,7 @@ import { View } from "react-native" export const SaleFAQ: React.FC<{}> = () => { const saleFAQUrl = `${useEnvironment().webURL}/auction-faq` - const paddingTop = useScreenDimensions().safeAreaInsets.top * 3 + const paddingTop = useScreenDimensions().safeAreaInsets.top return ( diff --git a/src/lib/Scenes/Sales/__tests__/index-tests.tsx b/src/lib/Scenes/Sales/__tests__/index-tests.tsx index f855420b523..65e41029cc7 100644 --- a/src/lib/Scenes/Sales/__tests__/index-tests.tsx +++ b/src/lib/Scenes/Sales/__tests__/index-tests.tsx @@ -5,7 +5,6 @@ import "react-native" import { renderWithLayout } from "lib/tests/renderWithLayout" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { Theme } from "palette" import { SalesFragmentContainer } from "../index" @@ -20,11 +19,9 @@ it("renders the ZeroState when there are no sales", () => { it("doesn't throw when rendered", () => { expect(() => renderWithLayout( - - - - - , + + + , { width: 1000 } ) ).not.toThrow() diff --git a/src/lib/Scenes/Sales/index.tsx b/src/lib/Scenes/Sales/index.tsx index 53c577ecf94..76735bce481 100644 --- a/src/lib/Scenes/Sales/index.tsx +++ b/src/lib/Scenes/Sales/index.tsx @@ -1,4 +1,3 @@ -import { OwnerType } from "@artsy/cohesion" import { Sales_me } from "__generated__/Sales_me.graphql" import { Sales_sales } from "__generated__/Sales_sales.graphql" import { SalesQueryRendererQuery } from "__generated__/SalesQueryRendererQuery.graphql" @@ -7,8 +6,6 @@ import { Stack } from "lib/Components/Stack" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" -import { ProvideScreenTrackingWithCohesionSchema } from "lib/utils/track" -import { screen } from "lib/utils/track/helpers" import React from "react" import { RefreshControl, ScrollView } from "react-native" import { createRefetchContainer, graphql, QueryRenderer, RelayRefetchProp } from "react-relay" @@ -57,19 +54,17 @@ class Sales extends React.Component { const timedAuctions = sales.filter((a) => !a.live_start_at) return ( - - - } - > - - - - - - - - + + } + > + + + + + + + ) } } diff --git a/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx b/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx deleted file mode 100644 index 65180723bbb..00000000000 --- a/src/lib/Scenes/SavedAddresses/Components/AddAddressButton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Button, ButtonVariant } from "palette" -import React from "react" - -interface Props { - title: string - handleOnPress: () => void - disabled?: boolean - variant?: ButtonVariant - block?: boolean -} - -export const AddAddressButton: React.FC = (props) => { - const { handleOnPress, disabled, title, variant = "primaryBlack", block = true } = props - return ( - - ) -} diff --git a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx index d5a692fcf73..d1c69cb6407 100644 --- a/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx +++ b/src/lib/Scenes/SavedAddresses/SavedAddresses.tsx @@ -1,47 +1,31 @@ -import { captureMessage } from "@sentry/react-native" -import { themeGet } from "@styled-system/theme-get" import { SavedAddresses_me } from "__generated__/SavedAddresses_me.graphql" import { SavedAddressesQuery } from "__generated__/SavedAddressesQuery.graphql" import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" -import { navigate, navigationEvents } from "lib/navigation/navigate" import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import { PlaceholderText } from "lib/utils/placeholders" import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" import { times } from "lodash" -import { Box, Flex, Separator, Spacer, Text, Touchable } from "palette" -import React, { useCallback, useEffect, useState } from "react" +import { Button, color, Flex, Separator, Spacer, Text, Touchable } from "palette" +import React, { useCallback, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { createRefetchContainer, QueryRenderer, RelayRefetchProp } from "react-relay" import { graphql } from "relay-runtime" import styled from "styled-components/native" -import { AddAddressButton } from "./Components/AddAddressButton" -import { deleteSavedAddress } from "./mutations/deleteSavedAddress" - -interface CardProps { - isDefault: boolean -} const Card = styled(Flex)` - border: 1px solid - ${(props: CardProps) => (props.isDefault ? themeGet("colors.black100") : themeGet("colors.black30"))}; + border: 1px solid ${color("black30")}; border-radius: 4; ` -// tslint:disable-next-line:variable-name -const NUM_ADDRESSES_TO_FETCH = 10 - -// tslint:disable-next-line:no-empty -export const util = { onRefresh: () => {} } - const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }> = ({ me, relay }) => { const [isRefreshing, setIsRefreshing] = useState(false) const addresses = extractNodes(me.addressConnection) - util.onRefresh = useCallback(() => { + const onRefresh = useCallback(() => { setIsRefreshing(true) relay.refetch( {}, - { first: NUM_ADDRESSES_TO_FETCH }, + null, () => { setIsRefreshing(false) }, @@ -49,34 +33,15 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp ) }, []) - useEffect(() => { - navigationEvents.addListener("goBack", util.onRefresh) - return () => { - navigationEvents.removeListener("goBack", util.onRefresh) - } - }, []) - - const onPressEditAddress = (addressId: string) => - navigate("/my-profile/saved-addresses/edit-address", { - modal: true, - passProps: { - addressId, - }, - }) + const onPressEditAddress = () => null - const onPressDeleteAddress = (addressId: string) => { - deleteSavedAddress( - addressId, - () => relay.refetch({}), - (message: string) => captureMessage(message) - ) - } + const onPressDeleteAddress = () => null return ( } - data={addresses.sort((a, b) => Number(b?.isDefault) - Number(a?.isDefault))} + refreshControl={} + data={addresses} keyExtractor={(address) => address.internalID} contentContainerStyle={{ paddingTop: addresses.length === 0 ? 10 : 40, @@ -84,62 +49,47 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp }} renderItem={({ item }) => ( <> - - - - {item.name} - - - {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} - - - {item.city}, {item.postalCode} - - - - {item?.phoneNumber} - - - - - {!!item?.isDefault && Default Address} - - - onPressEditAddress(item.internalID)} - > - - Edit - - - onPressDeleteAddress(item.internalID)}> - - Delete - - - + + + {item.name} + + + {[item.addressLine1, item?.addressLine2, item?.addressLine3].filter(Boolean).join(", ")} + + + {item.city}, {item.postalCode} + + + + {item?.phoneNumber} + + + + + + + + + {/* TODO next task add default address label here */} + {/* Default Address */} - - - + + + + Edit + + + + + Delete + + + + + )} - ListFooterComponent={ - addresses.length ? ( - - navigate("/my-profile/saved-addresses/new-address", { modal: true })} - title="Add New Address" - /> - - ) : ( - <> - ) - } ListEmptyComponent={ @@ -148,10 +98,9 @@ const SavedAddresses: React.FC<{ me: SavedAddresses_me; relay: RelayRefetchProp Please add an address for a faster checkout experience in the future. - navigate("/my-profile/saved-addresses/new-address", { modal: true })} - title="Add New Address" - /> + } /> @@ -179,7 +128,7 @@ export const SavedAddressesContainer = createRefetchContainer( me: graphql` fragment SavedAddresses_me on Me { name - addressConnection(first: 10) { + addressConnection(first: 3) { edges { node { id @@ -188,12 +137,10 @@ export const SavedAddressesContainer = createRefetchContainer( addressLine1 addressLine2 addressLine3 - country city region postalCode phoneNumber - isDefault } } } diff --git a/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx b/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx deleted file mode 100644 index 01ab5f1cd90..00000000000 --- a/src/lib/Scenes/SavedAddresses/SavedAddressesForm.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import { captureMessage } from "@sentry/react-native" -import { SavedAddressesForm_me } from "__generated__/SavedAddressesForm_me.graphql" -import { SavedAddressesFormQuery } from "__generated__/SavedAddressesFormQuery.graphql" -import { Action, action, computed, Computed, createComponentStore } from "easy-peasy" -import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" -import { CountrySelect } from "lib/Components/CountrySelect" -import { Input } from "lib/Components/Input/Input" -import { PageWithSimpleHeader } from "lib/Components/PageWithSimpleHeader" -import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" -import { Stack } from "lib/Components/Stack" -import { goBack } from "lib/navigation/navigate" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { extractNodes } from "lib/utils/extractNodes" -import { PlaceholderBox, PlaceholderText } from "lib/utils/placeholders" -import { renderWithPlaceholder } from "lib/utils/renderWithPlaceholder" -import { useScreenDimensions } from "lib/utils/useScreenDimensions" -import { times } from "lodash" -import { Flex, Text } from "palette" -import React, { useEffect, useRef, useState } from "react" -import { Alert } from "react-native" -import { createFragmentContainer, graphql, QueryRenderer } from "react-relay" -import { MyAccountFieldEditScreen } from "../MyAccount/Components/MyAccountFieldEditScreen" -import { AddAddressButton } from "./Components/AddAddressButton" -import { createUserAddress } from "./mutations/addNewAddress" -import { setAsDefaultAddress } from "./mutations/setAsDefaultAddress" -import { updateUserAddress } from "./mutations/updateUserAddress" - -interface FormField { - value: Type | null - touched: boolean - required: boolean - isPresent: Computed - setValue: Action -} - -const emptyFieldState: () => FormField = () => ({ - value: null, - touched: false, - required: true, - isPresent: computed((self) => { - if (!self.required) { - return true - } else { - return self.value !== null && (typeof self.value !== "string" || !!self.value) - } - }), - setValue: action((state, payload) => { - state.value = payload - }), -}) - -interface FormFields { - addressLine1: FormField - addressLine2: FormField - city: FormField - country: FormField - name: FormField - postalCode: FormField - region: FormField -} - -interface Store { - fields: FormFields - allPresent: Computed -} - -const useStore = createComponentStore({ - fields: { - name: emptyFieldState(), - country: emptyFieldState(), - postalCode: emptyFieldState(), - addressLine1: emptyFieldState(), - addressLine2: { ...emptyFieldState(), required: false }, - city: emptyFieldState(), - region: emptyFieldState(), - }, - allPresent: computed((store) => { - return Boolean(Object.keys(store.fields).every((k) => store.fields[k as keyof FormFields].isPresent)) - }), -}) - -export const SavedAddressesForm: React.FC<{ me: SavedAddressesForm_me; addressId?: string }> = ({ me, addressId }) => { - const isEditForm = !!addressId - - const [state, actions] = useStore() - const [phoneNumber, setPhoneNumber] = useState(me?.phone) - const [isDefaultAddress, setIsDefaultAddress] = useState(false) - const { height } = useScreenDimensions() - const offSetTop = 0.75 - - useEffect(() => { - setPhoneNumber(me?.phone) - }, [me?.phone]) - - useEffect(() => { - if (isEditForm) { - const addresses = extractNodes(me.addressConnection) - const selectedAddress = addresses!.find((address) => address.internalID === addressId) - Object.keys(actions.fields).forEach((field) => { - const fieldValue = selectedAddress?.[field as keyof FormFields] ?? "" - actions.fields[field as keyof FormFields].setValue(fieldValue) - }) - setIsDefaultAddress(!!selectedAddress?.isDefault) - } - }, []) - - const screenRef = useRef(null) - - const submitAddAddress = async () => { - try { - const creatingResponse = await createUserAddress({ - name: state.fields.name.value!, - country: state.fields.country.value!, - postalCode: state.fields.postalCode.value, - addressLine1: state.fields.addressLine1.value!, - addressLine2: state.fields.addressLine2.value, - city: state.fields.city.value!, - region: state.fields.region.value, - phoneNumber, - }) - - if (isDefaultAddress) { - await setAsDefaultAddress(creatingResponse.createUserAddress?.userAddressOrErrors.internalID!) - } - goBack() - } catch (e) { - captureMessage(e.stack) - Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") - } - } - - const editUserAddress = async (userAddressID: string) => { - try { - const response = await updateUserAddress(userAddressID, { - name: state.fields.name.value!, - country: state.fields.country.value!, - postalCode: state.fields.postalCode.value, - addressLine1: state.fields.addressLine1.value!, - addressLine2: state.fields.addressLine2.value, - city: state.fields.city.value!, - region: state.fields.region.value, - phoneNumber, - }) - - if (isDefaultAddress) { - await setAsDefaultAddress(response.updateUserAddress?.userAddressOrErrors.internalID!) - } - goBack() - } catch (e) { - Alert.alert("Something went wrong while attempting to save your address. Please try again or contact us.") - captureMessage(e.stack) - } - } - - return ( - - - - - - - - - - - { - setIsDefaultAddress(!isDefaultAddress) - }} - checked={isDefaultAddress} - mb={4} - > - Set as default - - - editUserAddress(addressId!) : submitAddAddress} - title={isEditForm ? "Add" : "Add Address"} - disabled={!state.allPresent} - /> - - - ) -} - -export const SavedAddressesFormContainer = createFragmentContainer(SavedAddressesForm, { - me: graphql` - fragment SavedAddressesForm_me on Me { - id - phone - addressConnection(first: 3) { - edges { - node { - internalID - name - addressLine1 - addressLine2 - addressLine3 - country - city - region - postalCode - isDefault - } - } - } - } - `, -}) - -export const SavedAddressesFormPlaceholder: React.FC<{ addressId?: string }> = (props) => { - return ( - - - {times(5).map((index: number) => ( - - - - - ))} - - - ) -} - -export const SavedAddressesFormQueryRenderer: React.FC<{}> = (props) => ( - - environment={defaultEnvironment} - query={graphql` - query SavedAddressesFormQuery { - me { - ...SavedAddressesForm_me - } - } - `} - render={renderWithPlaceholder({ - initialProps: props, - Container: SavedAddressesFormContainer, - renderPlaceholder: () => , - })} - variables={{}} - /> -) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx index 5ab48189055..722e83e3945 100644 --- a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx +++ b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddresses-tests.tsx @@ -1,12 +1,11 @@ import { SavedAddressesTestsQuery } from "__generated__/SavedAddressesTestsQuery.graphql" -import { navigate, navigationEvents } from "lib/navigation/navigate" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Button, Flex } from "palette" +import { Flex } from "palette" import React from "react" import { graphql, QueryRenderer } from "react-relay" import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" -import { SavedAddressesContainer, SavedAddressesQueryRenderer, util } from "../SavedAddresses" +import { SavedAddressesContainer, SavedAddressesQueryRenderer } from "../SavedAddresses" jest.unmock("react-relay") @@ -110,80 +109,4 @@ describe(SavedAddressesQueryRenderer, () => { expect(text).toContain("Edit") expect(text).toContain("Delete") }) - - it("testing add new address navigation", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - name: "saver", - addressConnection: { - edges: [], - }, - }), - }) - return result - }) - tree.findByType(Button).props.onPress() - expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/new-address", { modal: true }) - }) - - it("should navigate to edit address screen", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - name: "saver", - addressConnection: { - edges: [ - { - node: { - id: "VXNlckFkZHJlc3M6NTg0MA==", - internalID: "5840", - name: "George Tester", - addressLine1: "Stallschreiberstr 21", - addressLine2: "apt 61, 1st Floor", - addressLine3: null, - city: "Berlin", - region: "Mitte", - postalCode: "10179", - phoneNumber: "015904832846", - }, - }, - { - node: { - id: "VXNlckFkZHJlc3M6NTg2MQ==", - internalID: "5861", - name: "George Testing", - addressLine1: "401 Brodway", - addressLine2: "26th Floor", - addressLine3: null, - city: "New York", - region: "New York", - postalCode: "NY 10013", - phoneNumber: "1293581028945", - }, - }, - ], - }, - }), - }) - return result - }) - - const EditButton = tree.findByProps({ testID: "EditAddress-5861" }) - - EditButton.props.onPress() - expect(navigate).toHaveBeenCalledWith("/my-profile/saved-addresses/edit-address", { - modal: true, - passProps: { addressId: "5861" }, - }) - }) - - it("handles return to prev view with goBack event", () => { - const mockCallback = jest.fn(util.onRefresh) - navigationEvents.addListener("goBack", mockCallback) - navigationEvents.emit("goBack") - expect(mockCallback.mock.calls.length).toBe(1) - }) }) diff --git a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx b/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx deleted file mode 100644 index 0749eddecf9..00000000000 --- a/src/lib/Scenes/SavedAddresses/__tests__/SavedAddressesForm-tests.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import { SavedAddressesFormTestsQuery } from "__generated__/SavedAddressesFormTestsQuery.graphql" -import { Checkbox } from "lib/Components/Bidding/Components/Checkbox" -import { Input } from "lib/Components/Input/Input" -import { PhoneInput } from "lib/Components/PhoneInput/PhoneInput" -import { extractText } from "lib/tests/extractText" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import { Button } from "palette" -import React from "react" -import { graphql, QueryRenderer } from "react-relay" -import { createMockEnvironment, MockPayloadGenerator } from "relay-test-utils" -import { SavedAddressesFormContainer, SavedAddressesFormQueryRenderer } from "../SavedAddressesForm" - -jest.unmock("react-relay") - -describe(SavedAddressesFormQueryRenderer, () => { - let mockEnvironment: ReturnType - const TestRenderer = ({ addressId }: { addressId?: string }) => ( - - environment={mockEnvironment} - query={graphql` - query SavedAddressesFormTestsQuery { - me { - ...SavedAddressesForm_me - } - } - `} - render={({ props, error }) => { - if (props?.me) { - return - } else if (error) { - console.log(error) - } - }} - variables={{}} - /> - ) - beforeEach(() => { - mockEnvironment = createMockEnvironment() - }) - - it("render form screen", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - id: "some-id", - phone: "9379992", - addressConnection: { - edges: [], - }, - }), - }) - return result - }) - - expect(tree.findAllByType(Input).length).toEqual(7) - expect(tree.findAllByType(PhoneInput).length).toEqual(1) - expect(tree.findAllByType(Checkbox).length).toEqual(1) - expect(tree.findAllByType(Button).length).toEqual(1) - }) - - it("should display correct address data if it is Edit Address modal", () => { - const tree = renderWithWrappers().root - mockEnvironment.mock.resolveMostRecentOperation((operation) => { - const result = MockPayloadGenerator.generate(operation, { - Me: () => ({ - id: "some-id", - phone: "9379992", - addressConnection: { - edges: [ - { - node: { - id: "VXNlckFkZHJlc3M6NTg2MQ==", - internalID: "5861", - name: "George Testing", - addressLine1: "401 Broadway", - addressLine2: "26th Floor", - addressLine3: null, - city: "New York", - region: "New York", - postalCode: "NY 10013", - phoneNumber: "1293581028945", - }, - }, - ], - }, - }), - }) - return result - }) - const text = extractText(tree) - - expect(text).toContain("Edit Address") - }) -}) diff --git a/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts deleted file mode 100644 index a0a56be4355..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/addNewAddress.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - addNewAddressMutation, - addNewAddressMutationResponse, - UserAddressAttributes, -} from "__generated__/addNewAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const createUserAddress = (address: UserAddressAttributes) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - attributes: address, - }, - }, - mutation: graphql` - mutation addNewAddressMutation($input: CreateUserAddressInput!) { - createUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - addressLine1 - addressLine2 - city - country - isDefault - name - phoneNumber - postalCode - region - } - ... on Errors { - errors { - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.createUserAddress?.userAddressOrErrors.errors) { - reject(response.createUserAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts deleted file mode 100644 index cfe1f63921c..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/deleteSavedAddress.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { deleteSavedAddressDeleteUserAddressMutation } from "__generated__/deleteSavedAddressDeleteUserAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "relay-runtime" - -export const deleteSavedAddress = ( - userAddressID: string, - onSuccess: () => void, - onError: (message: string) => void -) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID, - }, - }, - mutation: graphql` - mutation deleteSavedAddressDeleteUserAddressMutation($input: DeleteUserAddressInput!) { - deleteUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - addressLine3 - city - region - postalCode - phoneNumber - isDefault - } - ... on Errors { - errors { - code - message - } - } - } - } - } - `, - onError: (e) => { - onError(e.message) - }, - onCompleted: (data) => { - const errors = data?.deleteUserAddress?.userAddressOrErrors.errors - if (errors) { - onError(errors.map((error) => error.message).join(", ")) - } else { - onSuccess() - } - }, - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts deleted file mode 100644 index 0f32d434e12..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/setAsDefaultAddress.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - setAsDefaultAddressMutation, - setAsDefaultAddressMutationResponse, - UpdateUserDefaultAddressInput, -} from "__generated__/setAsDefaultAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const setAsDefaultAddress = (id: UpdateUserDefaultAddressInput["userAddressID"]) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID: id, - }, - }, - mutation: graphql` - mutation setAsDefaultAddressMutation($input: UpdateUserDefaultAddressInput!) { - updateUserDefaultAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - isDefault - } - ... on Errors { - errors { - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.updateUserDefaultAddress?.userAddressOrErrors.errors) { - reject(response.updateUserDefaultAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts b/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts deleted file mode 100644 index 2914ca38e1e..00000000000 --- a/src/lib/Scenes/SavedAddresses/mutations/updateUserAddress.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { UserAddressAttributes } from "__generated__/addNewAddressMutation.graphql" -import { - updateUserAddressMutation, - updateUserAddressMutationResponse, -} from "__generated__/updateUserAddressMutation.graphql" -import { defaultEnvironment } from "lib/relay/createEnvironment" -import { commitMutation, graphql } from "react-relay" - -export const updateUserAddress = (userAddressID: string, address: UserAddressAttributes) => { - return new Promise((resolve, reject) => { - commitMutation(defaultEnvironment, { - variables: { - input: { - userAddressID, - attributes: address, - }, - }, - mutation: graphql` - mutation updateUserAddressMutation($input: UpdateUserAddressInput!) { - updateUserAddress(input: $input) { - userAddressOrErrors { - ... on UserAddress { - id - internalID - name - addressLine1 - addressLine2 - isDefault - phoneNumber - city - region - postalCode - country - } - ... on Errors { - errors { - code - message - } - } - } - } - } - `, - onCompleted: (response, err) => { - if (err?.length) { - reject(err) - } else if (response.updateUserAddress?.userAddressOrErrors.errors) { - reject(response.updateUserAddress.userAddressOrErrors.errors) - } else { - resolve(response) - } - }, - onError: (e) => { - reject(e.message) - }, - }) - }) -} diff --git a/src/lib/Scenes/Search/AutosuggestResults.tsx b/src/lib/Scenes/Search/AutosuggestResults.tsx index 4ca73eefa52..f30b22b064f 100644 --- a/src/lib/Scenes/Search/AutosuggestResults.tsx +++ b/src/lib/Scenes/Search/AutosuggestResults.tsx @@ -8,7 +8,7 @@ import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" import { isPad } from "lib/utils/hardware" -import { Flex, Text, useSpace } from "palette" +import { Flex, space, Text } from "palette" import { useCallback, useEffect, useMemo, useRef } from "react" import React from "react" import { FlatList } from "react-native" @@ -31,7 +31,6 @@ const AutosuggestResultsFlatList: React.FC<{ showResultType?: boolean onResultPress?: OnResultPress }> = ({ query, results: latestResults, relay, showResultType, onResultPress }) => { - const space = useSpace() const loadMore = useCallback(() => relay.loadMore(SUBSEQUENT_BATCH_SIZE), []) // We only want to load more results after the user has started scrolling, and unfortunately diff --git a/src/lib/Scenes/Search/CityGuideCTA.tsx b/src/lib/Scenes/Search/CityGuideCTA.tsx index 4009946fa7e..1fac5fda694 100644 --- a/src/lib/Scenes/Search/CityGuideCTA.tsx +++ b/src/lib/Scenes/Search/CityGuideCTA.tsx @@ -1,6 +1,6 @@ import { SectionTitle } from "lib/Components/SectionTitle" import { navigate } from "lib/navigation/navigate" -import { ClassTheme, Flex, Sans, Spacer } from "palette" +import { color, Flex, Sans, Spacer } from "palette" import React from "react" import { Image, TouchableOpacity } from "react-native" import { BMWSponsorship } from "../City/CityBMWSponsorship" @@ -9,28 +9,24 @@ export class CityGuideCTA extends React.Component { render() { const cityGuideMapImage = require("../../../../images/city-guide-bg.png") return ( - - {({ color }) => ( - - - navigate("/local-discovery")}> - - - - - City Guide - - - Browse fairs and shows in different cities - - - - - - + + + navigate("/local-discovery")}> + + + + + City Guide + + + Browse fairs and shows in different cities + + + + - )} - + + ) } } diff --git a/src/lib/Scenes/Search/Search.tsx b/src/lib/Scenes/Search/Search.tsx index 4f70df31d66..8e325aa3090 100644 --- a/src/lib/Scenes/Search/Search.tsx +++ b/src/lib/Scenes/Search/Search.tsx @@ -2,7 +2,7 @@ import { ArtsyKeyboardAvoidingView } from "lib/Components/ArtsyKeyboardAvoidingV import { SearchInput } from "lib/Components/SearchInput" import { isPad } from "lib/utils/hardware" import { Schema } from "lib/utils/track" -import { Flex, Spacer, useColor } from "palette" +import { color, Flex, Spacer } from "palette" import React, { useState } from "react" import { Platform, ScrollView } from "react-native" import { useTracking } from "react-tracking" @@ -20,7 +20,6 @@ const placeholders = [ ] export const Search: React.FC = () => { - const color = useColor() const [query, setQuery] = useState("") const { trackEvent } = useTracking() const searchProviderValues = useSearchProviderValues(query) diff --git a/src/lib/Scenes/Search/SearchResult.tsx b/src/lib/Scenes/Search/SearchResult.tsx index c6b4bb4758f..f5c7ca30fb2 100644 --- a/src/lib/Scenes/Search/SearchResult.tsx +++ b/src/lib/Scenes/Search/SearchResult.tsx @@ -1,11 +1,10 @@ -import { themeGet } from "@styled-system/theme-get" import GraphemeSplitter from "grapheme-splitter" import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" import { EntityType, navigate, navigateToEntity, navigateToPartner, SlugType } from "lib/navigation/navigate" import { GlobalStore } from "lib/store/GlobalStore" import { normalizeText } from "lib/utils/normalizeText" import { Schema } from "lib/utils/track" -import { ArtworkIcon, AuctionIcon, Box, CloseIcon, Flex, Sans, Spacer } from "palette" +import { ArtworkIcon, AuctionIcon, Box, CloseIcon, color, Flex, Sans, Spacer } from "palette" import React, { useContext } from "react" import { Pressable, Text, TouchableOpacity, View } from "react-native" import { useTracking } from "react-tracking" @@ -151,7 +150,7 @@ const QuickNavigationButton = styled(Flex)` justify-content: center; align-items: center; padding: 2px 10px; - border: 1px solid ${themeGet("colors.black30")}; + border: 1px solid ${color("black30")}; ` const splitter = new GraphemeSplitter() diff --git a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx index c7a3de56ba8..2a108ab0c9f 100644 --- a/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/AutosuggestResults-tests.tsx @@ -3,7 +3,6 @@ import { AutosuggestResultsQueryRawResponse } from "__generated__/AutosuggestRes import { AboveTheFoldFlatList } from "lib/Components/AboveTheFoldFlatList" import Spinner from "lib/Components/Spinner" import { defaultEnvironment } from "lib/relay/createEnvironment" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { extractText } from "lib/tests/extractText" import { renderWithWrappers } from "lib/tests/renderWithWrappers" import { CatchErrors } from "lib/utils/CatchErrors" @@ -104,13 +103,11 @@ const inputBlurMock = jest.fn() const TestWrapper: typeof AutosuggestResults = (props) => ( - - - - - - - + + + + + ) diff --git a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx index c836c336ba0..124ca171140 100644 --- a/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/RecentSearches-tests.tsx @@ -76,15 +76,13 @@ const anniAlbers: RecentSearch = { const TestPage = () => { return ( - - - - - - - - - + + + + + + + ) } diff --git a/src/lib/Scenes/Search/__tests__/Search-tests.tsx b/src/lib/Scenes/Search/__tests__/Search-tests.tsx index 7901f2d82d8..d345b1798c2 100644 --- a/src/lib/Scenes/Search/__tests__/Search-tests.tsx +++ b/src/lib/Scenes/Search/__tests__/Search-tests.tsx @@ -40,15 +40,13 @@ jest.mock("../RecentSearches", () => ({ const TestWrapper: typeof Search = (props) => { return ( - - - - - - - - - + + + + + + + ) } diff --git a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx index ac2cd7d009f..76e4b1c80ce 100644 --- a/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx +++ b/src/lib/Scenes/VanityURL/__tests__/VanityURLPossibleRedirect-tests.tsx @@ -20,7 +20,7 @@ describe(VanityURLPossibleRedirect, () => { it("shows a loading spinner before anything has happened", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/test", + url: "https://artsy.net/test", }) const tree = renderWithWrappers() expect(tree.root.findAllByType(Spinner)).toHaveLength(1) @@ -29,13 +29,13 @@ describe(VanityURLPossibleRedirect, () => { it("sends a fetch request", () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/test", + url: "https://artsy.net/test", }) renderWithWrappers() expect(fetchMock).toHaveBeenCalledTimes(1) expect(fetchMock.mock.calls[0]).toMatchInlineSnapshot(` Array [ - "https://www.artsy.net/test", + "https://artsy.net/test", Object { "headers": Object { "X-Access-Token": "authenticationToken", @@ -59,11 +59,11 @@ describe(VanityURLPossibleRedirect, () => { it("calls `navigate` when the redirect points to a native view", async () => { fetchMock.mockResolvedValueOnce({ ok: true, - url: "https://www.artsy.net/artist/banksy", + url: "https://artsy.net/artist/banksy", }) renderWithWrappers() await flushPromiseQueue() - expect(navigate).toHaveBeenCalledWith("https://www.artsy.net/artist/banksy") + expect(navigate).toHaveBeenCalledWith("https://artsy.net/artist/banksy") }) describe("the error page", () => { @@ -86,7 +86,7 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-fail") + expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-fail") }) it("shows the error page if the response is not `ok`", async () => { @@ -96,19 +96,19 @@ describe(VanityURLPossibleRedirect, () => { expect(extractText(tree.root)).toContain("We can't find that page") expect(openURLMock).not.toHaveBeenCalled() tree.root.findByType(Button).props.onPress() - expect(openURLMock).toHaveBeenCalledWith("https://www.artsy.net/test-not-ok") + expect(openURLMock).toHaveBeenCalledWith("https://artsy.net/test-not-ok") }) }) it("shows an internal web view when there is no redirect", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/no-redirect" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/no-redirect" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) }) it("shows an internal web view when there is a redirect to a page that is supposed to be shown in a web view", async () => { - fetchMock.mockResolvedValueOnce({ ok: true, url: "https://www.artsy.net/categories" }) + fetchMock.mockResolvedValueOnce({ ok: true, url: "https://artsy.net/categories" }) const tree = renderWithWrappers() await flushPromiseQueue() expect(tree.root.findAllByType(ArtsyWebView)).toHaveLength(1) diff --git a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx index 5701d7a8126..776fc5dbdec 100644 --- a/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx +++ b/src/lib/Scenes/ViewingRoom/Components/ViewingRoomViewWorksButton.tsx @@ -1,9 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import { ViewingRoomViewWorksButton_viewingRoom } from "__generated__/ViewingRoomViewWorksButton_viewingRoom.graphql" import { AnimatedBottomButton } from "lib/Components/AnimatedBottomButton" import { navigate } from "lib/navigation/navigate" import { Schema } from "lib/utils/track" -import { Flex, Sans } from "palette" +import { color, Flex, Sans } from "palette" import React from "react" import { View } from "react-native" import { createFragmentContainer, graphql } from "react-relay" @@ -50,7 +49,7 @@ export const ViewingRoomViewWorksButton: React.FC = (props) => { await Share.share({ title: viewingRoom.title, message: `${viewingRoom.title} by ${viewingRoom?.partner?.name} on Artsy`, - url: `https://www.artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, + url: `https://artsy.net/viewing-room/${viewingRoom.slug}?utm_content=viewing-room-share`, }) } catch (error) { console.error("ViewingRoom.tsx", error) diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx index ace65b5f83b..f2e729a2736 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomArtworks.tsx @@ -7,7 +7,7 @@ import { defaultEnvironment } from "lib/relay/createEnvironment" import { extractNodes } from "lib/utils/extractNodes" import renderWithLoadProgress from "lib/utils/renderWithLoadProgress" import { ProvideScreenTracking, Schema } from "lib/utils/track" -import { Box, Flex, Sans, Separator, Spinner, Text, useSpace } from "palette" +import { Box, Flex, Sans, Separator, space, Spinner, Text } from "palette" import { Touchable } from "palette" import React, { useMemo, useState } from "react" import { FlatList } from "react-native" @@ -26,7 +26,6 @@ interface ArtworkSection { } export const ViewingRoomArtworks: React.FC = (props) => { - const space = useSpace() const { viewingRoom, relay } = props const [isLoadingMore, setIsLoadingMore] = useState(false) const tracking = useTracking() diff --git a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx index a5d85e4c39a..ef7086e22a9 100644 --- a/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx +++ b/src/lib/Scenes/ViewingRoom/ViewingRoomsList.tsx @@ -9,7 +9,7 @@ import { PlaceholderBox, PlaceholderText, ProvidePlaceholderContext } from "lib/ import { ProvideScreenTracking, Schema } from "lib/utils/track" import { useScreenDimensions } from "lib/utils/useScreenDimensions" import _ from "lodash" -import { Flex, Sans, Separator, Spacer, useSpace } from "palette" +import { Flex, Sans, Separator, space, Spacer } from "palette" import React, { useRef, useState } from "react" import { FlatList, RefreshControl } from "react-native" import { ConnectionConfig } from "react-relay" @@ -48,7 +48,6 @@ interface ViewingRoomsListProps { } export const ViewingRoomsListContainer: React.FC = (props) => { - const space = useSpace() const [queryData, { isLoading, hasMore, loadMore, refetchConnection }] = usePagination(fragmentSpec, props.query) const viewingRooms = extractNodes(queryData.viewingRooms) diff --git a/src/lib/navigation/__tests__/routes-tests.tsx b/src/lib/navigation/__tests__/routes-tests.tsx index fbd92214263..93c9d3bce6a 100644 --- a/src/lib/navigation/__tests__/routes-tests.tsx +++ b/src/lib/navigation/__tests__/routes-tests.tsx @@ -12,7 +12,7 @@ describe("artsy.net routes", () => { expect(matchRoute("")).toEqual(expected) expect(matchRoute("//")).toEqual(expected) expect(matchRoute("https://www.artsy.net/")).toEqual(expected) - expect(matchRoute("https://www.artsy.net/")).toEqual(expected) + expect(matchRoute("https://artsy.net/")).toEqual(expected) expect(matchRoute("https://staging.artsy.net/")).toEqual(expected) }) @@ -84,7 +84,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://www.artsy.net/artist/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://artsy.net/artist/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artist", "params": Object { @@ -108,7 +108,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://www.artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://artsy.net/artist/josef-albers%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { @@ -152,7 +152,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute("https://www.artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` + expect(matchRoute("https://artsy.net/artwork/more%26more")).toMatchInlineSnapshot(` Object { "module": "Artwork", "params": Object { @@ -161,7 +161,7 @@ describe("artsy.net routes", () => { "type": "match", } `) - expect(matchRoute(encodeURIComponent(encodeURIComponent("https://www.artsy.net/artwork/more%26more")))) + expect(matchRoute(encodeURIComponent(encodeURIComponent("https://artsy.net/artwork/more%26more")))) .toMatchInlineSnapshot(` Object { "module": "Artwork", @@ -187,7 +187,7 @@ describe("artsy.net routes", () => { `) expect( matchRoute( - "https://www.artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." + "https://artsy.net/artwork/yayoi-kusama-red-pumpkin%3Futm_medium%3Dsocial%26utm_source%3Dinstagram-story%26utm_campaign%3Ddp." ) ).toMatchInlineSnapshot(` Object { diff --git a/src/lib/navigation/navigate.ts b/src/lib/navigation/navigate.ts index 6b72c78bc40..dc04f6a61f5 100644 --- a/src/lib/navigation/navigate.ts +++ b/src/lib/navigation/navigate.ts @@ -95,7 +95,9 @@ export function dismissModal() { export function goBack() { LegacyNativeModules.ARScreenPresenterModule.goBack(unsafe__getSelectedTab()) - navigationEvents.emit("goBack") + if (Platform.OS === "android") { + navigationEvents.emit("goBack") + } } export function popParentViewController() { diff --git a/src/lib/navigation/routes.tsx b/src/lib/navigation/routes.tsx index 0de26afc149..15eceac38a2 100644 --- a/src/lib/navigation/routes.tsx +++ b/src/lib/navigation/routes.tsx @@ -131,7 +131,7 @@ function getDomainMap(): Record { new RouteMatcher("/artist/:artistID/artist-series", "FullArtistSeriesList"), webViewRoute("/artist/:artistID/articles"), new RouteMatcher("/artist/:artistID/*", "Artist"), - // For artists in a gallery context, like https://www.artsy.net/spruth-magers/artist/astrid-klein . Until we have a native + // For artists in a gallery context, like https://artsy.net/spruth-magers/artist/astrid-klein . Until we have a native // version of the gallery profile/context, we will use the normal native artist view instead of showing a web view. new RouteMatcher("/:profile_id_ignored/artist/:artistID", "Artist"), new RouteMatcher("/auction-registration/:saleID", "AuctionRegistration"), @@ -170,8 +170,6 @@ function getDomainMap(): Record { new RouteMatcher("/my-profile/payment/new-card", "MyProfilePaymentNewCreditCard"), new RouteMatcher("/my-profile/push-notifications", "MyProfilePushNotifications"), new RouteMatcher("/my-profile/saved-addresses", "SavedAddresses"), - new RouteMatcher("/my-profile/saved-addresses/new-address", "SavedAddressesForm"), - new RouteMatcher("/my-profile/saved-addresses/edit-address", "SavedAddressesForm"), new RouteMatcher("/local-discovery", "LocalDiscovery"), new RouteMatcher("/privacy-request", "PrivacyRequest"), @@ -222,9 +220,7 @@ function getDomainMap(): Record { unsafe_getFeatureFlag("AROptionsUseReactNativeWebView") ? webViewRoute("/orders/:orderID", { mimicBrowserBackButton: false }) : new RouteMatcher("/orders/:orderID", "Checkout"), - __DEV__ && new RouteMatcher("/storybook", "Storybook"), - // Every other route needs to go above new RouteMatcher("/:slug", "VanityURLEntity"), webViewRoute("/*"), ]) diff --git a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts index c69a644d5e5..f23ce498d2b 100644 --- a/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts +++ b/src/lib/relay/middlewares/__tests__/errorMiddleware-tests.ts @@ -74,7 +74,7 @@ describe(errorMiddleware, () => { // @ts-ignore const relayResponse: RelayNetworkLayerResponse = { json: { - errors: [{ message: "Tests error" }], + errors: [{}], }, } diff --git a/src/lib/relay/middlewares/errorMiddleware.ts b/src/lib/relay/middlewares/errorMiddleware.ts index 34b02eb72d5..059fe84feb1 100644 --- a/src/lib/relay/middlewares/errorMiddleware.ts +++ b/src/lib/relay/middlewares/errorMiddleware.ts @@ -14,7 +14,7 @@ const isErrorStatus = (status: number | undefined) => { } const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { - const resJson = res?.json as GraphQLResponse + // const formattedError = formatGraphQLErrors(req, res.errors!) Sentry.withScope((scope) => { scope.setExtra("kind", req.operation.operationKind) scope.setExtra("query-name", req.operation.name) @@ -24,7 +24,7 @@ const throwError = (req: GraphQLRequest, res: RelayNetworkLayerResponse) => { scope.setExtra("variables", req.variables as any) } console.log(createRequestError(req, res)) - Sentry.captureException(resJson.errors && resJson.errors[0]?.message) + Sentry.captureException(req.operation.name) }) throw createRequestError(req, res) } diff --git a/src/lib/store/AuthModel.ts b/src/lib/store/AuthModel.ts index ec5a1d55ef9..5d059868fb9 100644 --- a/src/lib/store/AuthModel.ts +++ b/src/lib/store/AuthModel.ts @@ -4,10 +4,8 @@ import { action, Action, Computed, computed, StateMapper, thunk, Thunk, thunkOn, import { isArtsyEmail } from "lib/utils/general" import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" import { stringify } from "qs" -import { Alert, Linking, Platform } from "react-native" import Config from "react-native-config" import { AccessToken, GraphRequest, GraphRequestManager, LoginManager } from "react-native-fbsdk-next" -import PushNotification from "react-native-push-notification" import { getCurrentEmissionState } from "./GlobalStore" import type { GlobalStoreModel } from "./GlobalStoreModel" type BasicHttpMethod = "GET" | "PUT" | "POST" | "DELETE" @@ -267,29 +265,6 @@ export const getAuthModel = (): AuthModel => ({ }) actions.notifyTracking({ userId: id }) - if (Platform.OS === "android") { - PushNotification.checkPermissions((permissions) => { - if (!permissions.alert) { - // settimeout so alerts show when/immediately after page loads not before. - setTimeout(() => { - Alert.alert( - "Artsy Would Like to Send You Notifications", - "Turn on notifications to get important updates about artists you follow.", - [ - { - text: "Dismiss", - style: "cancel", - }, - { - text: "Settings", - onPress: () => Linking.openSettings(), - }, - ] - ) - }, 3000) - } - }) - } return true } diff --git a/src/lib/store/GlobalStoreModel.ts b/src/lib/store/GlobalStoreModel.ts index 724b6897cc5..077dc8f0093 100644 --- a/src/lib/store/GlobalStoreModel.ts +++ b/src/lib/store/GlobalStoreModel.ts @@ -14,7 +14,6 @@ import { unsafe__getEnvironment } from "./GlobalStore" import { CURRENT_APP_VERSION } from "./migration" import { getNativeModel, NativeModel } from "./NativeModel" import { assignDeep, sanitize } from "./persistence" -import { getToastModel, ToastModel } from "./ToastModel" interface GlobalStoreStateModel { version: number @@ -28,7 +27,6 @@ interface GlobalStoreStateModel { myCollection: MyCollectionModel config: ConfigModel auth: AuthModel - toast: ToastModel } export interface GlobalStoreModel extends GlobalStoreStateModel { rehydrate: Action>> @@ -92,7 +90,6 @@ export const getGlobalStoreModel = (): GlobalStoreModel => ({ myCollection: getMyCollectionModel(), config: getConfigModel(), auth: getAuthModel(), - toast: getToastModel(), // for testing only. noop otherwise. __inject: __TEST__ diff --git a/src/lib/store/NativeModel.ts b/src/lib/store/NativeModel.ts index c8fdd9fd8e4..a91ed1d40da 100644 --- a/src/lib/store/NativeModel.ts +++ b/src/lib/store/NativeModel.ts @@ -2,9 +2,7 @@ import { Action, action, Thunk, thunk } from "easy-peasy" import { LegacyNativeModules } from "lib/NativeModules/LegacyNativeModules" import { NotificationsManager } from "lib/NativeModules/NotificationsManager" import { navigate, navigationEvents } from "lib/navigation/navigate" -import { InfoType } from "lib/utils/track/providers" -import { SegmentTrackingProvider } from "lib/utils/track/SegmentTrackingProvider" -import { getCurrentEmissionState, GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" +import { GlobalStore, unsafe_getFeatureFlag } from "./GlobalStore" // These should match the values in emission/Pod/Classes/EigenCommunications/ARNotificationsManager.m export type NativeEvent = @@ -23,14 +21,6 @@ export type NativeEvent = | { type: "MODAL_DISMISSED" } - | { - type: "EVENT_TRACKING" - payload: InfoType - } - | { - type: "IDENTIFY_TRACKING" - payload: InfoType - } export interface NativeState { userID: string @@ -64,31 +54,9 @@ export function listenToNativeEvents(cb: (event: NativeEvent) => void) { listenToNativeEvents((event: NativeEvent) => { switch (event.type) { - case "IDENTIFY_TRACKING": - // Segment should automatically stitch identify calls to existing user even if userid is null - SegmentTrackingProvider.identify ? SegmentTrackingProvider.identify(null, event.payload) : (() => undefined)() - return - case "EVENT_TRACKING": - SegmentTrackingProvider.postEvent(event.payload) - return case "STATE_CHANGED": - const newOnboardingFlow = unsafe_getFeatureFlag("AREnableNewOnboardingFlow") - if (!newOnboardingFlow) { - const prevState = getCurrentEmissionState() - const onboardingChanged = - prevState.onboardingState !== "complete" && event.payload.onboardingState === "complete" - const userIdChanged = !prevState.userID && event.payload.userID - if (onboardingChanged || userIdChanged) { - // weird ts-lint no-unused-expressions lint - SegmentTrackingProvider.identify - ? SegmentTrackingProvider.identify(event.payload.userID, { - is_temporary_user: !event.payload.userID ? 1 : 0, - }) - : (() => undefined)() - } - } GlobalStore.actions.native.setLocalState(event.payload) - if (!newOnboardingFlow && event.payload.userEmail !== null) { + if (!unsafe_getFeatureFlag("AREnableNewOnboardingFlow") && event.payload.userEmail !== null) { GlobalStore.actions.auth.setState({ userEmail: event.payload.userEmail }) } return diff --git a/src/lib/store/ToastModel.ts b/src/lib/store/ToastModel.ts deleted file mode 100644 index 9f1afb7cc47..00000000000 --- a/src/lib/store/ToastModel.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { action, Action } from "easy-peasy" -import { ToastDetails, ToastOptions, ToastPlacement } from "lib/Components/Toast/types" - -export interface ToastModel { - sessionState: { - nextId: number - toasts: Array> - } - - add: Action< - this, - { - message: string - placement: ToastPlacement - options?: ToastOptions - } - > - remove: Action - removeOldest: Action -} - -export const getToastModel = (): ToastModel => ({ - sessionState: { - nextId: 0, - toasts: [], - }, - - add: action((state, newToast) => { - state.sessionState.toasts.push({ - id: state.sessionState.nextId, - message: newToast.message, - placement: newToast.placement, - ...newToast.options, - }) - - state.sessionState.nextId += 1 - }), - remove: action((state, toastId) => { - state.sessionState.toasts = state.sessionState.toasts.filter((toast) => toast.id !== toastId) - }), - removeOldest: action((state) => { - state.sessionState.toasts.shift() - }), -}) diff --git a/src/lib/store/__tests__/migration-tests.ts b/src/lib/store/__tests__/migration-tests.ts index 68a03149432..9790576b2c4 100644 --- a/src/lib/store/__tests__/migration-tests.ts +++ b/src/lib/store/__tests__/migration-tests.ts @@ -277,20 +277,3 @@ describe("App version Versions.RenameUserEmail", () => { expect(migratedState.auth.userEmail).toEqual("user@ios.com") }) }) - -describe("App version Versions.AddToastModel", () => { - const migrationToTest = Versions.AddToastModel - it("adds session toast storage", () => { - const previousState = migrate({ - state: { version: 0 }, - toVersion: migrationToTest - 1, - }) as any - - const migratedState = migrate({ - state: previousState, - toVersion: migrationToTest, - }) as any - - expect(migratedState.toast).toEqual({}) - }) -}) diff --git a/src/lib/store/config/EnvironmentModel.tsx b/src/lib/store/config/EnvironmentModel.tsx index 7a6a4907092..6c487e6c036 100644 --- a/src/lib/store/config/EnvironmentModel.tsx +++ b/src/lib/store/config/EnvironmentModel.tsx @@ -49,7 +49,7 @@ export const environment = defineEnvironmentOptions({ presets: { local: "http://localhost:5000", staging: "https://staging.artsy.net", - production: "https://www.artsy.net", + production: "https://artsy.net", }, }, causalityURL: { diff --git a/src/lib/store/config/features.ts b/src/lib/store/config/features.ts index 7fe3c3c79a1..0930750190b 100644 --- a/src/lib/store/config/features.ts +++ b/src/lib/store/config/features.ts @@ -103,18 +103,10 @@ export const features = defineFeatures({ }, AREnableSavedSearch: { readyForRelease: true, - echoFlagKey: "AREnableSavedSearch", - description: "Enable Saved Search: iOS", - }, - AREnableSavedSearchAndroid: { - readyForRelease: false, - echoFlagKey: "AREnableSavedSearchAndroid", - description: "Enable Saved Search: Android", - showInAdminMenu: true, - }, - AREnableSavedSearchV2: { - readyForRelease: false, - description: "Enable Saved Search V2", + // TODO: after implementation of notifications for android we need to change the following line to + // echoFlagKey: "AREnableSavedSearch", + echoFlagKey: Platform.OS === "ios" ? "AREnableSavedSearch" : undefined, + description: "Enable Saved Search", showInAdminMenu: true, }, AREnableNewOnboardingFlow: { @@ -167,9 +159,6 @@ export const devToggles = defineDevToggles({ } }, }, - DTShowAnalyticsVisualiser: { - description: "Show analytics visualiser", - }, }) export const isDevToggle = (name: FeatureName | DevToggleName): name is DevToggleName => { diff --git a/src/lib/store/migration.ts b/src/lib/store/migration.ts index f419a0fbf49..c72cfdea0e6 100644 --- a/src/lib/store/migration.ts +++ b/src/lib/store/migration.ts @@ -21,10 +21,9 @@ export const Versions = { AddUserIsDev: 9, AddAuthOnboardingState: 10, RenameUserEmail: 11, - AddToastModel: 12, } -export const CURRENT_APP_VERSION = Versions.AddToastModel +export const CURRENT_APP_VERSION = Versions.RenameUserEmail export type Migrations = Record any> export const artsyAppMigrations: Migrations = { @@ -87,9 +86,6 @@ export const artsyAppMigrations: Migrations = { state.auth.userEmail = state.auth.userEmail ?? null delete state.auth.androidUserEmail }, - [Versions.AddToastModel]: (state) => { - state.toast = {} - }, } export function migrate({ diff --git a/src/lib/tests/renderRelayTree.tsx b/src/lib/tests/renderRelayTree.tsx index f6a42d9b13c..85c18f5a854 100644 --- a/src/lib/tests/renderRelayTree.tsx +++ b/src/lib/tests/renderRelayTree.tsx @@ -1,7 +1,5 @@ // @ts-expect-error STRICTNESS_MIGRATION --- 🚨 Unsafe legacy code 🚨 Please delete this and fix any type errors if you have time 🙏 import { mount, RenderUntilPredicate } from "enzyme" -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { Theme } from "palette" import React from "react" import { Variables } from "relay-runtime" import { LoadingTestID } from "../utils/renderWithLoadProgress" @@ -111,19 +109,15 @@ export function renderRelayTree

- - - - + ) return mount(wrapper ? wrapper(renderer) : renderer).renderUntil( renderUntilPredicate || RelayFinishedLoading diff --git a/src/lib/utils/AdminMenu.tsx b/src/lib/utils/AdminMenu.tsx index 120f5700965..3835231e81a 100644 --- a/src/lib/utils/AdminMenu.tsx +++ b/src/lib/utils/AdminMenu.tsx @@ -9,8 +9,7 @@ import { environment, EnvironmentKey } from "lib/store/config/EnvironmentModel" import { DevToggleName, devToggles, FeatureName, features } from "lib/store/config/features" import { GlobalStore } from "lib/store/GlobalStore" import { capitalize, compact, sortBy } from "lodash" -import { ChevronIcon, CloseIcon, Flex, ReloadIcon, Separator, Spacer, Text, useColor } from "palette" -import { DevTogglePaletteFlag } from "palette/PaletteFlag" +import { ChevronIcon, CloseIcon, color, Flex, ReloadIcon, Separator, Spacer, Text } from "palette" import React, { useEffect, useState } from "react" import { Alert, @@ -85,12 +84,6 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa navigate("/admin", { modal: true }) }} /> - { - navigate("/storybook") - }} - /> @@ -123,7 +116,6 @@ export const AdminMenu: React.FC<{ onClose(): void }> = ({ onClose = dismissModa {configurableDevToggleKeys.map((devToggleKey) => { return })} - void }> = ({ onClose }) => { - const color = useColor() const { env, adminOverrides, strings } = GlobalStore.useAppState((store) => store.config.environment) // show custom url options if there are already admin overrides in effect, or if the user has tapped the option // to set custom overrides during the lifetime of this component diff --git a/src/lib/utils/QAInfo.tsx b/src/lib/utils/QAInfo.tsx index d26404210a2..4ec81212449 100644 --- a/src/lib/utils/QAInfo.tsx +++ b/src/lib/utils/QAInfo.tsx @@ -1,7 +1,7 @@ import Clipboard from "@react-native-community/clipboard" import { useToast } from "lib/Components/Toast/toastHook" import { useDevToggle } from "lib/store/GlobalStore" -import { Flex, FlexProps, Text, Touchable, useColor } from "palette" +import { color, Flex, FlexProps, Text, Touchable } from "palette" import React from "react" export const QAInfoPanel: React.FC & { info: Array<[string, string]> }> = (props) => ( @@ -22,7 +22,6 @@ export const QAInfoManualPanel: React.FC = (props) => { } export const QAInfoRow: React.FC<{ name: string; value: string }> = ({ name, value }) => { - const color = useColor() const toast = useToast() return ( diff --git a/src/lib/utils/__tests__/renderMarkdown-tests.tsx b/src/lib/utils/__tests__/renderMarkdown-tests.tsx index eeb9f031545..26ffd729348 100644 --- a/src/lib/utils/__tests__/renderMarkdown-tests.tsx +++ b/src/lib/utils/__tests__/renderMarkdown-tests.tsx @@ -7,7 +7,6 @@ import { defaultRules, renderMarkdown } from "../renderMarkdown" import { readFileSync } from "fs" import { navigate } from "lib/navigation/navigate" -import { GlobalStoreProvider } from "lib/store/GlobalStore" import { join } from "path" describe("renderMarkdown", () => { @@ -111,11 +110,9 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - - {componentList} - - + + {componentList} + ) expect(renderedComponent.find(LinkText).length).toEqual(2) @@ -146,11 +143,9 @@ describe("renderMarkdown", () => { ) as any const renderedComponent = mount( - - - {componentList} - - + + {componentList} + ) expect(renderedComponent.find(LinkText).length).toEqual(2) diff --git a/src/lib/utils/hideBackButtonOnScroll.tsx b/src/lib/utils/hideBackButtonOnScroll.tsx index 8397dbeff6c..c629e12271f 100644 --- a/src/lib/utils/hideBackButtonOnScroll.tsx +++ b/src/lib/utils/hideBackButtonOnScroll.tsx @@ -4,7 +4,7 @@ import { unsafe__getSelectedTab } from "lib/store/GlobalStore" import { useContext, useMemo } from "react" import { FlatListProps, Platform } from "react-native" -export const SCROLL_UP_TO_SHOW_THRESHOLD = 150 +const SCROLL_UP_TO_SHOW_THRESHOLD = 150 const SCROLL_DOWN_TO_HIDE_THRESHOLD = 50 type Direction = "up" | "down" | null diff --git a/src/lib/utils/placeholders.tsx b/src/lib/utils/placeholders.tsx index a74047f7f8e..b004da8aae9 100644 --- a/src/lib/utils/placeholders.tsx +++ b/src/lib/utils/placeholders.tsx @@ -1,5 +1,5 @@ import { GenericGridPlaceholder } from "lib/Components/ArtworkGrids/GenericGrid" -import { Flex, useColor } from "palette" +import { color, Flex } from "palette" import React, { useContext, useEffect, useMemo, useRef } from "react" import { View, ViewStyle } from "react-native" import Animated from "react-native-reanimated" @@ -34,7 +34,6 @@ export const ProvidePlaceholderContext: React.FC<{}> = ({ children }) => { } export const PlaceholderBox: React.FC = ({ children, ...styles }) => { - const color = useColor() const ctx = useContext(PlaceholderContext) if (!ctx) { throw new Error("You're using a Placeholder outside of a PlaceholderContext") diff --git a/src/lib/utils/renderMarkdown.tsx b/src/lib/utils/renderMarkdown.tsx index 9950b2b81bb..4e085aab18e 100644 --- a/src/lib/utils/renderMarkdown.tsx +++ b/src/lib/utils/renderMarkdown.tsx @@ -2,7 +2,7 @@ import { decode } from "html-entities" import { LinkText } from "lib/Components/Text/LinkText" import { navigate } from "lib/navigation/navigate" import _ from "lodash" -import { ClassTheme, Sans, Separator, Serif, Text } from "palette" +import { color, Sans, Separator, Serif, space, Text } from "palette" import React from "react" import { Text as RNText, View } from "react-native" import SimpleMarkdown, { ParserRule, ParserRules, ReactNodeOutput } from "simple-markdown" @@ -242,13 +242,9 @@ export function defaultRules({ }, blockQuote: { react: (node, output, state) => ( - - {({ color, space }) => ( - - {output(node.content, state)} - - )} - + + {output(node.content, state)} + ), }, hr: { diff --git a/src/lib/utils/track/SegmentTrackingProvider.ts b/src/lib/utils/track/SegmentTrackingProvider.ts index fd54c56f5c8..b63b632dff7 100644 --- a/src/lib/utils/track/SegmentTrackingProvider.ts +++ b/src/lib/utils/track/SegmentTrackingProvider.ts @@ -1,14 +1,8 @@ -import Clipboard from "@react-native-community/clipboard" import { Analytics } from "@segment/analytics-react-native" -import { addBreadcrumb } from "@sentry/react-native" -import { Toast } from "lib/Components/Toast/Toast" -import { unsafe_getDevToggle } from "lib/store/GlobalStore" import { Platform } from "react-native" import Config from "react-native-config" import { isCohesionScreen, TrackingProvider } from "./providers" -export const SEGMENT_TRACKING_PROVIDER = "SEGMENT_TRACKING_PROVIDER" - let analytics: Analytics.Client export const SegmentTrackingProvider: TrackingProvider = { setup: () => { @@ -16,35 +10,25 @@ export const SegmentTrackingProvider: TrackingProvider = { const Braze = require("@segment/analytics-react-native-appboy").default analytics - .setup( - Platform.select({ - ios: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_IOS : Config.SEGMENT_PRODUCTION_WRITE_KEY_IOS, - android: __DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, - default: "", - }), - { - using: [Braze], - } - ) + .setup(__DEV__ ? Config.SEGMENT_STAGING_WRITE_KEY_ANDROID : Config.SEGMENT_PRODUCTION_WRITE_KEY_ANDROID, { + using: [Braze], + }) .then(() => console.log("Analytics is ready")) .catch((err) => console.error("Something went wrong", err)) }, identify: (userId, traits) => { + // temporary guard + if (Platform.OS !== "android") { + return + } + analytics.identify(userId, traits) }, postEvent: (info) => { - addBreadcrumb({ - message: `${JSON.stringify(info, null, 2)}`, - category: "analytics", - }) - - // Events bubbled up from ios native - if ("screen_name" in info) { - const { screen_name, ...rest } = info - visualize("Screen", screen_name, info) - analytics.screen(screen_name, rest as any) + // temporary guard + if (Platform.OS !== "android") { return } @@ -52,10 +36,8 @@ export const SegmentTrackingProvider: TrackingProvider = { const { action } = info if (isCohesionScreen(info)) { const { context_screen_owner_type } = info - visualize("Screen", context_screen_owner_type, info) analytics.screen(context_screen_owner_type, info as any) } else { - visualize("Track", action, info) analytics.track(action, info as any) } return @@ -63,61 +45,23 @@ export const SegmentTrackingProvider: TrackingProvider = { if ("action_type" in info) { const { action_type, ...rest } = info - visualize("Track", action_type, info) analytics.track(action_type, rest as any) return } if ("name" in info) { const { name, ...rest } = info - visualize("Track", name, info) analytics.track(name, rest as any) return } if ("context_screen" in info) { const { context_screen, ...rest } = info - visualize("Screen", context_screen, info) analytics.screen(context_screen, rest as any) return } - // default check events from ios native - if ("event_name" in info) { - const { event_name, ...rest } = info - visualize("Track", event_name, info) - analytics.track(event_name, rest as any) - return - } - console.warn("oh wow, we are not tracking this event!! we should!", { info }) assertNever(info) }, } - -const visualize = (type: string, name: string, info: { [key: string]: any }) => { - if (!unsafe_getDevToggle("DTShowAnalyticsVisualiser")) { - return - } - - const title = `${type}: ${name}` - const message = JSON.stringify(info, null, 2) - - Toast.show(title, "top", { - onPress: ({ showActionSheetWithOptions }) => { - showActionSheetWithOptions( - { - title, - message, - options: ["Copy description", "Continue"], - cancelButtonIndex: 1, - }, - (buttonIndex) => { - if (buttonIndex === 0) { - Clipboard.setString(message) - } - } - ) - }, - }) -} diff --git a/src/lib/utils/track/providers.tsx b/src/lib/utils/track/providers.tsx index e9e26f31a16..e30c76df92c 100644 --- a/src/lib/utils/track/providers.tsx +++ b/src/lib/utils/track/providers.tsx @@ -6,14 +6,6 @@ interface CohesionAction { // TODO: This can be removed once cohesion provides a global `Action` type. action: string } - -type NativeIOSTrackingEventID = - | { - // identifier for native ios events for tracking - screen_name: string - } - | { event_name: string } - export const isCohesionScreen = (info: CohesionAction | Screen): info is Screen => info.action === ActionType.screen interface LegacyNameAction { @@ -21,13 +13,7 @@ interface LegacyNameAction { name: string } -export type InfoType = - | Schema.PageView - | Schema.Entity - | CohesionAction - | Screen - | LegacyNameAction - | NativeIOSTrackingEventID +type InfoType = Schema.PageView | Schema.Entity | CohesionAction | Screen | LegacyNameAction export interface TrackingProvider { setup?: () => void diff --git a/src/palette/ClassTheme.tsx b/src/palette/ClassTheme.tsx deleted file mode 100644 index c0df1a33317..00000000000 --- a/src/palette/ClassTheme.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react" -import { Theme, useTheme } from "./Theme" - -export const ClassTheme = ({ - theme = "v2", - children, -}: { - theme?: "v2" | "v3" - children: React.ReactNode | ((helpers: ReturnType) => React.ReactNode) -}) => { - const hookStuff = useTheme() - return {typeof children === "function" ? children(hookStuff) : children} -} diff --git a/src/palette/PaletteFlag.tsx b/src/palette/PaletteFlag.tsx deleted file mode 100644 index ba15db3f7aa..00000000000 --- a/src/palette/PaletteFlag.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import AsyncStorage from "@react-native-community/async-storage" -import { MenuItem } from "lib/Components/MenuItem" -import { Text } from "palette" -import React from "react" -import { Alert } from "react-native" -import create from "zustand" -import { persist } from "zustand/middleware" - -interface PaletteFlagState { - allowV3: boolean - setAllowV3: (value: boolean) => void -} - -export const usePaletteFlagStore = create( - persist( - (set) => ({ - allowV3: __TEST__, - setAllowV3: (value) => set((_state) => ({ allowV3: value })), - }), - { name: "z-devtoggle-palette", getStorage: () => AsyncStorage } - ) -) - -export const DevTogglePaletteFlag = () => { - const currentValue = usePaletteFlagStore((state) => state.allowV3) - const setValue = usePaletteFlagStore((state) => state.setAllowV3) - - const description = "Allow Palette V3" - const valText = currentValue ? "Yes" : "No" - - return ( - { - Alert.alert(description, undefined, [ - { - text: currentValue ? "Keep turned ON" : "Turn ON", - onPress: () => setValue(true), - }, - { - text: currentValue ? "Turn OFF" : "Keep turned OFF", - onPress: () => setValue(false), - }, - ]) - }} - value={ - currentValue ? ( - - {valText} - - ) : ( - - {valText} - - ) - } - /> - ) -} diff --git a/src/palette/Theme.tsx b/src/palette/Theme.tsx index 0b5df0fb6da..0e10b7499a1 100644 --- a/src/palette/Theme.tsx +++ b/src/palette/Theme.tsx @@ -1,177 +1,28 @@ -import { THEME_V2, THEME_V3 } from "@artsy/palette-tokens" -import _ from "lodash" -import React, { useContext } from "react" -import { ThemeContext, ThemeProvider } from "styled-components/native" -import { TEXT_FONTS_V2, TEXT_FONTS_V3 } from "./elements/Text/tokens" -import { usePaletteFlagStore } from "./PaletteFlag" +import tokens from "@artsy/palette-tokens" +import React from "react" +import { TEXT_FONTS } from "./elements/Text/tokens" import { fontFamily } from "./platform/fonts/fontFamily" +import { ThemeProvider } from "./platform/primitives" /** * All of the config for the Artsy theming system, based on the * design system from our design team: * https://www.notion.so/artsy/Master-Library-810612339f474d0997fe359af4285c56 */ -export { SansSize, SerifSize, TypeSizes } from "@artsy/palette-tokens/dist/themes/v2" - -import { Color as ColorV2, SpacingUnit as SpacingUnitV2 } from "@artsy/palette-tokens/dist/themes/v2" -import { Color as ColorV3, SpacingUnit as SpacingUnitV3Numbers } from "@artsy/palette-tokens/dist/themes/v3" - -type SpacingUnitV3 = `${SpacingUnitV3Numbers}` -export type Color = ColorV2 | ColorV3 -export type SpacingUnit = SpacingUnitV2 | SpacingUnitV3 -export { ColorV2, ColorV3, SpacingUnitV2, SpacingUnitV3 } - -const { - breakpoints: _eigenDoesntCareAboutBreakpoints, - mediaQueries: _eigenDoesntCareAboutMediaQueries, - grid: _eigenDoesntCareAboutGrid, - space: spaceNumbers, - ...eigenUsefulTHEME_V3 -} = THEME_V3 - -// this function is converting the space values that come from palette-tokens -// from a string `"120px"` to a number `120`. -const fixSpaceUnitsV2 = ( - units: typeof THEME_V2.space -): { - 0.3: number - 0.5: number - 1: number - 1.5: number - 2: number - 3: number - 4: number - 5: number - 6: number - 9: number - 12: number - 18: number -} => { - let fixed = units - - fixed = _.mapValues(fixed, (stringValueWithPx) => { - const justStringValue = _.split(stringValueWithPx, "px")[0] - const numberValue = parseInt(justStringValue, 10) - return numberValue - }) as any - - return fixed as any +export * from "@artsy/palette-tokens" +export const themeProps = { + ...tokens, + fontFamily, + fonts: TEXT_FONTS, } -// this function is converting the space values that come from palette-tokens -// from a string `"120px"` to a number `120`, and the key values -// from a number `0.5` to a string `"0.5"`. -const fixSpaceUnitsV3 = ( - units: typeof spaceNumbers -): { - "0.5": number - "1": number - "2": number - "4": number - "6": number - "12": number -} => { - let fixed = units - - fixed = _.mapKeys(fixed, (_value, numberKey) => `${numberKey}`) as any - - fixed = _.mapValues(fixed, (stringValueWithPx) => { - const justStringValue = _.split(stringValueWithPx, "px")[0] - const numberValue = parseInt(justStringValue, 10) - return numberValue - }) as any - - return fixed as any -} - -const THEMES = { - v2: { ...THEME_V2, fontFamily, fonts: TEXT_FONTS_V2, space: fixSpaceUnitsV2(THEME_V2.space) }, - v3: { - ...eigenUsefulTHEME_V3, - fonts: TEXT_FONTS_V3, - space: fixSpaceUnitsV3(spaceNumbers), - }, // v3 removed `fontFamily`, `fontSizes`, `letterSpacings`, `lineHeights`, `typeSizes` +interface ThemeProps { + override?: { [key: string]: any } } -type ThemeV2Type = typeof THEMES.v2 -type ThemeV3Type = typeof THEMES.v3 -type ThemeType = ThemeV2Type | ThemeV3Type - /** - * Do not use this!! Use any the hooks instead! + * A wrapper component for passing down the Artsy theme context */ -export const themeProps = THEMES.v2 - -export const Theme: React.FC<{ - theme?: keyof typeof THEMES | ThemeType - override?: DeepPartial | DeepPartial -}> = ({ children, theme = "v2", override = {} }) => { - const allowV3 = usePaletteFlagStore((state) => state.allowV3) - - let actualTheme: ThemeType - if (_.isString(theme)) { - if (allowV3) { - actualTheme = THEMES[theme] - } else { - actualTheme = THEMES.v2 - } - } else { - actualTheme = theme - } - - return {children} +export const Theme: React.FC = (props) => { + return {props.children} } - -export const ThemeV2: React.FC = ({ children }) => {children} -export const ThemeV3: React.FC = ({ children }) => {children} - -interface ColorFuncOverload { - (colorNumber: undefined): undefined - (colorNumber: Color): string - (colorNumber: Color | undefined): string | undefined -} -const color = (theme: ThemeType): ColorFuncOverload => (colorName: any): any => - colorName === undefined - ? undefined - : isThemeV2(theme) - ? theme.colors[colorName as ColorV2] - : // @ts-ignore - theme.colors[colorName as ColorV3] - -const space = (theme: ThemeType) => (spaceName: SpacingUnitV2 | SpacingUnitV3): number => - isThemeV2(theme) - ? ((theme.space[spaceName as SpacingUnitV2] as unknown) as number) - : theme.space[spaceName as SpacingUnitV3] - -export const useTheme = () => { - const theme: ThemeType = useContext(ThemeContext) - - // if we are not wrapped in ``, if we dev, throw error. if we are in prod, just default to v2 to avoid a crash. - if (theme === undefined) { - if (__DEV__ || __TEST__) { - console.error( - "You are trying to use the `Theme` but you have not wrapped your component/screen with ``. Please wrap and try again." - ) - throw new Error("ThemeContext is not defined. Wrap your component with `` and try again.") - } else { - return { theme: THEMES.v2, color: color(THEMES.v2), space: space(THEMES.v2) } - } - } - - // if we are wrapped, then all good. - return { theme, color: color(theme), space: space(theme) } -} - -export const isThemeV2 = (theme: ThemeType): theme is ThemeV2Type => theme.id === "v2" -export const isThemeV3 = (theme: ThemeType): theme is ThemeV3Type => theme.id === "v3" - -/** - * Only use this if it's are absolutely neccessary. - */ -// tslint:disable-next-line:variable-name -export const _test_colorV2 = color(THEMES.v2) -/** - * Only use this if it's are absolutely neccessary. - */ -// tslint:disable-next-line:variable-name -export const _test_colorV3 = color(THEMES.v3) diff --git a/src/palette/elements/Avatar/Avatar.tsx b/src/palette/elements/Avatar/Avatar.tsx index e4311836ba3..72f8f1c4e30 100644 --- a/src/palette/elements/Avatar/Avatar.tsx +++ b/src/palette/elements/Avatar/Avatar.tsx @@ -1,8 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" import React, { FunctionComponent, ImgHTMLAttributes } from "react" import { Image } from "react-native" -import styled from "styled-components/native" import { borderRadius } from "styled-system" +import { styledWrapper } from "../../platform/primitives" +import { color } from "../../Theme" import { Flex } from "../Flex" import { Text, TextFontSize } from "../Text" @@ -92,8 +92,8 @@ export const BaseAvatar = ({ src, initials, size = "md", renderAvatar }: BaseAva } /** InitialsHolder */ -export const InitialsHolder = styled(Flex)` - background-color: ${themeGet("colors.black10")}; +export const InitialsHolder = styledWrapper(Flex)` + background-color: ${color("black10")}; text-align: center; overflow: hidden; ${borderRadius} diff --git a/src/palette/elements/BorderBox/BorderBox.tsx b/src/palette/elements/BorderBox/BorderBox.tsx index c9a9018d5ca..8b4b4e1a535 100644 --- a/src/palette/elements/BorderBox/BorderBox.tsx +++ b/src/palette/elements/BorderBox/BorderBox.tsx @@ -1,8 +1,8 @@ -import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" -import styled from "styled-components/native" import { border, BorderProps, space as styledSpace, SpaceProps } from "styled-system" +import { styledWrapper } from "../../platform/primitives" +import { color, space } from "../../Theme" import { Flex, FlexProps } from "../Flex" export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { @@ -13,10 +13,10 @@ export interface BorderBoxProps extends FlexProps, BorderProps, SpaceProps { * A `View` or `div` (depending on the platform) that has a common border * and padding set by default */ -export const BorderBox = styled(Flex)` - border: 1px solid ${themeGet("colors.black10")}; +export const BorderBox = styledWrapper(Flex)` + border: 1px solid ${color("black10")}; border-radius: 2px; - padding: ${themeGet("space.2")}px; + padding: ${space(2)}px; ${border} ${styledSpace} ` diff --git a/src/palette/elements/Button/Button.stories.tsx b/src/palette/elements/Button/Button.stories.tsx deleted file mode 100644 index 9332fe230e1..00000000000 --- a/src/palette/elements/Button/Button.stories.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { action } from "@storybook/addon-actions" -import { storiesOf } from "@storybook/react-native" -import { Button, ButtonSize, ButtonVariant } from "palette" -import React from "react" -import { DList, List } from "storybook/helpers" - -const sizes: ButtonSize[] = ["small", "medium", "large"] - -const variants: ButtonVariant[] = [ - "primaryBlack", - "primaryWhite", - "secondaryGray", - "secondaryOutline", - "secondaryOutlineWarning", - "noOutline", -] - -storiesOf("Button", module) - .add("Sizes", () => ( - ( - - )} - /> - )) - .add("Variants", () => ( - ( - - )} - /> - )) - .add("States", () => ( - - - - - - )) diff --git a/src/palette/elements/Button/Button.test.tsx b/src/palette/elements/Button/Button.test.tsx index ebcaf731dde..80b9a1cde1c 100644 --- a/src/palette/elements/Button/Button.test.tsx +++ b/src/palette/elements/Button/Button.test.tsx @@ -8,11 +8,9 @@ describe("Button", () => { it("returns variants and sizes", () => { const getWrapper = (props) => { return mount( - - - - - + + + ) } @@ -45,11 +43,9 @@ describe("Button", () => { it("shows spinner if loading is true", () => { const wrapper = mount( - - - - - + + + ) expect(wrapper.find("Spinner").length).toBe(1) expect(wrapper.html()).toContain('class="loading') @@ -59,13 +55,11 @@ describe("Button", () => { const onClickMock = jest.fn() const wrapper = mount( - - - - - + + + ) wrapper.find("Button").simulate("click") @@ -75,14 +69,12 @@ describe("Button", () => { it("passes the `disabled` prop down to the DOM element", () => { const wrapper = mount( - - - <> - - - - - + + <> + + + + ) expect(wrapper.find("button[disabled]")).toHaveLength(1) diff --git a/src/palette/elements/Button/Button.tsx b/src/palette/elements/Button/Button.tsx index e45cf7e3312..4c0c2c79530 100644 --- a/src/palette/elements/Button/Button.tsx +++ b/src/palette/elements/Button/Button.tsx @@ -1,4 +1,4 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React, { ReactNode, useState } from "react" import { GestureResponderEvent, TouchableWithoutFeedback } from "react-native" import Haptic, { HapticFeedbackTypes } from "react-native-haptic-feedback" @@ -19,28 +19,17 @@ export type ButtonVariant = | "secondaryOutline" | "secondaryOutlineWarning" | "noOutline" - /** Default button color variant */ export const defaultVariant: ButtonVariant = "primaryBlack" /** The size of the button */ export type ButtonSize = "small" | "medium" | "large" -/** Icon position */ -export type ButtonIconPosition = "left" | "right" - /** Default button size */ export const defaultSize: ButtonSize = "medium" -/** Default icon position */ -export const defaultIconPosition: ButtonIconPosition = "left" - export interface ButtonProps extends ButtonBaseProps { children: ReactNode - /** The icon component */ - icon?: ReactNode - /** Icon position */ - iconPosition?: ButtonIconPosition /** The size of the button */ size?: ButtonSize /** The theme of the button */ @@ -194,10 +183,8 @@ enum DisplayState { /** A button with various size and color settings */ export const Button: React.FC = (props) => { - const color = useColor() const size = props.size ?? defaultSize const variant = props.variant ?? defaultVariant - const iconPosition = props.iconPosition ?? defaultIconPosition const [previous, setPrevious] = useState(DisplayState.Enabled) const [current, setCurrent] = useState(DisplayState.Enabled) @@ -270,13 +257,12 @@ export const Button: React.FC = (props) => { props.onPress(event) } - const { children, loading, disabled, inline, longestText, style, icon, ...rest } = props + const { children, loading, disabled, inline, longestText, ...rest } = props const s = getSize() const variantColors = getColorsForVariant(variant, disabled) const from = variantColors[previous] const to = variantColors[current] - const iconBox = {icon} return ( @@ -304,18 +290,13 @@ export const Button: React.FC = (props) => { px={s.px} > - {iconPosition === "left" && iconBox} {children} - {iconPosition === "right" && iconBox} - - {icon} - - {longestText ? longestText : children} - - + + {longestText ? longestText : children} + {!!loading && } @@ -339,14 +320,10 @@ const VisibleTextContainer = styled(Box)` height: 100%; ` -const HiddenContainer = styled(Box)` - display: flex; - flex-direction: row; +const HiddenText = styled(Sans)` opacity: 0; ` -const LongestText = styled(Sans)`` - const Container = styled(Box)` align-items: center; justify-content: center; diff --git a/src/palette/elements/Cards/CardTag.tsx b/src/palette/elements/Cards/CardTag.tsx index 2f84839942d..03a727d383d 100644 --- a/src/palette/elements/Cards/CardTag.tsx +++ b/src/palette/elements/Cards/CardTag.tsx @@ -2,9 +2,10 @@ import React from "react" import { View } from "react-native" import { StyleProp, ViewStyle } from "react-native" import { PositionProps } from "styled-system" -import { useColor } from "../../hooks" + +import { Sans } from ".." +import { color } from "../../Theme" import { Color } from "../../Theme" -import { Sans } from "../Typography" export interface CardTagProps extends PositionProps { text: string @@ -18,7 +19,6 @@ export interface CardTagProps extends PositionProps { * `CardTag` is used for the Cards, and is controlled by their `tag` prop. */ export const CardTag: React.FC = ({ text, textColor, color: bgColor, borderColor, style }) => { - const color = useColor() return ( = ({ image, title, subtitle, tag }) => { - const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/MediumCard.tsx b/src/palette/elements/Cards/MediumCard.tsx index 714df5b76df..dc1369e74bd 100644 --- a/src/palette/elements/Cards/MediumCard.tsx +++ b/src/palette/elements/Cards/MediumCard.tsx @@ -1,11 +1,8 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" -import { useTheme } from "palette/Theme" +import { color, Flex, Sans, space, Spacer } from "palette" import React from "react" import LinearGradient from "react-native-linear-gradient" import { Box, BoxProps } from "../Box" -import { Flex } from "../Flex" -import { Spacer } from "../Spacer" -import { Sans } from "../Typography" import { CardTag, CardTagProps } from "./CardTag" export interface MediumCardProps extends BoxProps { @@ -20,7 +17,6 @@ export interface MediumCardProps extends BoxProps { * at the bottom. */ export const MediumCard: React.FC = ({ image, title, subtitle, tag, ...rest }) => { - const { color, space } = useTheme() return ( diff --git a/src/palette/elements/Cards/SmallCard.tsx b/src/palette/elements/Cards/SmallCard.tsx index 404eaea0e12..ce0a3f46e9b 100644 --- a/src/palette/elements/Cards/SmallCard.tsx +++ b/src/palette/elements/Cards/SmallCard.tsx @@ -1,9 +1,8 @@ import OpaqueImageView from "lib/Components/OpaqueImageView/OpaqueImageView" -import { useSpace } from "palette/hooks" import React from "react" -import { Box, BoxProps } from "../Box" -import { Spacer } from "../Spacer" -import { Text } from "../Text" +import { Box, Spacer, Text } from ".." +import { space } from "../../Theme" +import { BoxProps } from "../Box" import { CardTag, CardTagProps } from "./CardTag" export interface SmallCardProps extends BoxProps { @@ -19,7 +18,6 @@ export interface SmallCardProps extends BoxProps { * at the bottom. */ export const SmallCard: React.FC = ({ images, title, subtitle, tag, ...rest }) => { - const space = useSpace() return ( `` +export const Flex = styledWrapper(Box)`` Flex.defaultProps = { display: "flex", diff --git a/src/palette/elements/Message/Message.tsx b/src/palette/elements/Message/Message.tsx index b7c43f942ce..13dd9a74ff8 100644 --- a/src/palette/elements/Message/Message.tsx +++ b/src/palette/elements/Message/Message.tsx @@ -1,7 +1,6 @@ -import { themeGet } from "@styled-system/theme-get" import React from "react" -import styled from "styled-components/native" -import { useColor } from "../../hooks" +import { styledWrapper } from "../../platform/primitives" +import { color } from "../../Theme" import { SansSize } from "../../Theme" import { Flex, FlexProps } from "../Flex" import { Sans } from "../Typography" @@ -14,8 +13,8 @@ interface MessageProps extends FlexProps { textSize?: SansSize } -const StyledFlex = styled(Flex)` - background-color: ${themeGet("colors.black5")}; +const StyledFlex = styledWrapper(Flex)` + background-color: ${color("black5")}; border-radius: 2px; ` @@ -23,7 +22,6 @@ const StyledFlex = styled(Flex)` * A generic message window for displaying ZerStates, notices, errors, etc. */ export const Message: React.FC = ({ children, textSize = "3t", ...others }) => { - const color = useColor() return ( diff --git a/src/palette/elements/Radio/RadioDot.tsx b/src/palette/elements/Radio/RadioDot.tsx index 1b5ca300aa9..f0b9a50e374 100644 --- a/src/palette/elements/Radio/RadioDot.tsx +++ b/src/palette/elements/Radio/RadioDot.tsx @@ -1,4 +1,4 @@ -import { themeGet } from "@styled-system/theme-get" +import { color } from "@artsy/palette-tokens" import React from "react" import styled, { css } from "styled-components/native" import { Box } from "../Box" @@ -7,55 +7,55 @@ const RADIO_DOT_MODES = { default: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, disabled: { resting: css` border: 2px solid; color: transparent; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, }, error: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.red100")}; + color: ${color("white100")}; + border-color: ${color("red100")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, hover: { resting: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black10")}; - background-color: ${themeGet("colors.black10")}; + color: ${color("white100")}; + border-color: ${color("black10")}; + background-color: ${color("black10")}; `, selected: css` border: 2px solid; - color: ${themeGet("colors.white100")}; - border-color: ${themeGet("colors.black100")}; - background-color: ${themeGet("colors.black100")}; + color: ${color("white100")}; + border-color: ${color("black100")}; + background-color: ${color("black100")}; `, }, } @@ -119,7 +119,7 @@ const Dot = styled(Box)` } return css` - background-color: ${themeGet("colors.white100")}; + background-color: ${color("white100")}; ` }}; ` diff --git a/src/palette/elements/Separator/Separator.tsx b/src/palette/elements/Separator/Separator.tsx index 070c8bd5c46..44b98a471d5 100644 --- a/src/palette/elements/Separator/Separator.tsx +++ b/src/palette/elements/Separator/Separator.tsx @@ -1,16 +1,17 @@ -import { themeGet } from "@styled-system/theme-get" // @ts-ignore import React from "react" -import styled from "styled-components/native" + import { border, BorderProps, space, SpaceProps, width, WidthProps } from "styled-system" +import { styled as primitives } from "../../platform/primitives" +import { color } from "../../Theme" export interface SeparatorProps extends SpaceProps, WidthProps, BorderProps {} /** * A horizontal divider whose width and spacing can be adjusted */ -export const Separator = styled.View` - border: 1px solid ${themeGet("colors.black10")}; +export const Separator = primitives.View` + border: 1px solid ${color("black10")}; border-bottom-width: 0; ${space}; ${width}; diff --git a/src/palette/elements/Spinner/Spinner.tsx b/src/palette/elements/Spinner/Spinner.tsx index 26acfd9b69d..248984757ce 100644 --- a/src/palette/elements/Spinner/Spinner.tsx +++ b/src/palette/elements/Spinner/Spinner.tsx @@ -1,8 +1,7 @@ -import { themeGet } from "@styled-system/theme-get" import React, { useEffect, useMemo } from "react" import { Animated, Easing, ViewProps } from "react-native" import styled from "styled-components/native" -import { Color } from "../../Theme" +import { Color, color as colorResolve } from "../../Theme" export interface SpinnerProps extends ViewProps { /** Delay before spinner appears */ @@ -96,10 +95,9 @@ const Bar = styled(Animated.View)` ${(props) => { const { width, height } = getSize(props) - const propColorString = `colors.${props.color}` return ` - background: ${themeGet(propColorString)}; + background: ${colorResolve(props.color)}; width: ${width}px; height: ${height}px; ` diff --git a/src/palette/elements/Text/Text.tsx b/src/palette/elements/Text/Text.tsx index 8594148c3ad..dee11967775 100644 --- a/src/palette/elements/Text/Text.tsx +++ b/src/palette/elements/Text/Text.tsx @@ -1,7 +1,6 @@ import { TEXT_LINE_HEIGHTS } from "@artsy/palette-tokens/dist/text" import React from "react" import { TextProps as RNTextProps } from "react-native" -import styled from "styled-components/native" import { color, ColorProps, @@ -13,6 +12,7 @@ import { TypographyProps, variant as systemVariant, } from "styled-system" +import { styled as primitives } from "../../platform/primitives" import { calculateLetterSpacing, calculateLineHeight, @@ -20,7 +20,6 @@ import { isControlledLetterSpacing, isControlledLineHeight, TEXT_VARIANTS, - TextLineHeight, TextVariant, TREATMENTS, } from "./tokens" @@ -44,7 +43,7 @@ export const textMixin = compose(typography, color, textColor, space) /** TextProps */ export type TextProps = BaseTextProps & RNTextProps -const InnerText = styled.Text` +const InnerText = primitives.Text` ${systemVariant({ variants: TEXT_VARIANTS })} ${textMixin} ` @@ -75,7 +74,7 @@ export const Text: React.FC = ({ children, variant, fontSize, letterS ...(variant && fontSize && typeof fontSize === "number" && !lineHeight ? // Possibly convert the lineHeight { - lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight as TextLineHeight], + lineHeight: fontSize * TEXT_LINE_HEIGHTS[TREATMENTS[variant].lineHeight], } : {}), ...rest, diff --git a/src/palette/elements/Text/__tests__/Text.test.tsx b/src/palette/elements/Text/__tests__/Text.test.tsx index 97714ad66e6..a11a2fd329f 100644 --- a/src/palette/elements/Text/__tests__/Text.test.tsx +++ b/src/palette/elements/Text/__tests__/Text.test.tsx @@ -1,3 +1,4 @@ +import "jest-styled-components" import React from "react" import renderer from "react-test-renderer" import { Theme } from "../../../Theme" @@ -7,11 +8,9 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the variant", () => { const tree = renderer .create( - - - hello world - - + + hello world + ) .toJSON() @@ -23,13 +22,11 @@ describe("Text.ios", () => { it("renders the correct line-height and letter-spacing based on the font-size directly", () => { const tree = renderer .create( - - - - hello world - - - + + + hello world + + ) .toJSON() diff --git a/src/palette/elements/Text/tokens.ts b/src/palette/elements/Text/tokens.ts index 852683af80e..29dd7e1256a 100644 --- a/src/palette/elements/Text/tokens.ts +++ b/src/palette/elements/Text/tokens.ts @@ -2,28 +2,24 @@ import { TEXT_FONT_SIZES, TEXT_LETTER_SPACING, TEXT_LINE_HEIGHTS, - TEXT_VARIANT_NAMES as TEXT_TREATMENTS, + TEXT_TREATMENTS, TEXT_VARIANTS as WEB_TEXT_VARIANTS, + TextFontSize, + TextLetterSpacing, + TextLineHeight, TextTreatment as WebTextTreatment, -} from "@artsy/palette-tokens/dist/typography/v2" +} from "@artsy/palette-tokens/dist/text" import { ResponsiveValue, Theme, TLengthStyledSystem } from "styled-system" -// get rid of these three -export type TextFontSize = keyof typeof TEXT_FONT_SIZES -type TextLetterSpacing = keyof typeof TEXT_LETTER_SPACING -export type TextLineHeight = keyof typeof TEXT_LINE_HEIGHTS +export { TextFontSize } from "@artsy/palette-tokens/dist/text" /** * font-families */ -export const TEXT_FONTS_V2 = { +export const TEXT_FONTS = { sans: "Unica77LL-Regular", serif: "ReactNativeAGaramondPro-Regular", } -export const TEXT_FONTS_V3 = { - sans: "Unica77LL-Regular", -} -export const TEXT_FONTS = TEXT_FONTS_V2 /** * em-units don't exist on React Native so we convert it to a number @@ -79,14 +75,14 @@ export const TEXT_VARIANTS = (Object.keys(TREATMENTS) as Array */ -export const Touchable: React.FC = ({ children, flex, haptic, noFeedback, onPress, ...props }) => { - const color = useColor() +export const Touchable: React.FC = ({ + children, + flex, + haptic, + noFeedback, + useDefaultTouchable, + onPress, + ...props +}) => { const inner = React.Children.count(children) === 1 ? children : {children} const onPressWrapped = (evt: GestureResponderEvent) => { @@ -40,13 +50,27 @@ export const Touchable: React.FC = ({ children, flex, haptic, no onPress(evt) } - return noFeedback ? ( - - {inner} - - ) : ( - + if (noFeedback) { + const NoFeedbackButton = Platform.select({ + ios: useDefaultTouchable ? RNTouchableWithoutFeedback : TouchableWithoutFeedback, + default: RNTouchableWithoutFeedback, + }) + + return ( + + {inner} + + ) + } + + const HighlightButton = Platform.select({ + ios: useDefaultTouchable ? RNTouchableHighlight : TouchableHighlight, + default: RNTouchableHighlight, + }) + + return ( + {inner} - + ) } diff --git a/src/palette/elements/Touchable/TouchableHighlightColor.tsx b/src/palette/elements/Touchable/TouchableHighlightColor.tsx index afd186318f2..41e13c50adb 100644 --- a/src/palette/elements/Touchable/TouchableHighlightColor.tsx +++ b/src/palette/elements/Touchable/TouchableHighlightColor.tsx @@ -1,6 +1,5 @@ -import { Color } from "palette/Theme" +import { Color, Touchable, TouchableProps } from "palette" import React, { useState } from "react" -import { Touchable, TouchableProps } from "./Touchable" interface TouchableHighlightState { color: Color @@ -10,7 +9,7 @@ interface TouchableHighlightState { interface TouchableHighlightColorProps extends TouchableProps { activeColor?: Color normalColor?: Color - render: (state: TouchableHighlightState) => React.ReactNode + render: (state: TouchableHighlightState) => React.ReactNode; } export const TouchableHighlightColor: React.FC = (props) => { diff --git a/src/palette/elements/Typography/Typography.tsx b/src/palette/elements/Typography/Typography.tsx index 3f4b1854a63..ff94245dd5f 100644 --- a/src/palette/elements/Typography/Typography.tsx +++ b/src/palette/elements/Typography/Typography.tsx @@ -1,5 +1,5 @@ import React from "react" -import styled from "styled-components/native" +import { styled as primitives, styledWrapper } from "../../platform/primitives" import { SansSize, SerifSize, themeProps, TypeSizes } from "../../Theme" @@ -41,7 +41,7 @@ interface FullTextProps VerticalAlignProps {} /** Base Text component for typography */ -export const BaseText = styled.Text` +export const BaseText = primitives.Text` ${fontSize}; ${lineHeight}; ${color}; @@ -87,22 +87,24 @@ interface StyledTextProps extends Partial { * An optional function that maps weight+italic to a font-family. */ function createStyledText

(fontType: keyof FontFamily) { - return styled>(({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { - const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] - if (fontFamilyString === null) { - throw new Error( - `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` - ) + return styledWrapper>( + ({ size, weight, italic, style: _style, ...textProps }: StyledTextProps) => { + const fontFamilyString = fontFamily[fontType][weight ?? "regular"][italic ? "italic" : "normal"] + if (fontFamilyString === null) { + throw new Error( + `Incompatible text style combination: {type: ${fontType}, weight: ${weight}, italic: ${!!italic}}` + ) + } + + const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] + + if (fontMetrics == null) { + throw new Error(`"${size}" is not a valid size for ${fontType}`) + } + + return } - - const fontMetrics = themeProps.typeSizes[fontType as "sans"][size as "4"] - - if (fontMetrics == null) { - throw new Error(`"${size}" is not a valid size for ${fontType}`) - } - - return - })`` + )`` } function stripPx(fontMetrics: { fontSize: string; lineHeight: string }): { fontSize: number; lineHeight: number } { diff --git a/src/palette/helpers/__tests__/color.test.ts b/src/palette/helpers/__tests__/color.test.ts new file mode 100644 index 00000000000..ee498248dca --- /dev/null +++ b/src/palette/helpers/__tests__/color.test.ts @@ -0,0 +1,8 @@ +import { color } from "../color" + +describe("color", () => { + it("returns the correct color", () => { + expect(color("black10")).toEqual("#E5E5E5") + expect(color("black30")).toEqual("#C2C2C2") + }) +}) diff --git a/src/palette/helpers/__tests__/color.tests.tsx b/src/palette/helpers/__tests__/color.tests.tsx deleted file mode 100644 index f2029bfbc08..00000000000 --- a/src/palette/helpers/__tests__/color.tests.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import React from "react" -import { View } from "react-native" -import { useColor } from "../../hooks" -import { Color, Theme } from "../../Theme" - -describe("color", () => { - const ColorView = ({ name }: { name: Color }) => { - const color = useColor() - return - } - - it("returns the correct color with a Theme provider", () => { - const TestComponent = () => ( - - - - - - ) - - const tree = renderWithWrappers().root - expect(tree.findByType(View).props.style.backgroundColor).toBe("#E5E5E5") - }) - - it("returns the correct color with a Theme provider in v2", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("#FAE7BA") - expect(bgColors[1]).toBe("#A85F00") - }) - - it("returns the correct color with a Theme provider in v3", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe(undefined) - expect(bgColors[1]).toBe("#7B5927") - }) - - it("returns the correct color with a Theme provider with override", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("red") - expect(bgColors[1]).toBe("blue") - }) - - it("returns the correct color with nested Theme providers", () => { - const TestComponent = () => ( - - - <> - - - - <> - - - - - - - - ) - const tree = renderWithWrappers().root - const bgColors = tree.findAllByType(View).map((view) => view.props.style.backgroundColor) - expect(bgColors[0]).toBe("red") - expect(bgColors[1]).toBe("blue") - expect(bgColors[2]).toBe("green") - expect(bgColors[3]).toBe("purple") - }) -}) diff --git a/src/palette/helpers/__tests__/space.test.ts b/src/palette/helpers/__tests__/space.test.ts new file mode 100644 index 00000000000..198b6c4b91f --- /dev/null +++ b/src/palette/helpers/__tests__/space.test.ts @@ -0,0 +1,9 @@ +import { space } from "../space" + +describe("space", () => { + it("returns the correct space", () => { + expect(space(1)).toEqual(10) + expect(space(2)).toEqual(20) + expect(space(3)).toEqual(30) + }) +}) diff --git a/src/palette/helpers/__tests__/space.tests.tsx b/src/palette/helpers/__tests__/space.tests.tsx deleted file mode 100644 index ab17e267ac9..00000000000 --- a/src/palette/helpers/__tests__/space.tests.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { GlobalStoreProvider } from "lib/store/GlobalStore" -import { renderWithWrappers } from "lib/tests/renderWithWrappers" -import React from "react" -import { View } from "react-native" -import { useSpace } from "../../hooks" -import { SpacingUnit, Theme } from "../../Theme" - -describe("space", () => { - const SpaceView = ({ name }: { name: SpacingUnit }) => { - const space = useSpace() - return - } - - it("returns the correct space with a Theme provider", () => { - const TestComponent = () => ( - - - - - - ) - - const tree = renderWithWrappers().root - expect(tree.findByType(View).props.style.marginLeft).toBe(10) - }) - - it("returns the correct space with a Theme provider in v2", () => { - const TestComponent = () => ( - - - <> - - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(3) - expect(margins[1]).toBe(60) - }) - - it("returns the correct space with a Theme provider in v3", () => { - const TestComponent = () => ( - - - <> - {/* @ts-ignore */} - - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(undefined) - expect(margins[1]).toBe(20) - }) - - it("returns the correct space with a Theme provider with override", () => { - const TestComponent = () => ( - - - <> - - - - - ) - const tree = renderWithWrappers().root - const margins = tree.findAllByType(View).map((view) => view.props.style.marginLeft) - expect(margins[0]).toBe(12) - }) -}) diff --git a/src/palette/helpers/styled.tsx b/src/palette/helpers/styled.tsx deleted file mode 100644 index b158495f232..00000000000 --- a/src/palette/helpers/styled.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import React from "react" -import { StyleProp, ViewStyle } from "react-native" - -export const artsyStyled =

}>(Component: React.ComponentType

) => ( - styleProps: StyleProp -) => (props: P) => diff --git a/src/palette/hooks.ts b/src/palette/hooks.ts deleted file mode 100644 index 80677b33205..00000000000 --- a/src/palette/hooks.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { usePaletteFlagStore } from "./PaletteFlag" -import { useTheme } from "./Theme" - -export const useColor = () => useTheme().color -export const useSpace = () => useTheme().space - -/** Returns a config specific to the current theme. */ -export const useThemeConfig = ({ v2, v3 }: { v2: T; v3: U }): U | T => { - const { theme = { id: "v2" } } = useTheme() - const allowV3 = usePaletteFlagStore((state) => state.allowV3) - return theme.id === "v2" ? v2 : allowV3 ? v3 : v2 -} diff --git a/src/palette/index.tsx b/src/palette/index.tsx index 60f3ba0329c..ed29f9aab9c 100644 --- a/src/palette/index.tsx +++ b/src/palette/index.tsx @@ -2,8 +2,6 @@ export * from "./elements" export * from "./helpers" export * from "./svgs" export * from "./Theme" -export * from "./hooks" -export * from "./ClassTheme" // Helpers import * as _AllIcons from "./svgs" diff --git a/src/palette/platform/primitives.ts b/src/palette/platform/primitives.ts new file mode 100644 index 00000000000..18e41f3ee20 --- /dev/null +++ b/src/palette/platform/primitives.ts @@ -0,0 +1,12 @@ +/* tslint:disable:completed-docs */ + +import styles, { ThemeProvider as NativeThemeProvider } from "styled-components/native" + +export const styled = { + Image: styles.Image, + Text: styles.Text, + View: styles.View, +} + +export const ThemeProvider = NativeThemeProvider +export const styledWrapper = styles as typeof styles diff --git a/src/palette/svgs/AddCircleFillIcon.tsx b/src/palette/svgs/AddCircleFillIcon.tsx index c907492ab4a..e331897f780 100644 --- a/src/palette/svgs/AddCircleFillIcon.tsx +++ b/src/palette/svgs/AddCircleFillIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** AddCircleFillIcon */ export const AddCircleFillIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/AlertCircleFillIcon.tsx b/src/palette/svgs/AlertCircleFillIcon.tsx index 0fbc34e9970..00698ab3908 100644 --- a/src/palette/svgs/AlertCircleFillIcon.tsx +++ b/src/palette/svgs/AlertCircleFillIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" +import { color } from "palette" import React from "react" import { Icon, IconProps, Path } from "./Icon" +/** AlertCircleFillIcon */ export const AlertCircleFillIcon: React.FC = ({ title = "AlertCircleFillIcon", ...props }) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( { - const color = useColor() - return ( - - - - ) -} - -export const ArrowUpCircleFillIcon: React.FC = (props) => +const FilledArrowCircle = ({ rotate, ...props }: IconProps & { rotate?: string }) => ( + + + +) -export const ArrowDownCircleFillIcon: React.FC = (props) => +/** ArrowUpCircleFillIcon */ +export const ArrowUpCircleFillIcon: React.FC = (props) => { + return +} +/** ArrowDownCircleFillIcon */ +export const ArrowDownCircleFillIcon: React.FC = (props) => { + return +} diff --git a/src/palette/svgs/ArrowDownCircleIcon.tsx b/src/palette/svgs/ArrowDownCircleIcon.tsx index dc8182f667c..07560846978 100644 --- a/src/palette/svgs/ArrowDownCircleIcon.tsx +++ b/src/palette/svgs/ArrowDownCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowDownCircleIcon */ export const ArrowDownCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowLeftCircleIcon.tsx b/src/palette/svgs/ArrowLeftCircleIcon.tsx index aa35775b6c3..d5f265e3d8b 100644 --- a/src/palette/svgs/ArrowLeftCircleIcon.tsx +++ b/src/palette/svgs/ArrowLeftCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowLeftCircleIcon */ export const ArrowLeftCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowRightCircleIcon.tsx b/src/palette/svgs/ArrowRightCircleIcon.tsx index bd77b71390d..148e6a63f69 100644 --- a/src/palette/svgs/ArrowRightCircleIcon.tsx +++ b/src/palette/svgs/ArrowRightCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowRightCircleIcon */ export const ArrowRightCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArrowUpCircleIcon.tsx b/src/palette/svgs/ArrowUpCircleIcon.tsx index 9de83cf8969..d13ce5f3b6d 100644 --- a/src/palette/svgs/ArrowUpCircleIcon.tsx +++ b/src/palette/svgs/ArrowUpCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArrowUpCircleIcon */ export const ArrowUpCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoBlackIcon.tsx b/src/palette/svgs/ArtsyLogoBlackIcon.tsx index 4427d6f32d6..e4baa13fba8 100644 --- a/src/palette/svgs/ArtsyLogoBlackIcon.tsx +++ b/src/palette/svgs/ArtsyLogoBlackIcon.tsx @@ -1,13 +1,13 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" interface ArtsyLogoBlackIconProps extends Omit { scale?: number } +/** ArtsyLogoBlackIcon */ export const ArtsyLogoBlackIcon: React.FC = ({ scale = 1, title = "Artsy", ...props }) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx index d11a4047147..60d72c65460 100644 --- a/src/palette/svgs/ArtsyLogoWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyLogoWhiteIcon.tsx @@ -1,6 +1,7 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" +/** ArtsyLogoWhiteIcon */ export const ArtsyLogoWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtsyMarkBlackIcon.tsx b/src/palette/svgs/ArtsyMarkBlackIcon.tsx index 7d8e8af7fbc..d17da9c7ae2 100644 --- a/src/palette/svgs/ArtsyMarkBlackIcon.tsx +++ b/src/palette/svgs/ArtsyMarkBlackIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** ArtsyMarkBlackIcon */ export const ArtsyMarkBlackIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx index 4ed51bfc338..9cddb933fc2 100644 --- a/src/palette/svgs/ArtsyMarkWhiteIcon.tsx +++ b/src/palette/svgs/ArtsyMarkWhiteIcon.tsx @@ -1,6 +1,7 @@ import React from "react" import { G, Icon, IconProps, Path } from "./Icon" +/** ArtsyMarkWhiteIcon */ export const ArtsyMarkWhiteIcon: React.FC = (props) => { return ( diff --git a/src/palette/svgs/ArtworkIcon.tsx b/src/palette/svgs/ArtworkIcon.tsx index c6d54a160fe..42faff054e3 100644 --- a/src/palette/svgs/ArtworkIcon.tsx +++ b/src/palette/svgs/ArtworkIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** ArtworkIcon */ export const ArtworkIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/DocumentIcon.tsx b/src/palette/svgs/DocumentIcon.tsx index 3c6cd9b6680..f68a4049746 100644 --- a/src/palette/svgs/DocumentIcon.tsx +++ b/src/palette/svgs/DocumentIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** DocumentIcon */ export const DocumentIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EnterIcon.tsx b/src/palette/svgs/EnterIcon.tsx index 2e933b5cf5e..acfd13b5de6 100644 --- a/src/palette/svgs/EnterIcon.tsx +++ b/src/palette/svgs/EnterIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EnterIcon */ export const EnterIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EnvelopeIcon.tsx b/src/palette/svgs/EnvelopeIcon.tsx index 83983ec88f1..53fd8b24f38 100644 --- a/src/palette/svgs/EnvelopeIcon.tsx +++ b/src/palette/svgs/EnvelopeIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** EnvelopeIcon */ export const EnvelopeIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/EyeOpenedIcon.tsx b/src/palette/svgs/EyeOpenedIcon.tsx index 8abc6f68475..bae70a5fd3c 100644 --- a/src/palette/svgs/EyeOpenedIcon.tsx +++ b/src/palette/svgs/EyeOpenedIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { G, Icon, IconProps, Path } from "./Icon" /** EyeOpenedIcon */ export const EyeOpenedIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/FacebookIcon.tsx b/src/palette/svgs/FacebookIcon.tsx index 3357ec9fd5a..878de5b6bc3 100644 --- a/src/palette/svgs/FacebookIcon.tsx +++ b/src/palette/svgs/FacebookIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** FacebookIcon */ export const FacebookIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/LoaderIcon.tsx b/src/palette/svgs/LoaderIcon.tsx index 9fe2a2bc544..08f4f97e812 100644 --- a/src/palette/svgs/LoaderIcon.tsx +++ b/src/palette/svgs/LoaderIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** LoaderIcon */ export const LoaderIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/LockIcon.tsx b/src/palette/svgs/LockIcon.tsx index e8b70499391..7db7a685564 100644 --- a/src/palette/svgs/LockIcon.tsx +++ b/src/palette/svgs/LockIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** LockIcon */ export const LockIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( @@ -16,3 +16,7 @@ export const LogoutIcon: React.FC = (props) => { ) } + +// TODO: remove this alias once clients have been updated +/** PowerIcon */ +export const PowerIcon = LogoutIcon diff --git a/src/palette/svgs/MagnifyingGlassIcon.tsx b/src/palette/svgs/MagnifyingGlassIcon.tsx index 9c0ee605f9b..295af4068d5 100644 --- a/src/palette/svgs/MagnifyingGlassIcon.tsx +++ b/src/palette/svgs/MagnifyingGlassIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** MagnifyingGlassIcon */ export const MagnifyingGlassIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/MessageIcon.tsx b/src/palette/svgs/MessageIcon.tsx index 7e355cfd1c5..9d82a9a9664 100644 --- a/src/palette/svgs/MessageIcon.tsx +++ b/src/palette/svgs/MessageIcon.tsx @@ -1,10 +1,10 @@ -import { useColor } from "palette/hooks" import React from "react" import { Path } from "react-native-svg" +import { color } from "../Theme" import { Icon, IconProps } from "./Icon" +/** MessageIcon */ export const MessageIcon: React.FC = (props) => { - const color = useColor() return ( = ({ ...props }) => { - const color = useColor() +/** MoneyFillIcon */ +export const MoneyFillIcon: React.SFC = ({ ...props }) => { return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { ) } + +// TODO: remove this alias once clients have been updated +/** BookIcon */ +export const BookIcon = PublicationIcon diff --git a/src/palette/svgs/QuestionCircleIcon.tsx b/src/palette/svgs/QuestionCircleIcon.tsx index 9f419df65c4..816d4f52a06 100644 --- a/src/palette/svgs/QuestionCircleIcon.tsx +++ b/src/palette/svgs/QuestionCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" /** QuestionCircleIcon */ export const QuestionCircleIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/TrashIcon.tsx b/src/palette/svgs/TrashIcon.tsx index f0bfbc0d2e6..7d75a34b8a5 100644 --- a/src/palette/svgs/TrashIcon.tsx +++ b/src/palette/svgs/TrashIcon.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Icon, IconProps, Path } from "./Icon" +/** TrashIcon */ export const TrashIcon: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => ( diff --git a/src/palette/svgs/XCircleIcon.tsx b/src/palette/svgs/XCircleIcon.tsx index d4e2c368103..1dce64c12dd 100644 --- a/src/palette/svgs/XCircleIcon.tsx +++ b/src/palette/svgs/XCircleIcon.tsx @@ -1,10 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../Theme" import { Circle, Icon, IconProps, Path } from "./Icon" /** XCircleIcon */ export const XCircleIcon: React.FC = (props) => { - const color = useColor() return ( diff --git a/src/palette/svgs/sf/BoltCircleFill.tsx b/src/palette/svgs/sf/BoltCircleFill.tsx index 8d5ce03ac6c..2f2fa767cf1 100644 --- a/src/palette/svgs/sf/BoltCircleFill.tsx +++ b/src/palette/svgs/sf/BoltCircleFill.tsx @@ -1,11 +1,10 @@ -import { useColor } from "palette/hooks" import React from "react" import { EMaskUnits } from "react-native-svg" +import { color } from "../../Theme" import { Icon, IconProps, Mask, Path, Rect } from "../Icon" /** BoltCircleFill */ export const BoltCircleFill: React.FC = (props) => { - const color = useColor() console.warn(EMaskUnits) return ( diff --git a/src/palette/svgs/sf/BoltFill.tsx b/src/palette/svgs/sf/BoltFill.tsx index db5388971f6..d1cfb1e8e69 100644 --- a/src/palette/svgs/sf/BoltFill.tsx +++ b/src/palette/svgs/sf/BoltFill.tsx @@ -1,9 +1,9 @@ -import { useColor } from "palette/hooks" import React from "react" +import { color } from "../../Theme" import { Icon, IconProps, Path } from "../Icon" +/** BoltFill */ export const BoltFill: React.FC = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( = (props) => { - const color = useColor() return ( ({ })) jest.mock("./lib/NativeModules/Events.tsx", () => ({ + postEvent: jest.fn(), userHadMeaningfulInteraction: jest.fn(), + NativeAnalyticsProvider: { + postEvent: jest.fn(), + }, })) jest.mock("react-native-share", () => ({ @@ -269,6 +273,7 @@ function getNativeModules(): OurNativeModules { presentModal: jest.fn(), }, AREventsModule: { + postEvent: jest.fn(), requestAppStoreRating: jest.fn(), }, ArtsyNativeModule: { @@ -514,28 +519,7 @@ jest.mock("react-native-config", () => ({ })) jest.mock("react-native-view-shot", () => ({})) - -// MOCKS FOR TRACKING -jest.mock("@segment/analytics-react-native", () => ({ - setup: () => null, - identify: () => null, - reset: () => null, -})) - -jest.mock("@segment/analytics-react-native-appboy", () => ({})) - -jest.mock("lib/utils/track/SegmentTrackingProvider", () => ({ - SegmentTrackingProvider: { - setup: () => null, - identify: () => null, - postEvent: () => null, - }, -})) - -jest.mock("lib/utils/track/providers.tsx", () => ({ - postEventToProviders: jest.fn(), - _addTrackingProvider: jest.fn(), -})) +jest.mock("@segment/analytics-react-native", () => ({})) jest.mock("react-native-push-notification", () => ({ configure: jest.fn(), diff --git a/src/storybook/addons.js b/src/storybook/addons.js deleted file mode 100644 index 38233e7be5f..00000000000 --- a/src/storybook/addons.js +++ /dev/null @@ -1 +0,0 @@ -import "@storybook/addon-actions/register" diff --git a/src/storybook/helpers.tsx b/src/storybook/helpers.tsx deleted file mode 100644 index 09a45d9af6a..00000000000 --- a/src/storybook/helpers.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { Spacer } from "palette" -import React from "react" -import { FlatList, ScrollView } from "react-native" - -export const DList = ({ - data, - keyExtractor, - renderItem, -}: { - data: ItemT[] - keyExtractor?: (item: ItemT, index: number) => string - renderItem: (info: { item: ItemT; index: number }) => React.ReactElement | null -}) => ( - `${item}`)} - renderItem={renderItem} - ItemSeparatorComponent={() => } - contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} - /> -) - -export const List = ({ children }: { children: React.ReactElement[] }) => ( - `${index}`} - renderItem={({ item: child }) => child} - ItemSeparatorComponent={() => } - contentContainerStyle={{ flexGrow: 1, alignItems: "center", justifyContent: "center" }} - /> -) - -export const CenterView = ({ children }: { children: React.ReactNode }) => { - return ( - - {children} - - ) -} diff --git a/src/storybook/index.js b/src/storybook/index.js deleted file mode 100644 index dd0383b01ce..00000000000 --- a/src/storybook/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import { AppRegistry } from "react-native" - -import StorybookUIRoot from "./storybook-ui" - -AppRegistry.registerComponent("Artsy", () => StorybookUIRoot) diff --git a/src/storybook/package.json b/src/storybook/package.json deleted file mode 100644 index 38803d2c8a1..00000000000 --- a/src/storybook/package.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "storybook" -} diff --git a/src/storybook/rn-addons.js b/src/storybook/rn-addons.js deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/storybook/storyLoader.js b/src/storybook/storyLoader.js deleted file mode 100644 index 15ea6f5ed2b..00000000000 --- a/src/storybook/storyLoader.js +++ /dev/null @@ -1,15 +0,0 @@ -// Auto-generated file created by react-native-storybook-loader -// Do not edit. -// -// https://github.com/elderfo/react-native-storybook-loader.git - -function loadStories() { - require("../palette/elements/Button/Button.stories") -} - -const stories = ["../palette/elements/Button/Button.stories"] - -module.exports = { - loadStories, - stories, -} diff --git a/src/storybook/storybook-ui.js b/src/storybook/storybook-ui.js deleted file mode 100644 index b552b47f82d..00000000000 --- a/src/storybook/storybook-ui.js +++ /dev/null @@ -1,17 +0,0 @@ -import { addDecorator, configure, getStorybookUI } from "@storybook/react-native" -import "./rn-addons" -import { loadStories } from "./storyLoader" - -// import stories -configure(() => { - loadStories() -}, module) - -// Refer to https://github.com/storybookjs/storybook/tree/master/app/react-native#start-command-parameters -// To find allowed options for getStorybookUI -const StorybookUIRoot = getStorybookUI({ - onDeviceUI: false, - asyncStorage: null, -}) - -export default StorybookUIRoot diff --git a/tsconfig.json b/tsconfig.json index 8084851eee4..97fe90f321f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,20 +5,14 @@ "baseUrl": "src", "experimentalDecorators": true, "incremental": true, - "lib": [ - "es2015" - ], + "lib": ["es2015"], "jsx": "react", "module": "commonjs", "moduleResolution": "node", "noUnusedLocals": true, "noUnusedParameters": true, "outDir": "build", - "plugins": [ - { - "name": "typescript-styled-plugin" - } - ], + "plugins": [{ "name": "typescript-styled-plugin" }], "pretty": true, "resolveJsonModule": true, "strict": true, @@ -27,11 +21,7 @@ "noFallthroughCasesInSwitch": true, "strictFunctionTypes": true, "target": "es6", - "types": [ - "jest", - "react", - "react-native" - ], + "types": ["jest", "react", "react-native"], "noEmit": true }, "include": [ diff --git a/typings/storybook.d.ts b/typings/storybook.d.ts deleted file mode 100644 index eb0368c7193..00000000000 --- a/typings/storybook.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare module "storybook-router" { - global { - interface Window { - location: any - } - } -} diff --git a/typings/styled-components.native.d.ts b/typings/styled-components.native.d.ts index 9bb2ab6616e..f73f24c063d 100644 --- a/typings/styled-components.native.d.ts +++ b/typings/styled-components.native.d.ts @@ -1,14 +1,12 @@ declare module "styled-components/native" { - import * as React from "react" import * as ReactNative from "react-native" + import * as React from "react" export { css, DefaultTheme, isStyledComponent, ThemeConsumer, - // @ts-ignore - ThemeContext, ThemeProps, ThemeProvider, withTheme, @@ -19,7 +17,6 @@ declare module "styled-components/native" { isStyledComponent, ThemedCssFunction, ThemedStyledFunction, - ThemedStyledInterface, ThemeProviderComponent, WithThemeFnInterface, } from "styled-components" @@ -32,11 +29,13 @@ declare module "styled-components/native" { > = ThemedStyledFunction, T> // Copied over from "ThemedBaseStyledInterface" in index.d.ts in order to remove DOM element typings - type ReactNativeThemedBaseStyledInterface = >( - // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` - // causes tests to fail in TS 3.1 - component: C - ) => ThemedStyledFunction, T> + interface ReactNativeThemedBaseStyledInterface { + >( + // unfortunately using a conditional type to validate that it can receive a `theme?: Theme` + // causes tests to fail in TS 3.1 + component: C + ): ThemedStyledFunction, T> + } type ReactNativeThemedStyledInterface = ReactNativeThemedBaseStyledInterface> @@ -88,11 +87,6 @@ declare module "styled-components/native" { css: ThemedCssFunction - withTheme: WithThemeFnInterface - ThemeProvider: ThemeProviderComponent - ThemeConsumer: React.Consumer - ThemeContext: React.Context - // This could be made to assert `target is StyledComponent` instead, but that feels not type safe isStyledComponent: typeof isStyledComponent } diff --git a/yarn.lock b/yarn.lock index 59ed4f393ce..ce6b301fbe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,22 +2,27 @@ # yarn lockfile v1 -"@artsy/cohesion@2.13.0": - version "2.13.0" - resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.13.0.tgz#418ee07bdba21451445668f9f71c617e7009f60f" - integrity sha512-TyoDJW6ctpN/ZsV9d7tD9YoPr3B7xVnoAyL6ag0xFxH1TZHK6nNIxpUneUx812K6jyWLZkwOnNUfjETEu/45tA== +"@artsy/auto-config@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@artsy/auto-config/-/auto-config-1.0.2.tgz#b79f6fd0d0bda0c5e0764ced55e014cf58174d6f" + integrity sha512-mJyuKNDMYZcgc2oLIkvmpVIr1RexklV71JmU+to5qs3Y9pv5dsj4WHl8+wf9g74EQNOyhWH2SYMGBm1JoPYh/Q== + +"@artsy/cohesion@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@artsy/cohesion/-/cohesion-2.7.0.tgz#974d34831d8a66c834a83a2975f7c03e6203b9f4" + integrity sha512-i1t0vUYhHqYgw2IamNKhfqSHfmOIZmXRXnnxXaQBk+B7ZTUBeDhBduxfHfgA2W29sIVEr5N1ne2/vmpgrPGoog== dependencies: core-js "3" -"@artsy/palette-tokens@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-2.1.2.tgz#0225ad2646009a0a3fde0a014dd7d3477c561bf1" - integrity sha512-6/wb2305/pqCpEKLABUG0m3dxLpPG8xp4Gp1YTuVU7HwdZ8zvS6HC2d2sZEeVIgLGjFedQzSj2TQe3R2XqRstg== +"@artsy/palette-tokens@^1.3.1": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@artsy/palette-tokens/-/palette-tokens-1.3.1.tgz#8e1f4652f9ae53bf5567630e036b650355ec9c95" + integrity sha512-aKkIKkYkK2+AEUhoIuiXJFaac7QkAbkfA5NKWDBP3H0yj/7ZZ8p8+qWL+aa6w9kuMLZuQGuy2JkvS3W/G1MWjw== -"@artsy/update-repo@0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.1.tgz#7b82e393c7eee59f60deaf7fc6f77661e36dbd04" - integrity sha512-sco76cOeJbp/Opv9NsZi2Ra9FcDX6PFjms5gqdlokgBA3ig/lIiBXVEB26alMMuckrVYjYtL1Y86EktofH5pfg== +"@artsy/update-repo@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@artsy/update-repo/-/update-repo-0.2.0.tgz#c978d475fa4e2e1be0cc40fe57a7581f0d8f690b" + integrity sha512-S7pM46T6/pAaHVD5R5nCc4UXIQQo3kG4KQk2B75RYbOb8LMk7dyFKwsm36R3nriv7Xhb4E2jEN6J/srpataLFQ== dependencies: "@octokit/rest" "^17.2.0" kleur "^3.0.3" @@ -79,13 +84,6 @@ deepmerge "^4.0.0" tslib "1.10.0" -"@babel/code-frame@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" @@ -100,13 +98,6 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -114,11 +105,6 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.5", "@babel/compat-data@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== - "@babel/core@^7.0.0": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" @@ -159,6 +145,25 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.1.2": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.6.tgz#3733cbee4317429bc87c62b29cf8587dba7baeb3" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helpers" "^7.1.5" + "@babel/parser" "^7.1.6" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.1.6" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.12.9": version "7.12.9" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" @@ -225,6 +230,16 @@ source-map "^0.5.0" trim-right "^1.0.1" +"@babel/generator@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.6.tgz#001303cf87a5b9d093494a4bf251d7b5d03d3999" + dependencies: + "@babel/types" "^7.1.6" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/generator@^7.11.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" @@ -243,15 +258,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - "@babel/generator@^7.5.0": version "7.8.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.7.tgz#870b3cf7984f5297998152af625c4f3e341400f7" @@ -279,13 +285,6 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" @@ -294,14 +293,6 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-builder-react-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.0.0.tgz#fa154cb53eb918cf2a9a7ce928e29eb649c5acdb" @@ -319,16 +310,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -352,18 +333,6 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" -"@babel/helper-create-class-features-plugin@^7.14.5": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz#f114469b6c06f8b5c59c6c4e74621f5085362542" - integrity sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-create-class-features-plugin@^7.8.3": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" @@ -376,14 +345,6 @@ "@babel/helper-replace-supers" "^7.8.6" "@babel/helper-split-export-declaration" "^7.8.3" -"@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" - "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -393,20 +354,6 @@ "@babel/types" "^7.0.0" lodash "^4.17.10" -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" @@ -415,13 +362,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz#8aa72e708205c7bb643e45c73b4386cdf2a1f645" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-function-name@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" @@ -440,15 +380,6 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-function-name@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" @@ -472,13 +403,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -493,13 +417,6 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" @@ -521,13 +438,6 @@ dependencies: "@babel/types" "^7.12.7" -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" @@ -556,13 +466,6 @@ dependencies: "@babel/types" "^7.12.5" -"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-module-imports@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" @@ -597,20 +500,6 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-module-transforms@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" @@ -638,13 +527,6 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" @@ -662,11 +544,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== - "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" @@ -690,15 +567,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz#51439c913612958f54a987a4ffc9ee587a2045d6" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-wrap-function" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-replace-supers@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.1.0.tgz#5fc31de522ec0ef0899dc9b3e7cf6a5dd655f362" @@ -729,16 +597,6 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helper-replace-supers@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" @@ -764,13 +622,6 @@ dependencies: "@babel/types" "^7.12.1" -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-simple-access@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" @@ -779,13 +630,6 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-split-export-declaration@^7.0.0", "@babel/helper-split-export-declaration@^7.4.0": version "7.4.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" @@ -800,13 +644,6 @@ dependencies: "@babel/types" "^7.11.0" -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" @@ -819,11 +656,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" @@ -834,11 +666,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - "@babel/helper-wrap-function@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.1.0.tgz#8cf54e9190706067f016af8f75cb3df829cc8c66" @@ -849,16 +676,6 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" -"@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz#5919d115bf0fe328b8a5d63bcb610f51601f2bff" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/helpers@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" @@ -868,6 +685,14 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.1.2" +"@babel/helpers@^7.1.5": + version "7.1.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.5.tgz#68bfc1895d685f2b8f1995e788dbfe1f6ccb1996" + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.5" + "@babel/types" "^7.1.5" + "@babel/helpers@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" @@ -913,15 +738,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/highlight@^7.8.3": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" @@ -936,6 +752,10 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.2.tgz#b4521a400cb5a871eab3890787b4bc1326d38d91" integrity sha512-9fJTDipQFvlfSVdD/JBtkiY0br9BtfvW2R8wo6CX/Ej2eMuV0gWPk1M67Mt3eggQvBqYW1FCEk8BN7WvGm/g5g== +"@babel/parser@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.6.tgz#16e97aca1ec1062324a01c5a6a7d0df8dd189854" + "@babel/parser@^7.10.4", "@babel/parser@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" @@ -946,25 +766,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.7.tgz#fee7b39fe809d0e73e5b25eecaf5780ef3d73056" integrity sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg== -"@babel/parser@^7.14.5", "@babel/parser@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== - "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-external-helpers@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-external-helpers/-/plugin-external-helpers-7.0.0.tgz#61ee7ba5dba27d7cad72a13d46bec23c060b762e" @@ -972,15 +778,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-proposal-async-generator-functions@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz#784a48c3d8ed073f65adcf30b57bcbf6c8119ace" - integrity sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-proposal-class-properties@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" @@ -1001,23 +798,6 @@ "@babel/helper-replace-supers" "^7.1.0" "@babel/plugin-syntax-class-properties" "^7.0.0" -"@babel/plugin-proposal-class-properties@^7.14.5", "@babel/plugin-proposal-class-properties@^7.7.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz#158e9e10d449c3849ef3ecde94a03d9f1841b681" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-proposal-decorators@7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" @@ -1027,14 +807,6 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-decorators" "^7.10.4" -"@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz#0c6617df461c0c1f8fff3b47cd59772360101d2c" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.0.0.tgz#a057bbfd4649facfe39f33a537e18554bdd2b5da" @@ -1043,30 +815,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-export-default-from" "^7.0.0" -"@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz#dbad244310ce6ccd083072167d8cea83a52faf76" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz#38de60db362e83a3d8c944ac858ddf9f0c2239eb" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz#6e6229c2a99b02ab2915f82571e0cc646a40c738" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.0.0.tgz#b72ec31adf612d062dc0348316246127a451e45f" @@ -1075,22 +823,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.0.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz#ee38589ce00e2cc59b299ec3ea406fcd3a0fdaf6" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz#83631bf33d9a51df184c2102a069ac0c58c05f18" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-proposal-object-rest-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" @@ -1099,17 +831,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@^7.14.7", "@babel/plugin-proposal-object-rest-spread@^7.6.2": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-proposal-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" @@ -1118,14 +839,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" -"@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz#939dd6eddeff3a67fdf7b3f044b5347262598c3c" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.0.0.tgz#3d344d4152253379b8758e7d041148e8787c4a9d" @@ -1134,48 +847,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-chaining" "^7.0.0" -"@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz#fa83651e60a360e3f13797eef00b8d519695b603" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz#37446495996b2945f30f5be5b60d5e2aa4f5792d" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz#9f65a4d0493a940b4c01f8aa9d3f1894a587f636" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-create-class-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - -"@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz#0f95ee0e757a5d647f378daa0eca7e93faa8bbe8" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-bigint@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" @@ -1190,20 +861,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-decorators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" @@ -1218,13 +875,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-export-default-from@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.0.0.tgz#084b639bce3d42f3c5bf3f68ccb42220bb2d729d" @@ -1232,13 +882,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.0.0.tgz#70638aeaad9ee426bc532e51523cff8ff02f6f17" @@ -1260,13 +903,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-jsx@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0.tgz#034d5e2b4e14ccaea2e4c137af7e4afb39375ffd" @@ -1281,13 +917,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.0.0.tgz#b60931d5a15da82625fff6657c39419969598743" @@ -1295,20 +924,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -1316,13 +931,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" @@ -1330,13 +938,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - "@babel/plugin-syntax-optional-chaining@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.0.0.tgz#1e6ecba124310b5d3a8fc1e00d50b1c4c2e05e68" @@ -1344,27 +945,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-top-level-await@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-syntax-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz#460ba9d77077653803c3dd2e673f76d66b4029e5" @@ -1386,13 +966,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz#f7187d9588a768dd080bf4c9ffe117ea62f7862a" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-async-to-generator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.1.0.tgz#109e036496c51dd65857e16acab3bafdf3c57811" @@ -1402,15 +975,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" -"@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz#72c789084d8f2094acb945633943ef8443d39e67" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-remap-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" @@ -1418,13 +982,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz#e48641d999d4bc157a67ef336aeb54bc44fd3ad4" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-block-scoping@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" @@ -1433,13 +990,6 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" -"@babel/plugin-transform-block-scoping@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz#8cc63e61e50f42e078e6f09be775a75f23ef9939" - integrity sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-classes@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.1.0.tgz#ab3f8a564361800cbc8ab1ca6f21108038432249" @@ -1454,19 +1004,6 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" -"@babel/plugin-transform-classes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz#0e98e82097b38550b03b483f9b51a78de0acb2cf" - integrity sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" - "@babel/plugin-transform-computed-properties@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" @@ -1474,13 +1011,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz#1b9d78987420d11223d41195461cc43b974b204f" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-destructuring@^7.0.0": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.1.3.tgz#e69ff50ca01fac6cb72863c544e516c2b193012f" @@ -1488,28 +1018,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz#0ad58ed37e23e22084d109f185260835e5557576" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz#2f6bf76e46bdf8043b4e7e16cf24532629ba0c7a" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz#365a4844881bdf1501e3a9f0270e7f0f91177954" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.1.0.tgz#9c34c2ee7fd77e02779cfa37e403a2e1003ccc73" @@ -1518,14 +1026,6 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz#5154b8dd6a3dfe6d90923d61724bd3deeb90b493" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-flow-strip-types@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" @@ -1549,13 +1049,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz#dae384613de8f77c196a8869cbf602a44f7fc0eb" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-function-name@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.1.0.tgz#29c5550d5c46208e7f730516d41eeddd4affadbb" @@ -1564,14 +1057,6 @@ "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz#e81c65ecb900746d7f31802f6bed1f52d915d6f2" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== - dependencies: - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" @@ -1579,13 +1064,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz#41d06c7ff5d4d09e3cf4587bd3ecf3930c730f78" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-member-expression-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.0.0.tgz#96a265bf61a9ed6f75c39db0c30d41ef7aabf072" @@ -1593,22 +1071,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz#b39cd5212a2bf235a617d320ec2b48bcc091b8a7" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz#4fd9ce7e3411cb8b83848480b7041d83004858f7" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - "@babel/plugin-transform-modules-commonjs@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.1.0.tgz#0a9d86451cbbfb29bd15186306897c67f6f9a05c" @@ -1618,49 +1080,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" -"@babel/plugin-transform-modules-commonjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz#7aaee0ea98283de94da98b28f8c35701429dad97" - integrity sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz#c75342ef8b30dcde4295d3401aae24e65638ed29" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== - dependencies: - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz#fb662dfee697cce274a7cda525190a79096aa6e0" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== - dependencies: - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.14.7": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz#60c06892acf9df231e256c24464bfecb0908fd4e" - integrity sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - -"@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz#31bdae8b925dc84076ebfcd2a9940143aed7dbf8" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-object-assign@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.0.0.tgz#fca6d7500d9675c42868b8f3882979201b9a5ad8" @@ -1676,14 +1095,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-replace-supers" "^7.1.0" -"@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz#d0b5faeac9e98597a161a9cf78c527ed934cdc45" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/plugin-transform-parameters@^7.0.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.1.0.tgz#44f492f9d618c9124026e62301c296bf606a7aed" @@ -1693,13 +1104,6 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz#49662e86a1f3ddccac6363a7dfb1ff0a158afeb3" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-property-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.0.0.tgz#0b95a91dbd1f0be5b5a99ed86571ef5b5ae77009" @@ -1707,20 +1111,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz#0ddbaa1f83db3606f1cdf4846fa1dfb473458b34" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-react-constant-elements@^7.2.0": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" - integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-react-display-name@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.0.0.tgz#93759e6c023782e52c2da3b75eca60d4f10533ee" @@ -1760,20 +1150,6 @@ dependencies: regenerator-transform "^0.13.3" -"@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz#9676fd5707ed28f522727c5b3c0aa8544440b04f" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz#c44589b661cfdbef8d4300dcc7469dffa92f8304" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-runtime@7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz#f108bc8e0cf33c37da031c097d1df470b3a293fc" @@ -1801,13 +1177,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz#97f13855f1409338d8cadcbaca670ad79e091a58" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-spread@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" @@ -1815,14 +1184,6 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz#6bd40e57fe7de94aa904851963b5616652f73144" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" - "@babel/plugin-transform-sticky-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" @@ -1831,13 +1192,6 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz#5b617542675e8b7761294381f3c28c633f40aeb9" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-template-literals@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" @@ -1846,20 +1200,6 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz#a5f2bc233937d8453885dc736bdd8d9ffabf3d93" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz#39af2739e989a2bd291bf6b53f16981423d457d4" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-typescript@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz#d92cc0af504d510e26a754a7dbc2e5c8cd9c7ab4" @@ -1878,13 +1218,6 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-typescript" "^7.8.3" -"@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/plugin-transform-unicode-regex@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" @@ -1894,14 +1227,6 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz#4cd09b6c8425dd81255c7ceb3fb1836e7414382e" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/polyfill@^7.2.5": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.12.1.tgz#1f2d6371d1261bbd961f3c5d5909150e12d0bd96" @@ -1910,96 +1235,6 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.4.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.7.tgz#5c70b22d4c2d893b03d8c886a5c17422502b932a" - integrity sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA== - dependencies: - "@babel/compat-data" "^7.14.7" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-plugin-utils" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-async-generator-functions" "^7.14.7" - "@babel/plugin-proposal-class-properties" "^7.14.5" - "@babel/plugin-proposal-class-static-block" "^7.14.5" - "@babel/plugin-proposal-dynamic-import" "^7.14.5" - "@babel/plugin-proposal-export-namespace-from" "^7.14.5" - "@babel/plugin-proposal-json-strings" "^7.14.5" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5" - "@babel/plugin-proposal-numeric-separator" "^7.14.5" - "@babel/plugin-proposal-object-rest-spread" "^7.14.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.5" - "@babel/plugin-proposal-optional-chaining" "^7.14.5" - "@babel/plugin-proposal-private-methods" "^7.14.5" - "@babel/plugin-proposal-private-property-in-object" "^7.14.5" - "@babel/plugin-proposal-unicode-property-regex" "^7.14.5" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.14.5" - "@babel/plugin-transform-async-to-generator" "^7.14.5" - "@babel/plugin-transform-block-scoped-functions" "^7.14.5" - "@babel/plugin-transform-block-scoping" "^7.14.5" - "@babel/plugin-transform-classes" "^7.14.5" - "@babel/plugin-transform-computed-properties" "^7.14.5" - "@babel/plugin-transform-destructuring" "^7.14.7" - "@babel/plugin-transform-dotall-regex" "^7.14.5" - "@babel/plugin-transform-duplicate-keys" "^7.14.5" - "@babel/plugin-transform-exponentiation-operator" "^7.14.5" - "@babel/plugin-transform-for-of" "^7.14.5" - "@babel/plugin-transform-function-name" "^7.14.5" - "@babel/plugin-transform-literals" "^7.14.5" - "@babel/plugin-transform-member-expression-literals" "^7.14.5" - "@babel/plugin-transform-modules-amd" "^7.14.5" - "@babel/plugin-transform-modules-commonjs" "^7.14.5" - "@babel/plugin-transform-modules-systemjs" "^7.14.5" - "@babel/plugin-transform-modules-umd" "^7.14.5" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.14.7" - "@babel/plugin-transform-new-target" "^7.14.5" - "@babel/plugin-transform-object-super" "^7.14.5" - "@babel/plugin-transform-parameters" "^7.14.5" - "@babel/plugin-transform-property-literals" "^7.14.5" - "@babel/plugin-transform-regenerator" "^7.14.5" - "@babel/plugin-transform-reserved-words" "^7.14.5" - "@babel/plugin-transform-shorthand-properties" "^7.14.5" - "@babel/plugin-transform-spread" "^7.14.6" - "@babel/plugin-transform-sticky-regex" "^7.14.5" - "@babel/plugin-transform-template-literals" "^7.14.5" - "@babel/plugin-transform-typeof-symbol" "^7.14.5" - "@babel/plugin-transform-unicode-escapes" "^7.14.5" - "@babel/plugin-transform-unicode-regex" "^7.14.5" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.5" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.15.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - "@babel/preset-typescript@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.12.7.tgz#fc7df8199d6aae747896f1e6c61fc872056632a3" @@ -2043,13 +1278,6 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.8.4": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.6.tgz#535203bc0892efc7dec60bdc27b2ecf6e409062d" - integrity sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg== - dependencies: - regenerator-runtime "^0.13.4" - "@babel/runtime@^7.3.1": version "7.4.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.4.5.tgz#582bb531f5f9dc67d2fcb682979894f75e253f12" @@ -2114,15 +1342,6 @@ "@babel/parser" "^7.12.7" "@babel/types" "^7.12.7" -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" @@ -2162,10 +1381,24 @@ globals "^11.1.0" lodash "^4.17.10" -"@babel/traverse@^7.10.4": - version "7.11.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" - integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== +"@babel/traverse@^7.1.5", "@babel/traverse@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.6.tgz#c8db9963ab4ce5b894222435482bd8ea854b7b5c" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.6" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.6" + "@babel/types" "^7.1.6" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/traverse@^7.10.4": + version "7.11.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" + integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== dependencies: "@babel/code-frame" "^7.10.4" "@babel/generator" "^7.11.5" @@ -2192,21 +1425,6 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5": - version "7.14.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" @@ -2231,6 +1449,14 @@ lodash "^4.17.11" to-fast-properties "^2.0.0" +"@babel/types@^7.1.5", "@babel/types@^7.1.6": + version "7.1.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.6.tgz#0adb330c3a281348a190263aceb540e10f04bcce" + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.11.5": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -2249,14 +1475,6 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.14.5", "@babel/types@^7.4.4": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" @@ -2299,49 +1517,6 @@ version "0.1.6" resolved "https://registry.yarnpkg.com/@emmetio/extract-abbreviation/-/extract-abbreviation-0.1.6.tgz#e4a9856c1057f0aff7d443b8536477c243abe28c" -"@emotion/cache@^10.0.27": - version "10.0.29" - resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-10.0.29.tgz#87e7e64f412c060102d589fe7c6dc042e6f9d1e0" - integrity sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ== - dependencies: - "@emotion/sheet" "0.9.4" - "@emotion/stylis" "0.8.5" - "@emotion/utils" "0.11.3" - "@emotion/weak-memoize" "0.2.5" - -"@emotion/core@^10.0.20": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.1.1.tgz#c956c1365f2f2481960064bcb8c4732e5fb612c3" - integrity sha512-ZMLG6qpXR8x031NXD8HJqugy/AZSkAuMxxqB46pmAR7ze47MhNJ56cdoX243QPZdGctrdfo+s08yZTiwaUcRKA== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/cache" "^10.0.27" - "@emotion/css" "^10.0.27" - "@emotion/serialize" "^0.11.15" - "@emotion/sheet" "0.9.4" - "@emotion/utils" "0.11.3" - -"@emotion/css@^10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.27.tgz#3a7458198fbbebb53b01b2b87f64e5e21241e14c" - integrity sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw== - dependencies: - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - babel-plugin-emotion "^10.0.27" - -"@emotion/hash@0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.8.0.tgz#bbbff68978fefdbe68ccb533bc8cbe1d1afb5413" - integrity sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow== - -"@emotion/is-prop-valid@0.8.8": - 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@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -2354,84 +1529,11 @@ resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" integrity sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg== -"@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/native@^10.0.14": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/native/-/native-10.0.27.tgz#67c2c0ceeeed873c849c611d9a6497a006d43a8f" - integrity sha512-3qxR2XFizGfABKKbX9kAYc0PHhKuCEuyxshoq3TaMEbi9asWHdQVChg32ULpblm4XAf9oxaitAU7J9SfdwFxtw== - dependencies: - "@emotion/primitives-core" "10.0.27" - -"@emotion/primitives-core@10.0.27": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/primitives-core/-/primitives-core-10.0.27.tgz#7a5fae07fe06a046ced597f5c0048f22d5c45842" - integrity sha512-fRBEDNPSFFOrBJ0OcheuElayrNTNdLF9DzMxtL0sFgsCFvvadlzwJHhJMSwEJuxwARm9GhVLr1p8G8JGkK98lQ== - dependencies: - css-to-react-native "^2.2.1" - -"@emotion/serialize@^0.11.15", "@emotion/serialize@^0.11.16": - version "0.11.16" - resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.16.tgz#dee05f9e96ad2fb25a5206b6d759b2d1ed3379ad" - integrity sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg== - dependencies: - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/unitless" "0.7.5" - "@emotion/utils" "0.11.3" - csstype "^2.5.7" - -"@emotion/sheet@0.9.4": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-0.9.4.tgz#894374bea39ec30f489bbfc3438192b9774d32e5" - integrity sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA== - -"@emotion/styled-base@^10.0.27": - version "10.0.31" - resolved "https://registry.yarnpkg.com/@emotion/styled-base/-/styled-base-10.0.31.tgz#940957ee0aa15c6974adc7d494ff19765a2f742a" - integrity sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/is-prop-valid" "0.8.8" - "@emotion/serialize" "^0.11.15" - "@emotion/utils" "0.11.3" - -"@emotion/styled@^10.0.17": - version "10.0.27" - resolved "https://registry.yarnpkg.com/@emotion/styled/-/styled-10.0.27.tgz#12cb67e91f7ad7431e1875b1d83a94b814133eaf" - integrity sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q== - dependencies: - "@emotion/styled-base" "^10.0.27" - babel-plugin-emotion "^10.0.27" - -"@emotion/stylis@0.8.5": - version "0.8.5" - resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" - integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== - -"@emotion/unitless@0.7.5": - version "0.7.5" - resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" - integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== - "@emotion/unitless@^0.7.0": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" integrity sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg== -"@emotion/utils@0.11.3": - version "0.11.3" - resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.11.3.tgz#a759863867befa7e583400d322652a3f44820924" - integrity sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw== - -"@emotion/weak-memoize@0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" - integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== - "@expo/react-native-action-sheet@^3.8.0": version "3.8.0" resolved "https://registry.yarnpkg.com/@expo/react-native-action-sheet/-/react-native-action-sheet-3.8.0.tgz#0db8b70ea8550ceb2983abda8584efa3a61d7389" @@ -2472,14 +1574,6 @@ dependencies: "@hapi/hoek" "^8.3.0" -"@hypnosphi/create-react-context@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@hypnosphi/create-react-context/-/create-react-context-0.3.1.tgz#f8bfebdc7665f5d426cba3753e0e9c7d3154d7c6" - integrity sha512-V1klUed202XahrWJLLOT3EXNeCpFHCcJntdFGI15ntCwau+jfT386w7OFTMaCqOgXUH1fa0w/I1oZs+i/Rfr0A== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - "@invertase/react-native-apple-authentication@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@invertase/react-native-apple-authentication/-/react-native-apple-authentication-2.1.2.tgz#af5ffde838a0e3151364b80418f6d25668a05107" @@ -3358,16 +2452,6 @@ resolved "https://registry.yarnpkg.com/@ptomasroos/react-native-multi-slider/-/react-native-multi-slider-2.2.2.tgz#35a97fb8c355627c6a2ded010b360ac5728b44ad" integrity sha512-HWyCnRD3Z3SbHK2FLWYmBBqd1B4iXipeKv1+AK0FoY/CElEDTEixHE8hN60TsqxalPrznn798LE2Q4tHuCiyaA== -"@reach/router@^1.2.1": - version "1.3.4" - resolved "https://registry.yarnpkg.com/@reach/router/-/router-1.3.4.tgz#d2574b19370a70c80480ed91f3da840136d10f8c" - integrity sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA== - dependencies: - create-react-context "0.3.0" - invariant "^2.2.3" - prop-types "^15.6.1" - react-lifecycles-compat "^3.0.4" - "@react-native-community/async-storage@1.6.3": version "1.6.3" resolved "https://registry.yarnpkg.com/@react-native-community/async-storage/-/async-storage-1.6.3.tgz#1a713e8c5cacd543ab8539080a5ce57ad917da88" @@ -3624,15 +2708,15 @@ lodash "^4.17.15" lodash-es "^4.17.15" -"@segment/analytics-react-native-appboy@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.5.0.tgz#0aa635710cf6d8198990f9cf5d27112af1f9ed82" - integrity sha512-de4NCfopobxziH/sDmGEsZ7VWevNObkFMtDsqhmrbYrjRMs4LGJ/GWo2TX0GhzYqPJurBrNPIoiQlrTaX7rIfg== +"@segment/analytics-react-native-appboy@^1.4.8": + version "1.4.8" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native-appboy/-/analytics-react-native-appboy-1.4.8.tgz#ecbbeb658036975352d84d197d7fc099e02b871e" + integrity sha512-czX4H1/cfDhWeLL9I4MlbqxXT/xqaNpVw5uo70GgHD5ZZOEB1Y3hC5g81oBwgh6G/y/cn7ZS/XXCmJhG4EV8Gw== -"@segment/analytics-react-native@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.5.0.tgz#14538b8c018202ef62daf8c5b3898312a057fbde" - integrity sha512-hW93MKffFfkqNec615jQUB5wJHb5KyIcZitIVF5L7cZZxBCM7rQjVdwV9Jdk3KGFwjnWGRkAjDD2DkJZYqz7KQ== +"@segment/analytics-react-native@^1.4.4": + version "1.4.4" + resolved "https://registry.yarnpkg.com/@segment/analytics-react-native/-/analytics-react-native-1.4.4.tgz#1c5e4f18ac46dd899947c758f104004fc7d5ffce" + integrity sha512-zSgoGvw3VNqam0QoumOGiNr97ar3tutSwuMJPj2Da6mcJBVohMYHQcpShyufWfsiDeX8oMnu+UJx5eo+cxskrw== "@sentry/browser@6.2.0": version "6.2.0" @@ -3768,364 +2852,6 @@ dependencies: type-detect "4.0.8" -"@storybook/addon-actions@^5.3": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.21.tgz#16eed3eb24996adfcbf70bd476a261324d6de593" - integrity sha512-6SAF/j8UBZaAbRz/rYUlcCXda+c4LQvvNlbVJc9GHjNNNMJQQVc3/EU+M7PyFz6uDUxudAW1+AFchGk04ACJ2g== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/theming" "5.3.21" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - polished "^3.3.1" - prop-types "^15.7.2" - react "^16.8.3" - react-inspector "^4.0.0" - uuid "^3.3.2" - -"@storybook/addons@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.21.tgz#ee312c738c33e8c34dc11777ef93522c3c36e56a" - integrity sha512-Ji/21WADTLVbTbiKcZ64BcL0Es+h1Afxx3kNmGJqPSTUYroCwIFCT9mUzCqU6G+YyWaISAmTii5UJkTwMkChwA== - dependencies: - "@storybook/api" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - util-deprecate "^1.0.2" - -"@storybook/api@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" - integrity sha512-K1o4an/Rx8daKRDooks6qzN6ZGyqizeacZZbair3F8CsSfTgrr2zCcf9pgKojLQa9koEmMHlcdb2KnS+GwPEgA== - dependencies: - "@reach/router" "^1.2.1" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - fast-deep-equal "^2.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - prop-types "^15.6.2" - react "^16.8.3" - semver "^6.0.0" - shallow-equal "^1.1.0" - store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" - -"@storybook/channel-postmessage@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz#9c08bf1c108ff973dbca18e582680d25178db1d4" - integrity sha512-CfoP7aEbZtJ35R9zeujMRdIwprETUi+Ve+y84DhXYQ2uJ0rR3vO4zHLZnxMMyJ5VnYOfuO042uch07+EKBz40Q== - dependencies: - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.2.0" - -"@storybook/channel-websocket@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channel-websocket/-/channel-websocket-5.3.21.tgz#2ffc670563de672c087c05dc1007253d9b9f55ed" - integrity sha512-9TcsCvgZMdCZu2urudyLhshuQxjCsFUd8pu6ZzcxBFn5a8kgb1oKEv9pD0A9S+uQ2ramYgtqykRiG4Z3/JeuyA== - dependencies: - "@storybook/channels" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.2.0" - -"@storybook/channels@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-5.3.21.tgz#53ba622b171d68b3b102983a62aa05149a49497b" - integrity sha512-OXoFs9XtBVg/cCk6lYMrxkzaNlJRf54ABdorp7YAAj7S9tRL1JxOZHxmjNQwEoiRvssmem2rAWtEAxfuEANsAA== - dependencies: - core-js "^3.0.1" - -"@storybook/client-api@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.21.tgz#5b218a28f24219c32ab4b92a6af2a3e452fb8089" - integrity sha512-vS4DfA2Avvl7JNQymO4e3RUNoTWIGVfZJ70Irnd6PTAZNojbCXTYuigDavrmyf83F3g5rQpwmSAPjuoi/X/FRA== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@types/webpack-env" "^1.15.0" - core-js "^3.0.1" - eventemitter3 "^4.0.0" - global "^4.3.2" - is-plain-object "^3.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - stable "^0.1.8" - ts-dedent "^1.1.0" - util-deprecate "^1.0.2" - -"@storybook/client-logger@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-5.3.21.tgz#912c83b0d358e70acad1ad4abe199de4c38b109f" - integrity sha512-OzQkwpZ5SK9cXD9Mv6lxPGPot+hSZvnkEW12kpt1AHfJz4ET26YTDOI3oetPsjfRJo6qYLeQX8+wF7rklfXbzA== - dependencies: - core-js "^3.0.1" - -"@storybook/components@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" - integrity sha512-42QQk6qZl6wrtajP8yNCfmNS2t8Iod5QY+4V/l6iNnnT9O+j6cWOlnO+ZyvjNv0Xm0zIOt+VyVjdkKh8FUjQmA== - dependencies: - "@storybook/client-logger" "5.3.21" - "@storybook/theming" "5.3.21" - "@types/react-syntax-highlighter" "11.0.4" - "@types/react-textarea-autosize" "^4.3.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - polished "^3.3.1" - popper.js "^1.14.7" - prop-types "^15.7.2" - react "^16.8.3" - react-dom "^16.8.3" - react-focus-lock "^2.1.0" - react-helmet-async "^1.0.2" - react-popper-tooltip "^2.8.3" - react-syntax-highlighter "^11.0.2" - react-textarea-autosize "^7.1.0" - simplebar-react "^1.0.0-alpha.6" - ts-dedent "^1.1.0" - -"@storybook/core-events@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.21.tgz#41d81c3f107302a032545fc86ff344230c04b9e9" - integrity sha512-/Zsm1sKAh6pzQv8jQUmuhM7nuM01ZljIRKy8p2HjPNlMjDB5yaRkBfyeAUXUg+qXNI6aHVWa4jGdPEdwwY4oLA== - dependencies: - core-js "^3.0.1" - -"@storybook/core@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.21.tgz#da963166ea24601f318266a3aa6bbc06fc8fb175" - integrity sha512-plD47WIsn/JoyRJDOpmH7N7mEMo/jiA8ZlOitLW55zYvzUn8UrVpRFpMYo91OJxiCT6JFoaEh3XtNdhbgUwnPA== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.7.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-react-constant-elements" "^7.2.0" - "@babel/preset-env" "^7.4.5" - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@storybook/node-logger" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - "@storybook/ui" "5.3.21" - airbnb-js-shims "^2.2.1" - ansi-to-html "^0.6.11" - autoprefixer "^9.7.2" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-emotion "^10.0.20" - babel-plugin-macros "^2.7.0" - babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" - boxen "^4.1.0" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^3.0.0" - cli-table3 "0.5.1" - commander "^4.0.1" - core-js "^3.0.1" - corejs-upgrade-webpack-plugin "^2.2.0" - css-loader "^3.0.0" - detect-port "^1.3.0" - dotenv-webpack "^1.7.0" - ejs "^2.7.4" - express "^4.17.0" - file-loader "^4.2.0" - file-system-cache "^1.0.5" - find-cache-dir "^3.0.0" - find-up "^4.1.0" - fs-extra "^8.0.1" - glob-base "^0.3.0" - global "^4.3.2" - html-webpack-plugin "^4.0.0-beta.2" - inquirer "^7.0.0" - interpret "^2.0.0" - ip "^1.1.5" - json5 "^2.1.1" - lazy-universal-dotenv "^3.0.1" - micromatch "^4.0.2" - node-fetch "^2.6.0" - open "^7.0.0" - pnp-webpack-plugin "1.5.0" - postcss-flexbugs-fixes "^4.1.0" - postcss-loader "^3.0.0" - pretty-hrtime "^1.0.3" - qs "^6.6.0" - raw-loader "^3.1.0" - react-dev-utils "^9.0.0" - regenerator-runtime "^0.13.3" - resolve "^1.11.0" - resolve-from "^5.0.0" - semver "^6.0.0" - serve-favicon "^2.5.0" - shelljs "^0.8.3" - style-loader "^1.0.0" - terser-webpack-plugin "^2.1.2" - ts-dedent "^1.1.0" - unfetch "^4.1.0" - url-loader "^2.0.1" - util-deprecate "^1.0.2" - webpack "^4.33.0" - webpack-dev-middleware "^3.7.0" - webpack-hot-middleware "^2.25.0" - webpack-virtual-modules "^0.2.0" - -"@storybook/csf@0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.0.1.tgz#95901507dc02f0bc6f9ac8ee1983e2fc5bb98ce6" - integrity sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw== - dependencies: - lodash "^4.17.15" - -"@storybook/node-logger@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.21.tgz#f11d45042bd57dc69e9037d8f374d9fd0aad8071" - integrity sha512-8xibncy873JXePCK5MC0qem1MKtWI1Lc4hv6rwURSwYpZtkO7yElay3XAFGUSfz8qFJkoDBmMTxBR3fp4Dln7g== - dependencies: - "@types/npmlog" "^4.1.2" - chalk "^3.0.0" - core-js "^3.0.1" - npmlog "^4.1.2" - pretty-hrtime "^1.0.3" - regenerator-runtime "^0.13.3" - -"@storybook/react-native-server@^5.3.23": - version "5.3.23" - resolved "https://registry.yarnpkg.com/@storybook/react-native-server/-/react-native-server-5.3.23.tgz#27ef61a74ec991b3d56690cd1dd9eba30718f3a5" - integrity sha512-1jGHwikc6BVoEW8tdJeYvnY1N2+cHyzit9xiXL9WXofiiYERoL4ENj1pgVp+AGA+yUYBsuSzeN7Hqp/LwdJ1Ug== - dependencies: - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/channel-websocket" "5.3.21" - "@storybook/core" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/ui" "5.3.21" - commander "^4.0.1" - core-js "^3.0.1" - global "^4.3.2" - react "^16.6.0" - react-dom "^16.8.3" - uuid "^3.3.2" - webpack "^4.33.0" - ws "^7.1.2" - -"@storybook/react-native@^5.3.25": - version "5.3.25" - resolved "https://registry.yarnpkg.com/@storybook/react-native/-/react-native-5.3.25.tgz#681c9cdcadba7eda88716f5d383ea47558367825" - integrity sha512-KPctJdk1++k4byblqTwULmxKDADsRAMat9BgMTx3Gewk4PjMbsbKCvRK7+AlJeNjz/kEsf9L6Y25y8lrw3rPXA== - dependencies: - "@emotion/core" "^10.0.20" - "@emotion/native" "^10.0.14" - "@storybook/addons" "5.3.21" - "@storybook/channel-websocket" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/core-events" "5.3.21" - core-js "^3.0.1" - emotion-theming "^10.0.19" - react-native-swipe-gestures "^1.0.4" - -"@storybook/router@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-5.3.21.tgz#32b08e5daa90a6ffa024bb670b874525a712a901" - integrity sha512-c29m5UikK5Q1lyd6FltOGFhIcpd6PIb855YS3OUNe3F6ZA1tfJ+aNKrCBc65d1c+fvCGG76dYYYv0RvwEmKXXg== - dependencies: - "@reach/router" "^1.2.1" - "@storybook/csf" "0.0.1" - "@types/reach__router" "^1.2.3" - core-js "^3.0.1" - global "^4.3.2" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - util-deprecate "^1.0.2" - -"@storybook/theming@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-5.3.21.tgz#ae2dc101aa57c3be4df1724ae729e11bad118e0b" - integrity sha512-FZbxjizqdO9lV5LUixPio/7+6UdPiswCzTJn8Hcot9uwwgfnrViRdN7xyjmSYRqv9nHP3OlYbtdeCAgZ4aPq8g== - dependencies: - "@emotion/core" "^10.0.20" - "@emotion/styled" "^10.0.17" - "@storybook/client-logger" "5.3.21" - core-js "^3.0.1" - deep-object-diff "^1.1.0" - emotion-theming "^10.0.19" - global "^4.3.2" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - resolve-from "^5.0.0" - ts-dedent "^1.1.0" - -"@storybook/ui@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.21.tgz#b42568e03353b47aaab1b6449311f38858585f81" - integrity sha512-OUf8JYY9LN+XfzLSZE6KtboITGDL6C8Z0W9QOXM5LJwFLv4PkANK/f9qsB5vVHFm7vhoO96butFzs6SjTKhxkw== - dependencies: - "@emotion/core" "^10.0.20" - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - copy-to-clipboard "^3.0.8" - core-js "^3.0.1" - core-js-pure "^3.0.1" - emotion-theming "^10.0.19" - fast-deep-equal "^2.0.1" - fuse.js "^3.4.6" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - qs "^6.6.0" - react "^16.8.3" - react-dom "^16.8.3" - react-draggable "^4.0.3" - react-helmet-async "^1.0.2" - react-hotkeys "2.0.0" - react-sizeme "^2.6.7" - regenerator-runtime "^0.13.2" - resolve-from "^5.0.0" - semver "^6.0.0" - store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" - "@styled-system/background@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/background/-/background-5.1.2.tgz#75c63d06b497ab372b70186c0bf608d62847a2ba" @@ -4201,13 +2927,6 @@ dependencies: "@styled-system/core" "^5.1.2" -"@styled-system/theme-get@^5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@styled-system/theme-get/-/theme-get-5.1.2.tgz#b40a00a44da63b7a6ed85f73f737c4defecd6049" - integrity sha512-afAYdRqrKfNIbVgmn/2Qet1HabxmpRnzhFwttbGr6F/mJ4RDS/Cmn+KHwHvNXangQsWw/5TfjpWV+rgcqqIcJQ== - dependencies: - "@styled-system/core" "^5.1.2" - "@styled-system/typography@^5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@styled-system/typography/-/typography-5.1.2.tgz#65fb791c67d50cd2900d234583eaacdca8c134f7" @@ -4434,16 +3153,6 @@ "@types/react" "*" hoist-non-react-statics "^3.3.0" -"@types/html-minifier-terser@^5.0.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" - integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== - -"@types/is-function@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" - integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== - "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" @@ -4484,15 +3193,10 @@ resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== -"@types/json-schema@^7.0.5": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.8.tgz#edf1bf1dbf4e04413ca8e5b17b3b7d7d54b59818" - integrity sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg== - -"@types/lodash@4.14.149": - version "4.14.149" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.149.tgz#1342d63d948c6062838fbf961012f74d4e638440" - integrity sha512-ijGqzZt/b7BfzcK9vTrS6MFljQRPn5BFWOx8oE0GYxribu6uV+aA9zZuXI1zc/etK9E8nrgdoF2+LgUw7+9tJQ== +"@types/lodash@4.14.170": + version "4.14.170" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.170.tgz#0d67711d4bf7f4ca5147e9091b847479b87925d6" + integrity sha512-bpcvu/MKHHeYX+qeEN8GE7DIravODWdACVA1ctevD8CN24RhPZIKMn9ntfAsrvLfSX3cR5RrBKAbYm9bGs0A+Q== "@types/luxon@1.15.2": version "1.15.2" @@ -4526,11 +3230,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.7.tgz#57682a9771a3f7b09c2497f28129a0462966524a" integrity sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA== -"@types/npmlog@^4.1.2": - version "4.1.3" - resolved "https://registry.yarnpkg.com/@types/npmlog/-/npmlog-4.1.3.tgz#9c24b49a97e25cf15a890ff404764080d7942132" - integrity sha512-1TcL7YDYCtnHmLhTWbum+IIwLlvpaHoEKS2KNIngEwLzwgDeHaebaEHHbQp8IqzNQ9IYiboLKUjAf7MZqG63+w== - "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" @@ -4556,13 +3255,6 @@ resolved "https://registry.yarnpkg.com/@types/query-string/-/query-string-5.0.1.tgz#6cb41c724cb1644d56c2d1dae7c7b204e706b39e" integrity sha512-qlH3YtJ5ipp6z5SU9G0LJsBnNEZqTKPeGjNIyMcGD5Dhbooz0CCsW/sILsgb+LBRrDeTehRtQviXV2kfLm3dqg== -"@types/reach__router@^1.2.3": - version "1.3.9" - resolved "https://registry.yarnpkg.com/@types/reach__router/-/reach__router-1.3.9.tgz#d3aaac0072665c81063cc6c557c18dadd642b226" - integrity sha512-N6rqQqTTAV/zKLfK3iq9Ww3wqCEhTZvsilhl0zI09zETdVq1QGmJH6+/xnj8AFUWIrle2Cqo+PGM/Ltr1vBb9w== - dependencies: - "@types/react" "*" - "@types/react-native-push-notification@^7.3.0": version "7.3.0" resolved "https://registry.yarnpkg.com/@types/react-native-push-notification/-/react-native-push-notification-7.3.0.tgz#5c998134347c1e8a2ddb28524349acf12cfbb243" @@ -4583,13 +3275,6 @@ "@types/react" "*" "@types/relay-runtime" "*" -"@types/react-syntax-highlighter@11.0.4": - version "11.0.4" - resolved "https://registry.yarnpkg.com/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz#d86d17697db62f98046874f62fdb3e53a0bbc4cd" - integrity sha512-9GfTo3a0PHwQeTVoqs0g5bS28KkSY48pp5659wA+Dp4MqceDEa8EHBqrllJvvtyusszyJhViUEap0FDvlk/9Zg== - dependencies: - "@types/react" "*" - "@types/react-test-renderer@^16.9.3": version "16.9.3" resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-16.9.3.tgz#96bab1860904366f4e848b739ba0e2f67bcae87e" @@ -4597,13 +3282,6 @@ dependencies: "@types/react" "*" -"@types/react-textarea-autosize@^4.3.3": - version "4.3.6" - resolved "https://registry.yarnpkg.com/@types/react-textarea-autosize/-/react-textarea-autosize-4.3.6.tgz#f56f7b41aee9fb0310b6e32a8d2a77eb9a5893db" - integrity sha512-cTf8tCem0c8A7CERYbTuF+bRFaqYu7N7HLCa6ZhUhDx8XnUsTpGx5udMWljt87JpciUKuUkImKPEsy6kcKhrcQ== - dependencies: - "@types/react" "*" - "@types/react-tracking@7.0.1": version "7.0.1" resolved "https://registry.yarnpkg.com/@types/react-tracking/-/react-tracking-7.0.1.tgz#aa431b621c9fbee5d5a56844039216bfbfe3f713" @@ -4650,11 +3328,6 @@ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb" integrity sha512-+nVsLKlcUCeMzD2ufHEYuJ9a2ovstb6Dp52A5VsoKxDXgvE051XgHI/33I1EymwkRGQkwnA0LkhnUzituGs4EQ== -"@types/source-list-map@*": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" - integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== - "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -4665,25 +3338,20 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/styled-components@4.0.3": - version "4.0.3" - resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.3.tgz#8287e54e446302369eecc521243a2f32cf9122ee" - integrity sha512-LzntHlOKEOxUxMkVmQPNG88TsldeHO2NlwNkzHnw4wL8qhHQgd7u+u3yw84hZgoFh4ugsLCbFtjYcbP7v5WC5Q== +"@types/styled-components@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.0.2.tgz#4d60af452fd35e6be6bc7a46d1a317daaab613ea" + integrity sha512-LIm9OqdtG4WHDGkdPDOGpeIlIVYs2IBxXsW5xgt4tKwY/VGY40YvmlUq69GbHkvX+i35236GOcXh6DmYCFDrDg== dependencies: "@types/node" "*" "@types/react" "*" -"@types/styled-system@5.1.12": - version "5.1.12" - resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.12.tgz#4f3ca8da3dffe3c5a6cc3b2a97f51b41464c104a" - integrity sha512-7x4BYKKfK9QewfsFC2x5r9BK/OrfX+JF/1P21jKPMHruawDw9gvG7bTZgTVk6YkzDO2JUlsk4i8hdiAepAhD0g== +"@types/styled-system@5.1.9": + version "5.1.9" + resolved "https://registry.yarnpkg.com/@types/styled-system/-/styled-system-5.1.9.tgz#8baac8f6eca9e0bd5768c175ca5ce1f2d6f61ade" + integrity sha512-QlWv6tmQV8dqk8s+LSLb9QAtmuQEnfv4f8lKKZkMgDqRFVmxJDBwEw0u4zhpxp56u0hdR+TCIk9dGfOw3TkCoQ== dependencies: - csstype "^3.0.2" - -"@types/styled-system__theme-get@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/styled-system__theme-get/-/styled-system__theme-get-5.0.1.tgz#c3884e8f15641603503dc1d49f9d282dce11e5fb" - integrity sha512-+i4VZ5wuYKMU8oKPmUlzc9r2RhpSNOK061Khtrr7X0sOQEcIyhUtrDusuMkp5ZR3D05Xopn3zybTPyUSQkKGAA== + csstype "^2.6.9" "@types/supercluster@5.0.0": version "5.0.0" @@ -4692,44 +3360,6 @@ dependencies: "@types/geojson" "*" -"@types/tapable@^1", "@types/tapable@^1.0.5": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" - integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== - -"@types/uglify-js@*": - version "3.13.1" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" - integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== - dependencies: - source-map "^0.6.1" - -"@types/webpack-env@^1.15.0": - version "1.16.2" - resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.16.2.tgz#8db514b059c1b2ae14ce9d7bb325296de6a9a0fa" - integrity sha512-vKx7WNQNZDyJveYcHAm9ZxhqSGLYwoyLhrHjLBOkw3a7cT76sTdjgtwyijhk1MaHyRIuSztcVwrUOO/NEu68Dw== - -"@types/webpack-sources@*": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-2.1.1.tgz#6af17e3a3ded71eec2b98008d7c12f498a0a4506" - integrity sha512-MjM1R6iuw8XaVbtkCBz0N349cyqBjJHCbQiOeppe3VBeFvxqs74RKHAVt9LkxTnUWc7YLZOEsUfPUnmK6SBPKQ== - dependencies: - "@types/node" "*" - "@types/source-list-map" "*" - source-map "^0.7.3" - -"@types/webpack@^4.41.8": - version "4.41.30" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" - integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== - dependencies: - "@types/node" "*" - "@types/tapable" "^1" - "@types/uglify-js" "*" - "@types/webpack-sources" "*" - anymatch "^3.0.0" - source-map "^0.6.0" - "@types/yargs-parser@*": version "13.1.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228" @@ -4761,166 +3391,11 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.29.3.tgz#5a85024796bffe0eb01601bfc180fe218356dba4" integrity sha512-XxZFKnxzTfm+DR8MMBA35UUXfUPmjPpi8HJ90VZg7q/LIbtiOhVGJ26gNnATcflcpnIyf2Qm9A+oEhswaqoDpA== -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - "@xobotyi/scrollbar-width@^1.9.5": version "1.9.5" resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -4964,14 +3439,6 @@ accepts@~1.3.4: mime-types "~2.1.16" negotiator "0.6.1" -accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - acorn-globals@^4.3.2: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -4990,21 +3457,11 @@ acorn@^6.0.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.2.tgz#6a459041c320ab17592c6317abbfdf4bbaa98ca4" integrity sha512-GXmKIvbrN3TV7aVqAzVFaMW8F8wzVX7voEBRO3bDA64+EX37YSayggRJP5Xig6HYHBkWKpFg9W5gg6orklubhg== -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - acorn@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== -address@1.1.2, address@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - agent-base@4, agent-base@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" @@ -5034,29 +3491,6 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -airbnb-js-shims@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" - integrity sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - array.prototype.flatmap "^1.2.1" - es5-shim "^4.5.13" - es6-shim "^0.35.5" - function.prototype.name "^1.1.0" - globalthis "^1.0.0" - object.entries "^1.1.0" - object.fromentries "^2.0.0 || ^1.0.0" - object.getownpropertydescriptors "^2.0.3" - object.values "^1.1.0" - promise.allsettled "^1.0.0" - promise.prototype.finally "^3.1.0" - string.prototype.matchall "^4.0.0 || ^3.0.1" - string.prototype.padend "^3.0.0" - string.prototype.padstart "^3.0.0" - symbol.prototype.description "^1.0.0" - airbnb-prop-types@^2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz#43147a5062dd2a4a5600e748a47b64004cc5f7fc" @@ -5073,22 +3507,11 @@ airbnb-prop-types@^2.13.2: prop-types-exact "^1.2.0" react-is "^16.8.6" -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== +ajv@^6.5.3: + version "6.5.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1" dependencies: - fast-deep-equal "^3.1.1" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" @@ -5108,13 +3531,6 @@ anser@^1.4.9: resolved "https://registry.yarnpkg.com/anser/-/anser-1.4.9.tgz#1f85423a5dcf8da4631a341665ff675b96845760" integrity sha512-AI+BjTeGt2+WFk4eWcqbQ7snZpDBt8SaLlj0RT2h5xfdWaiy51OjYvqwMrNzJLGy8iOAL6nKDITWO+rd4MkYEA== -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - ansi-colors@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" @@ -5122,7 +3538,7 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^3.0.0, ansi-colors@^3.2.1: +ansi-colors@^3.2.1: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== @@ -5179,11 +3595,6 @@ ansi-gray@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-html@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - ansi-red@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" @@ -5248,13 +3659,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -ansi-to-html@^0.6.11: - version "0.6.15" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7" - integrity sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ== - dependencies: - entities "^2.0.0" - ansi-wrap@0.1.0, ansi-wrap@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" @@ -5273,14 +3677,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.0, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - anymatch@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -5302,12 +3698,7 @@ apollo-utilities@^1.0.0, apollo-utilities@^1.0.1: dependencies: fast-json-stable-stringify "^2.0.0" -app-root-dir@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/app-root-dir/-/app-root-dir-1.0.2.tgz#38187ec2dea7577fff033ffcb12172692ff6e118" - integrity sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg= - -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== @@ -5390,21 +3781,15 @@ array-filter@~0.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= -array-includes@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" - integrity sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.1.1" - is-string "^1.0.5" +array-iterate@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6" + integrity sha1-hlv3+K851rCYLGCQKRSsdrwBCPY= array-map@~0.0.0: version "0.0.0" @@ -5454,27 +3839,6 @@ array.prototype.flat@^1.2.1: es-abstract "^1.10.0" function-bind "^1.1.1" -array.prototype.flatmap@^1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" - integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - function-bind "^1.1.1" - -array.prototype.map@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" - integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.5" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -5485,16 +3849,6 @@ asap@~2.0.3, asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= -asn1.js@^5.2.0: - version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" - integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - safer-buffer "^2.1.0" - asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -5505,14 +3859,6 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= -assert@^1.1.1: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" @@ -5528,11 +3874,6 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - async-retry@1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.2.3.tgz#a6521f338358d322b1a0012b79030c6f411d1ce0" @@ -5540,6 +3881,11 @@ async-retry@1.2.3: dependencies: retry "0.12.0" +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.4.0: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" @@ -5593,18 +3939,16 @@ auto@7.12.3: signale "^1.4.0" tslib "1.10.0" -autoprefixer@^9.7.2: - version "9.8.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" - integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== +autoprefixer@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.3.1.tgz#71b622174de2b783d5fd99f9ad617b7a3c78443e" dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001109" - colorette "^1.2.1" + browserslist "^4.3.3" + caniuse-lite "^1.0.30000898" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.32" - postcss-value-parser "^4.1.0" + postcss "^7.0.5" + postcss-value-parser "^3.3.1" await-to-js@^2.1.1: version "2.1.1" @@ -5643,41 +3987,6 @@ babel-code-frame@^6.22.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-helper-evaluate-path@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz#a62fa9c4e64ff7ea5cea9353174ef023a900a67c" - integrity sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA== - -babel-helper-flip-expressions@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz#3696736a128ac18bc25254b5f40a22ceb3c1d3fd" - integrity sha1-NpZzahKKwYvCUlS19AoizrPB0/0= - -babel-helper-is-nodes-equiv@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz#34e9b300b1479ddd98ec77ea0bbe9342dfe39684" - integrity sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ= - -babel-helper-is-void-0@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz#7d9c01b4561e7b95dbda0f6eee48f5b60e67313e" - integrity sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4= - -babel-helper-mark-eval-scopes@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz#d244a3bef9844872603ffb46e22ce8acdf551562" - integrity sha1-0kSjvvmESHJgP/tG4izorN9VFWI= - -babel-helper-remove-or-void@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz#a4f03b40077a0ffe88e45d07010dee241ff5ae60" - integrity sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA= - -babel-helper-to-multiple-sequence-expressions@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz#a3f924e3561882d42fcf48907aa98f7979a4588d" - integrity sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA== - babel-jest@25.2.6, babel-jest@^25.2.6: version "25.2.6" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.2.6.tgz#fe67ff4d0db3626ca8082da8881dd5e84e07ae75" @@ -5691,50 +4000,12 @@ babel-jest@25.2.6, babel-jest@^25.2.6: chalk "^3.0.0" slash "^3.0.0" -babel-loader@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.2.tgz#9363ce84c10c9a40e6c753748e1441b60c8a0b81" - integrity sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g== +babel-plugin-import-graphql@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/babel-plugin-import-graphql/-/babel-plugin-import-graphql-2.7.0.tgz#984b2330afa05cce5ff81e577f7d82cdb86aea6d" + integrity sha512-PCNT6hLXaFxb7bsXJ+ALFnEnZUK2Hj1HhM0nWv4XDpuYf8arulm7ZAu/Z0MBItLkcik/TAokGX9IUzwyTYMXvQ== dependencies: - find-cache-dir "^3.3.1" - loader-utils "^1.4.0" - make-dir "^3.1.0" - schema-utils "^2.6.5" - -babel-plugin-add-react-displayname@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/babel-plugin-add-react-displayname/-/babel-plugin-add-react-displayname-0.0.5.tgz#339d4cddb7b65fd62d1df9db9fe04de134122bd5" - integrity sha1-M51M3be2X9YtHfnbn+BN4TQSK9U= - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: - version "10.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" - integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - "@emotion/hash" "0.8.0" - "@emotion/memoize" "0.7.4" - "@emotion/serialize" "^0.11.16" - babel-plugin-macros "^2.0.0" - babel-plugin-syntax-jsx "^6.18.0" - convert-source-map "^1.5.0" - escape-string-regexp "^1.0.5" - find-root "^1.1.0" - source-map "^0.5.7" - -babel-plugin-import-graphql@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/babel-plugin-import-graphql/-/babel-plugin-import-graphql-2.7.0.tgz#984b2330afa05cce5ff81e577f7d82cdb86aea6d" - integrity sha512-PCNT6hLXaFxb7bsXJ+ALFnEnZUK2Hj1HhM0nWv4XDpuYf8arulm7ZAu/Z0MBItLkcik/TAokGX9IUzwyTYMXvQ== - dependencies: - graphql-tag "^2.9.2" + graphql-tag "^2.9.2" babel-plugin-istanbul@^6.0.0: version "6.0.0" @@ -5754,7 +4025,7 @@ babel-plugin-jest-hoist@^25.2.6: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: +babel-plugin-macros@^2.0.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -5763,106 +4034,6 @@ babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0: cosmiconfig "^6.0.0" resolve "^1.12.0" -babel-plugin-minify-builtins@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz#31eb82ed1a0d0efdc31312f93b6e4741ce82c36b" - integrity sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag== - -babel-plugin-minify-constant-folding@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz#f84bc8dbf6a561e5e350ff95ae216b0ad5515b6e" - integrity sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-minify-dead-code-elimination@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.1.tgz#1a0c68e44be30de4976ca69ffc535e08be13683f" - integrity sha512-x8OJOZIrRmQBcSqxBcLbMIK8uPmTvNWPXH2bh5MDCW1latEqYiRMuUkPImKcfpo59pTUB2FT7HfcgtG8ZlR5Qg== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-mark-eval-scopes "^0.4.3" - babel-helper-remove-or-void "^0.4.3" - lodash "^4.17.11" - -babel-plugin-minify-flip-comparisons@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz#00ca870cb8f13b45c038b3c1ebc0f227293c965a" - integrity sha1-AMqHDLjxO0XAOLPB68DyJyk8llo= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-minify-guarded-expressions@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.4.tgz#818960f64cc08aee9d6c75bec6da974c4d621135" - integrity sha512-RMv0tM72YuPPfLT9QLr3ix9nwUIq+sHT6z8Iu3sLbqldzC1Dls8DPCywzUIzkTx9Zh1hWX4q/m9BPoPed9GOfA== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - -babel-plugin-minify-infinity@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz#dfb876a1b08a06576384ef3f92e653ba607b39ca" - integrity sha1-37h2obCKBldjhO8/kuZTumB7Oco= - -babel-plugin-minify-mangle-names@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz#bcddb507c91d2c99e138bd6b17a19c3c271e3fd3" - integrity sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw== - dependencies: - babel-helper-mark-eval-scopes "^0.4.3" - -babel-plugin-minify-numeric-literals@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz#8e4fd561c79f7801286ff60e8c5fd9deee93c0bc" - integrity sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw= - -babel-plugin-minify-replace@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz#d3e2c9946c9096c070efc96761ce288ec5c3f71c" - integrity sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q== - -babel-plugin-minify-simplify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.1.tgz#f21613c8b95af3450a2ca71502fdbd91793c8d6a" - integrity sha512-OSYDSnoCxP2cYDMk9gxNAed6uJDiDz65zgL6h8d3tm8qXIagWGMLWhqysT6DY3Vs7Fgq7YUDcjOomhVUb+xX6A== - dependencies: - babel-helper-evaluate-path "^0.5.0" - babel-helper-flip-expressions "^0.4.3" - babel-helper-is-nodes-equiv "^0.0.1" - babel-helper-to-multiple-sequence-expressions "^0.5.0" - -babel-plugin-minify-type-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz#1bc6f15b87f7ab1085d42b330b717657a2156500" - integrity sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA= - dependencies: - babel-helper-is-void-0 "^0.4.3" - -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz#72add68cf08a8bf139ba6e6dfc0b1d504098e57b" - integrity sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" - -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - babel-plugin-relay@10.1.3: version "10.1.3" resolved "https://registry.yarnpkg.com/babel-plugin-relay/-/babel-plugin-relay-10.1.3.tgz#3c52f06869c2295766f4df63736b9ad887386af3" @@ -5890,65 +4061,6 @@ babel-plugin-syntax-trailing-function-commas@^7.0.0-beta.0: resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-7.0.0-beta.0.tgz#aa213c1435e2bffeb6fca842287ef534ad05d5cf" integrity sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ== -babel-plugin-transform-inline-consecutive-adds@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz#323d47a3ea63a83a7ac3c811ae8e6941faf2b0d1" - integrity sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE= - -babel-plugin-transform-member-expression-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz#37039c9a0c3313a39495faac2ff3a6b5b9d038bf" - integrity sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8= - -babel-plugin-transform-merge-sibling-variables@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz#85b422fc3377b449c9d1cde44087203532401dae" - integrity sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4= - -babel-plugin-transform-minify-booleans@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz#acbb3e56a3555dd23928e4b582d285162dd2b198" - integrity sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg= - -babel-plugin-transform-property-literals@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz#98c1d21e255736573f93ece54459f6ce24985d39" - integrity sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk= - dependencies: - esutils "^2.0.2" - -babel-plugin-transform-regexp-constructors@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz#58b7775b63afcf33328fae9a5f88fbd4fb0b4965" - integrity sha1-WLd3W2OvzzMyj66aX4j71PsLSWU= - -babel-plugin-transform-remove-console@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz#b980360c067384e24b357a588d807d3c83527780" - integrity sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A= - -babel-plugin-transform-remove-debugger@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz#42b727631c97978e1eb2d199a7aec84a18339ef2" - integrity sha1-QrcnYxyXl44estGZp67IShgznvI= - -babel-plugin-transform-remove-undefined@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz#80208b31225766c630c97fa2d288952056ea22dd" - integrity sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ== - dependencies: - babel-helper-evaluate-path "^0.5.0" - -babel-plugin-transform-simplify-comparison-operators@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz#f62afe096cab0e1f68a2d753fdf283888471ceb9" - integrity sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk= - -babel-plugin-transform-undefined-to-void@^6.9.4: - version "6.9.4" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz#be241ca81404030678b748717322b89d0c8fe280" - integrity sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA= - babel-preset-fbjs@^3.2.0, babel-preset-fbjs@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/babel-preset-fbjs/-/babel-preset-fbjs-3.3.0.tgz#a6024764ea86c8e06a22d794ca8b69534d263541" @@ -5991,34 +4103,10 @@ babel-preset-jest@^25.2.6: "@babel/plugin-syntax-object-rest-spread" "^7.0.0" babel-plugin-jest-hoist "^25.2.6" -"babel-preset-minify@^0.5.0 || 0.6.0-alpha.5": - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-minify/-/babel-preset-minify-0.5.1.tgz#25f5d0bce36ec818be80338d0e594106e21eaa9f" - integrity sha512-1IajDumYOAPYImkHbrKeiN5AKKP9iOmRoO2IPbIuVp0j2iuCcj0n7P260z38siKMZZ+85d3mJZdtW8IgOv+Tzg== - dependencies: - babel-plugin-minify-builtins "^0.5.0" - babel-plugin-minify-constant-folding "^0.5.0" - babel-plugin-minify-dead-code-elimination "^0.5.1" - babel-plugin-minify-flip-comparisons "^0.4.3" - babel-plugin-minify-guarded-expressions "^0.4.4" - babel-plugin-minify-infinity "^0.4.3" - babel-plugin-minify-mangle-names "^0.5.0" - babel-plugin-minify-numeric-literals "^0.4.3" - babel-plugin-minify-replace "^0.5.0" - babel-plugin-minify-simplify "^0.5.1" - babel-plugin-minify-type-constructors "^0.4.3" - babel-plugin-transform-inline-consecutive-adds "^0.4.3" - babel-plugin-transform-member-expression-literals "^6.9.4" - babel-plugin-transform-merge-sibling-variables "^6.9.4" - babel-plugin-transform-minify-booleans "^6.9.4" - babel-plugin-transform-property-literals "^6.9.4" - babel-plugin-transform-regexp-constructors "^0.4.3" - babel-plugin-transform-remove-console "^6.9.4" - babel-plugin-transform-remove-debugger "^6.9.4" - babel-plugin-transform-remove-undefined "^0.5.0" - babel-plugin-transform-simplify-comparison-operators "^6.9.4" - babel-plugin-transform-undefined-to-void "^6.9.4" - lodash "^4.17.11" +bail@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + integrity sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q= balanced-match@^1.0.0: version "1.0.0" @@ -6030,16 +4118,16 @@ base-64@0.1.0: resolved "https://registry.yarnpkg.com/base-64/-/base-64-0.1.0.tgz#780a99c84e7d600260361511c4877613bf24f6bb" integrity sha1-eAqZyE59YAJgNhURxId2E78k9rs= -base64-js@^1.0.2, base64-js@^1.3.1, base64-js@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - base64-js@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" integrity sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw== +base64-js@^1.3.1, base64-js@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -6053,11 +4141,6 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -batch-processor@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/batch-processor/-/batch-processor-1.0.0.tgz#75c95c32b748e0850d10c2b168f6bdbe9891ace8" - integrity sha1-dclcMrdI4IUNEMKxaPa9vpiRrOg= - bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" @@ -6080,21 +4163,6 @@ big.js@^3.1.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - binaryextensions@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.2.tgz#c83c3d74233ba7674e4f313cb2a2b70f54e94b7c" @@ -6114,42 +4182,11 @@ bluebird@2.9.6: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.9.6.tgz#1fc3a6b1685267dc121b5ec89b32ce069d81ab7d" integrity sha1-H8OmsWhSZ9wSG17ImzLOBp2Bq30= -bluebird@^3.3.5, bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - bmp-js@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" integrity sha1-4Fpj95amwf8l9Hcex62twUjAcjM= -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.0.0, bn.js@^5.1.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -6172,20 +4209,6 @@ bower-config@^1.4.0: untildify "^2.1.0" wordwrap "^0.0.3" -boxen@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - bplist-creator@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.0.8.tgz#56b2a6e79e9aec3fc33bf831d09347d73794e79c" @@ -6225,7 +4248,7 @@ braces@^2.3.0: split-string "^3.0.2" to-regex "^3.0.1" -braces@^2.3.1, braces@^2.3.2: +braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== @@ -6241,18 +4264,13 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1, braces@~3.0.2: +braces@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" @@ -6264,86 +4282,13 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" - integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== - dependencies: - bn.js "^5.0.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" - integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== - dependencies: - bn.js "^5.1.1" - browserify-rsa "^4.0.1" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.3" - inherits "^2.0.4" - parse-asn1 "^5.1.5" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserslist@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== - dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" - -browserslist@^4.12.0, browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== +browserslist@^4.3.3: + version "4.3.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.4.tgz#4477b737db6a1b07077275b24791e680d4300425" dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" + caniuse-lite "^1.0.30000899" + electron-to-chromium "^1.3.82" + node-releases "^1.0.1" bser@^2.0.0: version "2.0.0" @@ -6394,20 +4339,6 @@ buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^4.3.0: - version "4.9.2" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" - integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -6416,71 +4347,16 @@ buffer@^5.2.0, buffer@^5.2.1, buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -builtin-modules@^1.1.1: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -6496,14 +4372,6 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -6531,19 +4399,30 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw== -camel-case@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== +camelcase@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -6554,15 +4433,9 @@ camelize@^1.0.0: resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= -can-use-dom@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/can-use-dom/-/can-use-dom-0.1.0.tgz#22cc4a34a0abc43950f42c6411024a3f6366b45a" - integrity sha1-IsxKNKCrxDlQ9CxkEQJKP2NmtFo= - -caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001219: - version "1.0.30001244" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001244.tgz#a6dc49ad5fa02d81d04373ec3f5ceabc3da06abf" - integrity sha512-Wb4UFZPkPoJoKKVfELPWytRzpemjP/s0pe22NriANru1NoI+5bGNxzKtk7edYL8rmCWTfQO8eRiF0pn1Dqzx7Q== +caniuse-lite@^1.0.30000898, caniuse-lite@^1.0.30000899: + version "1.0.30000912" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000912.tgz#08e650d4090a9c0ab06bfd2b46b7d3ad6dcaea28" capture-exit@^2.0.0: version "2.0.0" @@ -6579,16 +4452,16 @@ card-validator@^3.0.0: credit-card-type "^5.0.0" lodash "3.10.1" -case-sensitive-paths-webpack-plugin@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" - integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== - caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +ccount@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + integrity sha1-U7ai+BW7d7nChx97mnLDol8djok= + chalk@*, chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -6609,7 +4482,7 @@ chalk@0.5.1: strip-ansi "^0.3.0" supports-color "^0.2.0" -chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -6666,6 +4539,11 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-html4@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + integrity sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA= + character-entities-legacy@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" @@ -6725,67 +4603,20 @@ cheerio@0.22.0, cheerio@^1.0.0-rc.2: lodash.reject "^4.4.0" lodash.some "^4.4.0" -chokidar@^2.0.4, chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== -chownr@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" +circular-json@^0.3.1: + version "0.3.3" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== class-utils@^0.3.5: version "0.3.6" @@ -6797,18 +4628,6 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -classnames@^2.2.5: - version "2.3.1" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" - integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA== - -clean-css@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" - integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== - dependencies: - source-map "~0.6.0" - clean-stack@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" @@ -6819,11 +4638,6 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -6848,16 +4662,6 @@ cli-spinners@^2.5.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.0.tgz#36c7dc98fb6a9a76bd6238ec3f77e2425627e939" integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== -cli-table3@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" @@ -6878,19 +4682,14 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cli-width@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" - integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== - -clipboard@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.8.tgz#ffc6c103dd2967a83005f3f61976aa4655a4cdba" - integrity sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ== +cliui@^3.0.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: - good-listener "^1.2.2" - select "^1.1.2" - tiny-emitter "^2.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" cliui@^4.0.0: version "4.1.0" @@ -6924,6 +4723,14 @@ clone-buffer@^1.0.0: resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= +clone-regexp@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" + integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw== + dependencies: + is-regexp "^1.0.0" + is-supported-regexp-flag "^1.0.0" + clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -6968,6 +4775,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collapse-white-space@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + integrity sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw= + collect-v8-coverage@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" @@ -7031,11 +4843,6 @@ colorette@^1.0.7: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.1.0.tgz#1f943e5a357fac10b4e0f5aaef3b14cdc1af6ec7" integrity sha512-6S062WDQUXi6hOfkO/sBPVwE5ASXY4G2+b4atvhJfSsuUUhIaUKlkjLe9692Ipyt5/a+IPF5aVTu3V5gvXq5cg== -colorette@^1.2.1, colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - colors@0.5.x: version "0.5.1" resolved "https://registry.yarnpkg.com/colors/-/colors-0.5.1.tgz#7d0023eaeb154e8ee9fce75dcb923d0ed1667774" @@ -7065,11 +4872,6 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" -comma-separated-tokens@^1.0.0: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - command-exists@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" @@ -7124,16 +4926,6 @@ commander@^2.18.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.1, commander@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - commander@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" @@ -7184,16 +4976,6 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" @@ -7226,33 +5008,11 @@ connect@^3.6.5: parseurl "~1.3.2" utils-merge "1.0.1" -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - convert-source-map@^1.1.0, convert-source-map@^1.4.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -7260,13 +5020,6 @@ convert-source-map@^1.1.0, convert-source-map@^1.4.0: dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.5.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -7274,53 +5027,18 @@ convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3.0.8, copy-to-clipboard@^3.3.1: +copy-to-clipboard@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== dependencies: toggle-selection "^1.0.6" -core-js-compat@^3.14.0, core-js-compat@^3.15.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.15.2.tgz#47272fbb479880de14b4e6081f71f3492f5bd3cb" - integrity sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js-pure@^3.0.1: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.15.2.tgz#c8e0874822705f3385d3197af9348f7c9ae2e3ce" - integrity sha512-D42L7RYh1J2grW8ttxoY1+17Y4wXZeKe7uyplAI3FkNQyI5OgBIAjUfFiTPfL1rs0qLpxaabITNbjKl1Sp82tA== - core-js@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e" @@ -7356,11 +5074,6 @@ core-js@^3.0.0: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.10.0.tgz#9a020547c8b6879f929306949e31496bbe2ae9b3" integrity sha512-MQx/7TLgmmDVamSyfE+O+5BHvG1aUGj/gHhLn1wVtm2B5u1eVIPvh7vkfjwWKNCjrTJB8+He99IntSQ1qP+vYQ== -core-js@^3.0.1, core-js@^3.0.4: - version "3.15.2" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.15.2.tgz#740660d2ff55ef34ce664d7e2455119c5bdd3d61" - integrity sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q== - core-js@^3.3.2: version "3.4.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.1.tgz#76dd6828412900ab27c8ce0b22e6114d7ce21b18" @@ -7371,14 +5084,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -corejs-upgrade-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" - integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== - dependencies: - resolve-from "^5.0.0" - webpack "^4.38.0" - cosmiconfig@5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" @@ -7440,37 +5145,6 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" -create-ecdh@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - create-react-class@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" @@ -7480,14 +5154,6 @@ create-react-class@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" -create-react-context@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c" - integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw== - dependencies: - gud "^1.0.0" - warning "^4.0.3" - credit-card-type@^5.0.0: version "5.0.4" resolved "https://registry.yarnpkg.com/credit-card-type/-/credit-card-type-5.0.4.tgz#2dd9df280411ce2bb91ed95ac31e814605717aed" @@ -7500,17 +5166,6 @@ cross-fetch@^3.0.4, cross-fetch@^3.0.6: dependencies: node-fetch "2.6.1" -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - cross-spawn@^0.2.9: version "0.2.9" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-0.2.9.tgz#bd67f96c07efb6303b7fe94c1e979f88478e0a39" @@ -7527,6 +5182,17 @@ cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" @@ -7545,23 +5211,6 @@ cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -7575,25 +5224,6 @@ css-in-js-utils@^2.0.0: hyphenate-style-name "^1.0.2" isobject "^3.0.1" -css-loader@^3.0.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" - integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== - dependencies: - camelcase "^5.3.1" - cssesc "^3.0.0" - icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.32" - postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" - postcss-modules-scope "^2.2.0" - postcss-modules-values "^3.0.0" - postcss-value-parser "^4.1.0" - schema-utils "^2.7.0" - semver "^6.3.0" - css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" @@ -7604,17 +5234,6 @@ css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" -css-select@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.3.tgz#a70440f70317f2669118ad74ff105e65849c7067" - integrity sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA== - dependencies: - boolbase "^1.0.0" - css-what "^5.0.0" - domhandler "^4.2.0" - domutils "^2.6.0" - nth-check "^2.0.0" - css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -7625,15 +5244,6 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" -css-to-react-native@^2.2.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" - integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw== - dependencies: - camelize "^1.0.0" - css-color-keywords "^1.0.0" - postcss-value-parser "^3.3.0" - css-to-react-native@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.1.tgz#cf0f61e0514846e2d4dc188b0886e29d8bef64a2" @@ -7669,15 +5279,15 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== -css-what@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" - integrity sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg== - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +css@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" cssom@^0.4.1: version "0.4.4" @@ -7701,31 +5311,28 @@ csstype@^2.2.0: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.5.7.tgz#bf9235d5872141eccfb2d16d82993c6b149179ff" integrity sha512-Nt5VDyOTIIV4/nRFswoCKps1R5CD1hkiyjBE9/thNaNZILLEviVw9yWQw15+O+CpNjQKB/uvdcxFFOrSflY3Yw== -csstype@^2.5.7: - version "2.6.17" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e" - integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A== - -csstype@^3.0.2: - version "3.0.8" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.8.tgz#d2266a792729fb227cd216fb572f43728e1ad340" - integrity sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw== +csstype@^2.6.9: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== csstype@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.6.tgz#865d0b5833d7d8d40f4e5b8a6d76aea3de4725ef" integrity sha512-+ZAmfyWMT7TiIlzdqJgjMb7S4f1beorDbWbsocyK4RaiqA5RTX3K14bnBWmmA9QEM0gRdsjyyrEmcyga8Zsxmw== +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= + dependencies: + array-find-index "^1.0.1" + cycle@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2" integrity sha1-IegLK+hYD5i0aPN5QwZisEbDStI= -cyclist@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" - integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= - danger-plugin-jest@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/danger-plugin-jest/-/danger-plugin-jest-1.3.0.tgz#7340e3c45f9f1707a57d031d8e5581e23f68199d" @@ -7816,7 +5423,7 @@ debounce@^1.2.0: resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.2.0.tgz#44a540abc0ea9943018dc0eaa95cce87f65cd131" integrity sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -7837,13 +5444,6 @@ debug@4, debug@^4.3.1: dependencies: ms "2.1.2" -debug@^3.0.0, debug@^3.2.5: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -7851,14 +5451,22 @@ debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -7885,18 +5493,6 @@ deep-diff@^0.3.5: resolved "https://registry.yarnpkg.com/deep-diff/-/deep-diff-0.3.8.tgz#c01de63efb0eec9798801d40c7e0dae25b582c84" integrity sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ= -deep-equal@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - deep-extend@^0.6.0, deep-extend@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -7907,11 +5503,6 @@ deep-is@~0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= -deep-object-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/deep-object-diff/-/deep-object-diff-1.1.0.tgz#d6fabf476c2ed1751fc94d5ca693d2ed8c18bc5a" - integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== - deepmerge@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" @@ -7968,16 +5559,24 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +del@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegate@^3.1.2: - version "3.2.0" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" - integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== - delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" @@ -8007,14 +5606,6 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -8040,35 +5631,6 @@ detect-newline@^3.0.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== -detect-node-es@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/detect-node-es/-/detect-node-es-1.1.0.tgz#163acdf643330caa0b4cd7c21e7ee7755d6fa493" - integrity sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ== - -detect-port-alt@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" - integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detect-port@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1" - integrity sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ== - dependencies: - address "^1.0.1" - debug "^2.6.0" - -detect-secrets@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/detect-secrets/-/detect-secrets-1.0.6.tgz#ce6f46840e666f7d396ffb9b458c29ce9fdb5afd" - integrity sha512-bAEmXtMJNS/By/TCg9uSW9Sp0V1Z0N+uwlQWFUMbCVri5Yq5rM8gVs+2zzNIjNOy36o5kANZRrMc+22Zf6eRFQ== - dependencies: - debug "^4.1.0" - which "^1.3.1" - devtools-protocol@0.0.847576: version "0.0.847576" resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.847576.tgz#2f201bfb68aa9ef4497199fbd7f5d5dfde3b200b" @@ -8094,15 +5656,6 @@ diff@^4.0.1: resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - dir-glob@2.0.0, dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" @@ -8111,13 +5664,6 @@ dir-glob@2.0.0, dir-glob@^2.0.0: arrify "^1.0.1" path-type "^3.0.0" -dom-converter@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" - integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== - dependencies: - utila "~0.4" - dom-serializer@0: version "0.2.2" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" @@ -8126,15 +5672,6 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" - integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.2.0" - entities "^2.0.0" - dom-serializer@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -8148,11 +5685,6 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - domelementtype@1: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" @@ -8168,11 +5700,6 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== -domelementtype@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" - integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== - domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -8187,13 +5714,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^4.0.0, domhandler@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" - integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== - dependencies: - domelementtype "^2.2.0" - domutils@1.5.1, domutils@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -8210,52 +5730,18 @@ domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.5.2, domutils@^2.6.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442" - integrity sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -dotenv-defaults@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/dotenv-defaults/-/dotenv-defaults-1.1.1.tgz#032c024f4b5906d9990eb06d722dc74cc60ec1bd" - integrity sha512-6fPRo9o/3MxKvmRZBD3oNFdxODdhJtIy1zcJeUSCs6HCy4tarUpd+G67UTU9tF6OWXeSPqsm4fPAB+2eY9Rt9Q== - dependencies: - dotenv "^6.2.0" - -dotenv-expand@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" - integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== - -dotenv-webpack@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/dotenv-webpack/-/dotenv-webpack-1.8.0.tgz#7ca79cef2497dd4079d43e81e0796bc9d0f68a5e" - integrity sha512-o8pq6NLBehtrqA8Jv8jFQNtG9nhRtVqmoD4yWbgUyoU3+9WBlPe+c2EAiaJok9RB28QvrWvdWLZGeTT5aATDMg== +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: - dotenv-defaults "^1.0.2" + is-obj "^1.0.0" dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== -dotenv@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" - integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== - dotenv@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.0.0.tgz#ed310c165b4e8a97bb745b0a9d99c31bda566440" @@ -8271,21 +5757,6 @@ duplexer3@^0.1.4: resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= -duplexer@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - easy-peasy@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/easy-peasy/-/easy-peasy-3.3.0.tgz#1ae7cbaa834dad5aa404f1437726fb8c0eed3cef" @@ -8333,35 +5804,9 @@ ejs@^2.5.9: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" integrity sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ== -ejs@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.723: - version "1.3.774" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz#4d6661a23119e35151646c9543b346bb3beca423" - integrity sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA== - -element-resize-detector@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.3.tgz#5078d9b99398fe4c589f8c8df94ff99e5d413ff3" - integrity sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ== - dependencies: - batch-processor "1.0.0" - -elliptic@^6.5.3: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" +electron-to-chromium@^1.3.82: + version "1.3.85" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.85.tgz#5c46f790aa96445cabc57eb9d17346b1e46476fe" emoji-regex@^7.0.1: version "7.0.3" @@ -8378,20 +5823,6 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -emotion-theming@^10.0.19: - version "10.0.27" - resolved "https://registry.yarnpkg.com/emotion-theming/-/emotion-theming-10.0.27.tgz#1887baaec15199862c89b1b984b79806f2b9ab10" - integrity sha512-MlF1yu/gYh8u+sLUqA0YuA9JX0P4Hb69WlKc/9OLo+WCXuX6sy/KoIa+qJimgmr2dWqnypYKYPX37esjDBbhdw== - dependencies: - "@babel/runtime" "^7.5.5" - "@emotion/weak-memoize" "0.2.5" - hoist-non-react-statics "^3.3.0" - encodeurl@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" @@ -8409,7 +5840,7 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: +end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -8426,15 +5857,6 @@ enhanced-resolve@3.3.0: object-assign "^4.0.1" tapable "^0.2.5" -enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - enquirer@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.1.tgz#f1bf52ea38470525f41412d723a62ba6868559c6" @@ -8543,13 +5965,6 @@ errno@^0.1.3: dependencies: prr "~1.0.1" -errno@~0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -8603,28 +6018,6 @@ es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0: is-regex "^1.0.4" object-keys "^1.0.12" -es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: - version "1.18.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" - integrity sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.10.3" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - es-abstract@^1.6.1: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -8636,25 +6029,6 @@ es-abstract@^1.6.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-get-iterator@^1.0.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" - integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.0" - has-symbols "^1.0.1" - is-arguments "^1.1.0" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.5" - isarray "^2.0.5" - es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -8664,20 +6038,6 @@ es-to-primitive@^1.1.1, es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-shim@^4.5.13: - version "4.5.15" - resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.15.tgz#6a26869b261854a3b045273f5583c52d390217fe" - integrity sha512-FYpuxEjMeDvU4rulKqFdukQyZSTpzhg4ScQHrAosrlVpR6GFyaw14f74yn2+4BugniIS0Frpg7TvwZocU4ZMTw== - es6-promise@^4.0.3: version "4.2.4" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" @@ -8690,31 +6050,21 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -es6-shim@^0.35.5: - version "0.35.6" - resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" - integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" @@ -8732,14 +6082,6 @@ escodegen@^1.11.1: optionalDependencies: source-map "~0.6.1" -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" @@ -8750,28 +6092,11 @@ esprima@^4.0.1: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esrecurse@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -8792,36 +6117,11 @@ eventemitter3@^3.0.0: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.0.1.tgz#4ce66c3fc5b5a6b9f2245e359e1938f1ab10f960" integrity sha512-QOCPu979MMWX9XNlfRZoin+Wm+bK1SP7vv3NGUniYwuSJK/+cPA10blMaeRgzg31RvoSFk6FsCDVa4vNryBTGA== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== - events@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59" integrity sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg== -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -eventsource@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.1.0.tgz#00e8ca7c92109e94b0ddf32dac677d841028cfaf" - integrity sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg== - dependencies: - original "^1.0.0" - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - exec-sh@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" @@ -8871,6 +6171,14 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execall@^1.0.0: + name execa + version "1.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= + dependencies: + clone-regexp "^1.0.0" + exif-parser@^0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz#58a9d2d72c02c1f6f02a0ef4a9166272b7760922" @@ -8913,42 +6221,6 @@ expect@^25.2.7: jest-message-util "^25.2.6" jest-regex-util "^25.2.6" -express@^4.17.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - extend-shallow@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" @@ -8971,6 +6243,11 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extend@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= + extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -9103,20 +6380,6 @@ fastest-stable-stringify@^2.0.2: resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== -fault@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/fault/-/fault-1.0.4.tgz#eafcfc0a6d214fc94601e170df29954a4f842f13" - integrity sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA== - dependencies: - format "^0.2.0" - -faye-websocket@~0.11.1: - version "0.11.4" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" - integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== - dependencies: - websocket-driver ">=0.5.1" - fb-watchman@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" @@ -9192,11 +6455,6 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -9204,40 +6462,26 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.0.0, figures@^3.2.0: +figures@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-loader@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-4.3.0.tgz#780f040f729b3d18019f20605f723e844b8a58af" - integrity sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.5.0" - -file-system-cache@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/file-system-cache/-/file-system-cache-1.0.5.tgz#84259b36a2bbb8d3d6eb1021d3132ffe64cfff4f" - integrity sha1-hCWbNqK7uNPW6xAh0xMv/mTP/08= +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: - bluebird "^3.3.5" - fs-extra "^0.30.0" - ramda "^0.21.0" + flat-cache "^1.2.1" + object-assign "^4.0.1" file-type@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz#a68d5ad07f486414dfb2c8866f73161946714a18" integrity sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw== -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -9273,19 +6517,6 @@ finalhandler@1.1.0: statuses "~1.3.1" unpipe "~1.0.0" -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -9295,24 +6526,6 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" - integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - find-replace@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" @@ -9320,18 +6533,6 @@ find-replace@^3.0.0: dependencies: array-back "^3.0.1" -find-root@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" - integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== - -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -9339,6 +6540,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -9379,26 +6587,21 @@ first-chunk-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -flush-write-stream@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== +flat-cache@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" fn-name@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c" integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA== -focus-lock@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/focus-lock/-/focus-lock-0.9.1.tgz#e8ec7d4821631112193ae09258107f531588da01" - integrity sha512-/2Nj60Cps6yOLSO+CkVbeSKfwfns5XbX6HOedIK9PdzODP04N9c3xqOcPXayN0WsT9YjJvAnXmI0NdqNIDf5Kw== - dependencies: - tslib "^2.0.3" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -9409,20 +6612,6 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - form-data@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -9449,11 +6638,6 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -format@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b" - integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs= - formik@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/formik/-/formik-2.1.4.tgz#8deef07ec845ea98f75e03da4aad7aab4ac46570" @@ -9468,11 +6652,6 @@ formik@2.1.4: tiny-warning "^1.0.2" tslib "^1.10.0" -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -9485,14 +6664,6 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -9503,17 +6674,6 @@ fs-exists-sync@^0.1.0: resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" integrity sha1-mC1ok6+RjnLQjeyehnP/K1qNat0= -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A= - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - fs-extra@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950" @@ -9541,7 +6701,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -9567,23 +6727,6 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.6.0" -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -9602,11 +6745,6 @@ fsevents@^2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -9621,11 +6759,6 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" -fuse.js@^3.4.6: - version "3.6.1" - resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" - integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== - gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -9665,15 +6798,6 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - get-monorepo-packages@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz#3eee88d30b11a5f65955dec6ae331958b2a168e4" @@ -9788,21 +6912,6 @@ gitlog@^3.1.2: debug "^3.1.0" lodash.assign "^4.2.0" -glob-base@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" - integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= - dependencies: - glob-parent "^2.0.0" - is-glob "^2.0.0" - -glob-parent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" - integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= - dependencies: - is-glob "^2.0.0" - glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -9811,13 +6920,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" @@ -9859,13 +6961,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -9884,16 +6979,7 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -global@^4.3.2, global@^4.4.0, global@~4.4.0: +global@~4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== @@ -9906,44 +6992,66 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -globalthis@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" - integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: - define-properties "^1.1.3" + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" -globby@8.0.2, globby@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" - integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= dependencies: array-union "^1.0.1" - dir-glob "2.0.0" - fast-glob "^2.0.2" + dir-glob "^2.0.0" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -globby@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" - integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= +globby@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" dependencies: array-union "^1.0.1" dir-glob "^2.0.0" + fast-glob "^2.0.2" glob "^7.1.2" ignore "^3.3.5" pify "^3.0.0" slash "^1.0.0" -good-listener@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" - integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= +globby@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + +gonzales-pe@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" + integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw== dependencies: - delegate "^3.1.2" + minimist "1.1.x" got@^7.0.0: version "7.1.0" @@ -9970,11 +7078,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.3 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== -graceful-fs@^4.2.2: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - grapheme-splitter@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" @@ -10023,19 +7126,6 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= -gud@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" - integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== - -gzip-size@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" - integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== - dependencies: - duplexer "^0.1.1" - pify "^4.0.1" - har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -10063,11 +7153,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -10092,11 +7177,6 @@ has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -10147,48 +7227,11 @@ has@^1.0.1, has@^1.0.3: dependencies: function-bind "^1.1.1" -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hast-util-parse-selector@^2.0.0: - version "2.2.5" - resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" - integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== - -hastscript@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.2.tgz#bde2c2e56d04c62dd24e8c5df288d050a355fb8a" - integrity sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ== - dependencies: - comma-separated-tokens "^1.0.0" - hast-util-parse-selector "^2.0.0" - property-information "^5.0.0" - space-separated-tokens "^1.0.0" - hasurl@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hasurl/-/hasurl-1.0.0.tgz#e4c619097ae1e8fc906bee904ce47e94f5e1ea37" integrity sha512-43ypUd3DbwyCT01UYpA99AEZxZ4aKtRxWGBHEIbjcOsUghd9YUON0C+JF6isNjaiwC/UF5neaUudy6JS9jZPZQ== -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - hermes-engine@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/hermes-engine/-/hermes-engine-0.5.1.tgz#601115e4b1e0a17d9aa91243b96277de4e926e09" @@ -10201,20 +7244,6 @@ hermes-profile-transformer@^0.0.6: dependencies: source-map "^0.7.3" -highlight.js@~9.13.0: - version "9.13.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e" - integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - hoist-non-react-statics@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" @@ -10260,11 +7289,6 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" - integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== - html-entities@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.2.tgz#760b404685cb1d794e4f4b744332e3b00dcfe488" @@ -10275,35 +7299,12 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -html-minifier-terser@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" - integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== - dependencies: - camel-case "^4.1.1" - clean-css "^4.2.3" - commander "^4.1.1" - he "^1.2.0" - param-case "^3.0.3" - relateurl "^0.2.7" - terser "^4.6.3" - -html-webpack-plugin@^4.0.0-beta.2: - version "4.5.2" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" - integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== - dependencies: - "@types/html-minifier-terser" "^5.0.0" - "@types/tapable" "^1.0.5" - "@types/webpack" "^4.41.8" - html-minifier-terser "^5.0.1" - loader-utils "^1.2.3" - lodash "^4.17.20" - pretty-error "^2.1.1" - tapable "^1.1.3" - util.promisify "1.0.0" - -htmlparser2@^3.9.1: +html-tags@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= + +htmlparser2@^3.9.1, htmlparser2@^3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= @@ -10315,27 +7316,6 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^2.0.2" -htmlparser2@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" - integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== - dependencies: - domelementtype "^2.0.1" - domhandler "^4.0.0" - domutils "^2.5.2" - entities "^2.0.0" - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -10346,22 +7326,6 @@ http-errors@~1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-parser-js@>=0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.3.tgz#01d2709c79d41698bb01d4decc5e9da4e4a033d9" - integrity sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg== - http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -10379,11 +7343,6 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" @@ -10461,23 +7420,11 @@ iconv-lite@^0.4.17: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== -icss-utils@^4.0.0, icss-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" - integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== - dependencies: - postcss "^7.0.14" - -ieee754@^1.1.13, ieee754@^1.1.4: +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= - ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -10490,6 +7437,10 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== +ignore@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.0.4.tgz#33168af4a21e99b00c5d41cbadb6a6cb49903a45" + image-q@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz#fc84099664460b90ca862d9300b6bfbbbfbf8056" @@ -10510,11 +7461,6 @@ immer-peasy@3.1.3: resolved "https://registry.yarnpkg.com/immer-peasy/-/immer-peasy-3.1.3.tgz#d0ea8d388f47ec6b15ab2ca19ffb9f0bf4310110" integrity sha512-WzoZ96A93jOmcDOLNChMWAqy+ZU8vEYQx2DcKjgo7P5SToiJs+GL+5yQbWzH8X02Lhvv6xrGgVNa1xbki66Eow== -immer@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" - integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== - immutable@^4.0.0-rc.12: version "4.0.0-rc.12" resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" @@ -10525,13 +7471,6 @@ immutable@~3.7.6: resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.7.6.tgz#13b4d3cb12befa15482a26fe1b2ebae640071e4b" integrity sha1-E7TTyxK++hVIKib+Gy665kAHHks= -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - import-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-3.0.0.tgz#20845547718015126ea9b3676b7592fb8bd4cf92" @@ -10562,13 +7501,6 @@ import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - import-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/import-from/-/import-from-3.0.0.tgz#055cfec38cd5a27d8057ca51376d7d3bf0891966" @@ -10576,6 +7508,10 @@ import-from@^3.0.0: dependencies: resolve-from "^5.0.0" +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -10589,7 +7525,7 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -indent-string@^3.2.0: +indent-string@^3.0.0, indent-string@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= @@ -10599,10 +7535,10 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -infer-owner@^1.0.3, infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= inflight@^1.0.4: version "1.0.6" @@ -10612,51 +7548,32 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.4, inherits@~2.0.1: +inherits@2, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +ini@^1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inline-style-prefixer@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b" - integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg== - dependencies: - css-in-js-utils "^2.0.0" - -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inline-style-prefixer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b" + integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg== + dependencies: + css-in-js-utils "^2.0.0" inquirer@^3.0.6: version "3.3.0" @@ -10716,51 +7633,23 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@^7.0.0: - version "7.3.3" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" - integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== - dependencies: - ansi-escapes "^4.2.1" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-width "^3.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.19" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.6.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= -interpret@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" - integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== - -invariant@2.2.4, invariant@^2.2.3, invariant@^2.2.4: +invariant@2.2.4, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -10776,11 +7665,6 @@ ip@^1.1.5: resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -10800,6 +7684,11 @@ is-alphabetical@^1.0.0: resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" integrity sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg= +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + is-alphanumerical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" @@ -10808,13 +7697,6 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-arguments@^1.0.4, is-arguments@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== - dependencies: - call-bind "^1.0.0" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -10825,51 +7707,27 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== -is-bigint@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" - integrity sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - is-boolean-object@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.0.tgz#98f8b28030684219a95f375cfbd88ce3405dff93" integrity sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M= -is-boolean-object@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" - integrity sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng== - dependencies: - call-bind "^1.0.2" - -is-buffer@^1.1.5: +is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= + dependencies: + builtin-modules "^1.0.0" + is-callable@^1.1.3, is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" -is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -10931,19 +7789,6 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - -is-dom@^1.0.9: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" - integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== - dependencies: - is-object "^1.0.1" - is-window "^1.0.2" - is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -10956,11 +7801,6 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" -is-extglob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" - integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= - is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -10993,13 +7833,6 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.0.0.tgz#038c31b774709641bda678b1f06a4e3227c10b3e" integrity sha512-elzyIdM7iKoFHzcrndIqjYomImhxrFRnGP3galODoII4TB9gI7mZ+FnlLQmmjf27SxHS2gKEeyhX5/+YRS6H9g== -is-glob@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" - integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= - dependencies: - is-extglob "^1.0.0" - is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -11014,13 +7847,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" @@ -11031,25 +7857,10 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-map@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" - integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - is-number-object@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.3.tgz#f265ab89a9f445034ef6aff15a8f00b00f551799" -is-number-object@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" - integrity sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw== - is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -11062,7 +7873,7 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: +is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= @@ -11079,6 +7890,25 @@ is-odd@^1.0.0: dependencies: is-number "^3.0.0" +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -11110,14 +7940,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-regex@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" - integrity sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ== - dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.2" - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -11128,11 +7950,6 @@ is-retry-allowed@^1.0.0: resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= -is-root@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" - integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== - is-scoped@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" @@ -11140,11 +7957,6 @@ is-scoped@^1.0.0: dependencies: scoped-regex "^1.0.0" -is-set@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" - integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== - is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -11159,16 +7971,16 @@ is-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.4.tgz#cc3a9b69857d621e963725a24caeec873b826e64" -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" - integrity sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w== - is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= +is-supported-regexp-flag@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" + integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ== + is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -11176,13 +7988,6 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" -is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -11198,16 +8003,21 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= -is-window@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" - integrity sha1-LIlspT25feRdPDMTOmXYyfVjSA0= +is-whitespace-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" + integrity sha1-muAXbzKCtlRXoZks2whPil+DPjs= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-word-character@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" + integrity sha1-WgP6HqkazopusMfNdw64bWXIvvs= + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -11218,16 +8028,11 @@ is-wsl@^2.1.1: resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - isbinaryfile@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" @@ -11336,19 +8141,6 @@ iterall@^1.1.3, iterall@^1.2.2: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7" integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA== -iterate-iterator@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" - integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== - -iterate-value@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" - integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== - dependencies: - es-get-iterator "^1.0.2" - iterate-iterator "^1.0.1" - java-properties@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/java-properties/-/java-properties-1.0.2.tgz#ccd1fa73907438a5b5c38982269d0e771fe78211" @@ -11809,6 +8601,13 @@ jest-snapshot@test: natural-compare "^1.4.0" pretty-format "21.3.0-beta.15" +jest-styled-components@7.0.0-2: + version "7.0.0-2" + resolved "https://registry.yarnpkg.com/jest-styled-components/-/jest-styled-components-7.0.0-2.tgz#c827ab84a3e69c03579b32963f9e55f0b72f75a4" + integrity sha512-5Rtv9C1qaqamc1RNwg0IquGS+CGSVXbySVOtC3vs4XjcfI+RWTb+5V1lqIU+Qj4dAyk/3x+seiLvnJ+X80n8Gw== + dependencies: + css "^2.2.4" + jest-util@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.9.0.tgz#7396814e48536d2e85a37de3e4c431d7cb140162" @@ -11935,14 +8734,6 @@ jest-worker@^25.2.6: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^25.4.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest@25.2.7: version "25.2.7" resolved "https://registry.yarnpkg.com/jest/-/jest-25.2.7.tgz#3929a5f35cdd496f7756876a206b99a94e1e09ae" @@ -11993,6 +8784,14 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.10.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -12061,7 +8860,7 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= -json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -12087,11 +8886,6 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json3@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" - integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== - json5@2.1.0, json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -12104,20 +8898,6 @@ json5@^0.5.0: resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - json5@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" @@ -12263,6 +9043,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +known-css-properties@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.9.0.tgz#28f8a7134cfa3b0aa08b1e5edf64a57f64fc23af" + ky-universal@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ky-universal/-/ky-universal-0.3.0.tgz#3fcbb0dd03da39b5f05100d9362a630d5e1d402e" @@ -12276,16 +9060,12 @@ ky@^0.12.0: resolved "https://registry.yarnpkg.com/ky/-/ky-0.12.0.tgz#c05be95e6745ba422a6d2cc8ae964164962279f9" integrity sha512-t9b7v3V2fGwAcQnnDDQwKQGF55eWrf4pwi1RN08Fy8b/9GEwV7Ea0xQiaSW6ZbeghBHIwl8kgnla4vVo9seepQ== -lazy-universal-dotenv@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" - integrity sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ== +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: - "@babel/runtime" "^7.5.0" - app-root-dir "^1.0.2" - core-js "^3.0.4" - dotenv "^8.0.0" - dotenv-expand "^5.1.0" + invert-kv "^1.0.0" lcid@^2.0.0: version "2.0.0" @@ -12294,6 +9074,18 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.0" +leprechaun@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/leprechaun/-/leprechaun-0.0.2.tgz#8b96514a9e634c53fbe59a8094f3378c8fb2084d" + integrity sha1-i5ZRSp5jTFP75ZqAlPM3jI+yCE0= + dependencies: + log-symbols "^1.0.2" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -12391,20 +9183,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" - integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== - dependencies: - big.js "^5.2.2" - emojis-list "^2.0.0" - json5 "^1.0.1" - loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" @@ -12414,24 +9192,6 @@ loader-utils@^1.1.0: emojis-list "^2.0.0" json5 "^0.5.0" -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" - integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - localforage@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.9.0.tgz#f3e4d32a8300b362b4634cc4e066d9d00d2f09d1" @@ -12502,11 +9262,6 @@ lodash.compact@^3.0.1: resolved "https://registry.yarnpkg.com/lodash.compact/-/lodash.compact-3.0.1.tgz#540ce3837745975807471e16b4a2ba21e7256ca5" integrity sha1-VAzjg3dFl1gHRx4WtKK6IeclbKU= -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -12610,7 +9365,7 @@ lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= -lodash.merge@^4.4.0: +lodash.merge@^4.4.0, lodash.merge@^4.6.1: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== @@ -12640,6 +9395,11 @@ lodash.set@^4.3.2: resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha1-OdcUo1NXFHg3rv1ktdy7Fr7Nj40= + lodash.some@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" @@ -12685,7 +9445,7 @@ lodash@3.10.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21: +lodash@4.17.21, lodash@^4.17.12, lodash@^4.17.15: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -12700,6 +9460,20 @@ lodash@^4.17.19: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.1.0.tgz#f35fa60e278832b538dc4dddcbb478a45d3e3be6" + integrity sha512-zLeLrzMA1A2vRF1e/0Mo+LNINzi6jzBylHj5WqvQ/WK/5WCZt8si9SyN4p9llr/HRYvVR1AoXHRHl4WTHyQAzQ== + dependencies: + chalk "^2.0.1" + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -12741,6 +9515,11 @@ lolex@^5.0.0: dependencies: "@sinonjs/commons" "^1.7.0" +longest-streak@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" + integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA== + loose-envify@^1.0.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -12755,26 +9534,19 @@ loose-envify@^1.1.0: dependencies: js-tokens "^3.0.0" -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: - tslib "^2.0.3" + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= -lowlight@~1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/lowlight/-/lowlight-1.11.0.tgz#1304d83005126d4e8b1dc0f07981e9b689ec2efc" - integrity sha512-xrGGN6XLL7MbTMdPD6NfWPwY43SNkjf/d0mecSx/CW36fUZTjRHEq0/Cdug3TWKtRXLWi7iMl1eP0olYxj/a4A== - dependencies: - fault "^1.0.2" - highlight.js "~9.13.0" - lru-cache@^2.5.0: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" @@ -12788,13 +9560,6 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -12826,14 +9591,6 @@ make-dir@^1.1.0: dependencies: pify "^3.0.0" -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" @@ -12841,13 +9598,6 @@ make-dir@^3.0.0: dependencies: semver "^6.0.0" -make-dir@^3.0.2, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@^1.1.1: version "1.3.5" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" @@ -12872,6 +9622,16 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= + map-or-similar@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" @@ -12884,22 +9644,28 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -markdown-to-jsx@^6.11.4: - version "6.11.4" - resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-6.11.4.tgz#b4528b1ab668aef7fe61c1535c27e837819392c5" - integrity sha512-3lRCD5Sh+tfA52iGgfs/XZiw33f7fFX9Bn55aNnVNUd2GzLDkOWyKYYD8Yju2B1Vn+feiEdgJs8T6Tg0xNokPw== - dependencies: - prop-types "^15.6.2" - unquote "^1.1.0" +markdown-escapes@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" + integrity sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg= -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== +markdown-table@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" + integrity sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw= + +mathml-tag-names@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578" + integrity sha1-jUEmgWi/htEQK5gQnijlMeejRXg= + +mdast-util-compact@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" + integrity sha1-zbX4TitqLTEU3zO9BdnLMuPECDo= dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" + unist-util-modify-children "^1.0.0" + unist-util-visit "^1.1.0" mdn-data@2.0.14: version "2.0.14" @@ -12916,11 +9682,6 @@ meant@^1.0.1: resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.1.tgz#66044fea2f23230ec806fb515efea29c44d2115d" integrity sha512-UakVLFjKkbbUwNWJ2frVLnnAtbb7D7DsloxRd3s/gDpI8rdv8W5Hp3NaDb+POBI1fQdeussER6NB8vpcRURvlg== -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - mem-fs-editor@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-5.1.0.tgz#51972241640be8567680a04f7adaffe5fc603667" @@ -12973,7 +9734,7 @@ memoizerific@^1.11.3: dependencies: map-or-similar "^1.5.0" -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -12981,18 +9742,19 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" merge-stream@^1.0.1: version "1.0.1" @@ -13010,11 +9772,6 @@ merge2@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.3.tgz#7ee99dbd69bb6481689253f018488a1b902b0ed5" -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - metro-babel-register@0.58.0: version "0.58.0" resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.58.0.tgz#5c44786d49a044048df56cf476a2263491d4f53a" @@ -13382,11 +10139,6 @@ metro@0.58.0, metro@^0.58.0: xpipe "^1.0.5" yargs "^14.2.0" -microevent.ts@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" - integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== - micromatch@^3.0.3: version "3.1.4" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.4.tgz#bb812e741a41f982c854e42b421a7eac458796f4" @@ -13441,19 +10193,6 @@ micromatch@^4.0.4: braces "^3.0.1" picomatch "^2.2.3" -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.48.0: - version "1.48.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.48.0.tgz#e35b31045dd7eada3aaad537ed88a33afbef2d1d" - integrity sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ== - "mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" @@ -13501,19 +10240,12 @@ mime-types@~2.1.19: dependencies: mime-db "~1.37.0" -mime-types@~2.1.24: - version "2.1.31" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.31.tgz#a00d76b74317c61f9c2db2218b8e9f8e9c5c9e6b" - integrity sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg== - dependencies: - mime-db "1.48.0" - mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== -mime@1.6.0, mime@^1.3.4: +mime@^1.3.4: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== @@ -13523,11 +10255,6 @@ mime@^2.4.1: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mime@^2.4.4: - version "2.5.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" @@ -13550,28 +10277,31 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@1.1.x: + version "1.1.3" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" + integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= + minimist@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.2.1.tgz#827ba4e7593464e7c221e8c5bed930904ee2c455" @@ -13587,27 +10317,6 @@ minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" @@ -13616,13 +10325,6 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minipass@^3.0.0, minipass@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.3.tgz#7d42ff1f39635482e15f9cdb53184deebd5815fd" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - minizlib@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -13630,22 +10332,6 @@ minizlib@^1.2.1: dependencies: minipass "^2.9.0" -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -13666,7 +10352,7 @@ mkdirp@^0.5.0: dependencies: minimist "0.0.8" -mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5: +mkdirp@^0.5.1, mkdirp@^0.5.5: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -13690,28 +10376,11 @@ mout@^1.0.0: resolved "https://registry.yarnpkg.com/mout/-/mout-1.2.2.tgz#c9b718a499806a0632cede178e80f436259e777d" integrity sha512-w0OUxFEla6z3d7sVpMZGBCpQvYh8PHS1wZ6Wu9GNKHMpAHWJ0if0LsQZh3DlOqw55HlhJEOMLpFnwtxp99Y5GA== -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -13737,11 +10406,6 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -mute-stream@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" - integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== - nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" @@ -13805,6 +10469,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +nconf@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/nconf/-/nconf-0.10.0.tgz#da1285ee95d0a922ca6cee75adcf861f48205ad2" + integrity sha512-fKiXMQrpP7CYWJQzKkPPx9hPgmq+YLDyxcG9N8RpiE9FoCkCbzD0NyW0YhE3xn3Aupe7nnDeIx4PFzYehpHT9Q== + dependencies: + async "^1.4.0" + ini "^1.3.0" + secure-keys "^1.0.0" + yargs "^3.19.0" + nearley@^2.7.10: version "2.11.0" resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.11.0.tgz#5e626c79a6cd2f6ab9e7e5d5805e7668967757ae" @@ -13828,29 +10502,11 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -neo-async@^2.5.0, neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" @@ -13879,35 +10535,6 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" @@ -13940,10 +10567,11 @@ node-pre-gyp@^0.12.0: semver "^5.3.0" tar "^4" -node-releases@^1.1.29, node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== +node-releases@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.4.tgz#2d585de8c6c81d00017e063e7810a63889aa6756" + dependencies: + semver "^5.3.0" node-stream-zip@^1.9.1: version "1.11.3" @@ -13976,6 +10604,16 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -13983,7 +10621,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0, normalize-path@~3.0.0: +normalize-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -13993,6 +10631,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + npm-bundled@^1.0.1: version "1.0.6" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" @@ -14020,7 +10663,7 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -14037,13 +10680,6 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== - dependencies: - boolbase "^1.0.0" - nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" @@ -14100,11 +10736,6 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@^1.10.3, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - object-inspect@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" @@ -14125,11 +10756,6 @@ object-keys@^1.0.12: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" integrity sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg== -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -14147,16 +10773,6 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" @@ -14187,25 +10803,6 @@ object.fromentries@^2.0.0: function-bind "^1.1.1" has "^1.0.1" -"object.fromentries@^2.0.0 || ^1.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" - integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - has "^1.0.3" - -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -14283,21 +10880,13 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" -open@^6.2.0, open@^6.3.0: +open@^6.2.0: version "6.4.0" resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== dependencies: is-wsl "^1.1.0" -open@^7.0.0: - version "7.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" - integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - opencollective-postinstall@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz#5657f1bede69b6e33a45939b061eb53d3c6c3a89" @@ -14354,23 +10943,18 @@ ora@^5.4.0: strip-ansi "^6.0.0" wcwidth "^1.0.1" -original@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" - integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== - dependencies: - url-parse "^1.4.3" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -14443,7 +11027,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.1.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -14478,13 +11062,6 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -14509,28 +11086,11 @@ p-try@^2.0.0, p-try@^2.1.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.5, pako@~1.0.5: +pako@^1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== -parallel-transform@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" - integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== - dependencies: - cyclist "^1.0.1" - inherits "^2.0.3" - readable-stream "^2.1.5" - -param-case@^3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -14538,17 +11098,6 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-asn1@^5.0.0, parse-asn1@^5.1.5: - version "5.1.6" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" - integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== - dependencies: - asn1.js "^5.2.0" - browserify-aes "^1.0.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - parse-author@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" @@ -14579,10 +11128,21 @@ parse-diff@^0.7.0: resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.7.1.tgz#9b7a2451c3725baf2c87c831ba192d40ee2237d4" integrity sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg== -parse-entities@^1.1.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== +parse-entities@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + integrity sha1-gRLYhHExnyerrk1klksSL+ThuJA= + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-entities@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.0.tgz#9deac087661b2e36814153cb78d7e54a4c5fd6f4" dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -14655,19 +11215,6 @@ parseurl@~1.3.2: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -14691,11 +11238,6 @@ patch-package@6.2.1: slash "^2.0.0" tmp "^0.0.33" -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" @@ -14716,6 +11258,11 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -14731,11 +11278,6 @@ path-parse@^1.0.6: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -14748,17 +11290,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -pbkdf2@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - pend@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" @@ -14779,17 +11310,12 @@ picomatch@^2.0.4, picomatch@^2.0.5: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== -picomatch@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - picomatch@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d" integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg== -pify@^2.3.0: +pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= @@ -14799,7 +11325,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.1: +pify@^4.0.0, pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -14856,27 +11382,13 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: +pkg-dir@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" -pkg-up@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" @@ -14914,105 +11426,110 @@ pngjs@^3.0.0, pngjs@^3.3.3: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== -pnp-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" - integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== - dependencies: - ts-pnp "^1.1.2" - -polished@^3.3.1: - version "3.7.2" - resolved "https://registry.yarnpkg.com/polished/-/polished-3.7.2.tgz#ec5ddc17a7d322a574d5e10ddd2a6f01d3e767d1" - integrity sha512-pQKtpZGmsZrW8UUpQMAnR7s3ppHeMQVNyMDKtUyKwuvDmklzcEyM5Kllb3JyE/sE/x7arDmyd35i+4vp99H6sQ== - dependencies: - "@babel/runtime" "^7.12.5" - -popper.js@^1.14.4, popper.js@^1.14.7: - version "1.16.1" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.1.tgz#2a223cb3dc7b6213d740e40372be40de43e65b1b" - integrity sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ== - posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= -postcss-flexbugs-fixes@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz#9218a65249f30897deab1033aced8578562a6690" - integrity sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ== +postcss-html@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" dependencies: - postcss "^7.0.26" + htmlparser2 "^3.9.2" -postcss-load-config@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" - integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== +postcss-jsx@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" + "@babel/core" "^7.1.2" + optionalDependencies: + postcss-styled ">=0.34.0" -postcss-loader@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" - integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== +postcss-less@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.0.tgz#0e14a80206b452f44d3a09d082fa72645e8168cc" dependencies: - loader-utils "^1.1.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - schema-utils "^1.0.0" + postcss "^7.0.3" -postcss-modules-extract-imports@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" - integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== +postcss-markdown@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" dependencies: - postcss "^7.0.5" + remark "^9.0.0" + unist-util-find-all-after "^1.0.2" -postcss-modules-local-by-default@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" - integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + +postcss-reporter@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" dependencies: - icss-utils "^4.1.1" - postcss "^7.0.32" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.1.0" + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^7.0.2" -postcss-modules-scope@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" - integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + +postcss-safe-parser@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" dependencies: - postcss "^7.0.6" - postcss-selector-parser "^6.0.0" + postcss "^7.0.0" -postcss-modules-values@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" - integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== +postcss-sass@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" + dependencies: + gonzales-pe "^4.2.3" + postcss "^7.0.1" + +postcss-scss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" dependencies: - icss-utils "^4.0.0" - postcss "^7.0.6" + postcss "^7.0.0" -postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.6" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea" - integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg== +postcss-selector-parser@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= dependencies: - cssesc "^3.0.0" - util-deprecate "^1.0.2" + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-styled@>=0.34.0, postcss-styled@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" + +postcss-syntax@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= -postcss-value-parser@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" - integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + +postcss@^6.0.14: + version "6.0.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.14.tgz#5534c72114739e75d0afcf017db853099f562885" + integrity sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog== + dependencies: + chalk "^2.3.0" + source-map "^0.6.1" + supports-color "^4.4.0" postcss@^7.0.0: version "7.0.14" @@ -15023,16 +11540,7 @@ postcss@^7.0.0: source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.14, postcss@^7.0.26, postcss@^7.0.32, postcss@^7.0.6: - version "7.0.36" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" - integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7.0.5: +postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5: version "7.0.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.6.tgz#6dcaa1e999cdd4a255dcd7d4d9547f4ca010cdc2" dependencies: @@ -15055,11 +11563,6 @@ prepend-http@^1.0.1: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@^2.0.5: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== - prettier@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.0.tgz#8a03c7777883b29b37fb2c4348c66a78e980418b" @@ -15070,14 +11573,6 @@ pretty-bytes@^5.1.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.2.0.tgz#96c92c6e95a0b35059253fb33c03e260d40f5a1f" integrity sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w== -pretty-error@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" - integrity sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw== - dependencies: - lodash "^4.17.20" - renderkid "^2.0.4" - pretty-format@21.3.0-beta.15: version "21.3.0-beta.15" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-21.3.0-beta.15.tgz#702708a64be53619b2c10138dc5a594056fd1569" @@ -15134,11 +11629,6 @@ pretty-format@^26.0.1, pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - prettyjson@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prettyjson/-/prettyjson-1.2.1.tgz#fcffab41d19cab4dfae5e575e64246619b12d289" @@ -15147,18 +11637,6 @@ prettyjson@^1.2.1: colors "^1.1.2" minimist "^1.2.0" -prismjs@^1.8.4: - version "1.24.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.24.1.tgz#c4d7895c4d6500289482fa8936d9cdd192684036" - integrity sha512-mNPsedLuk90RVJioIky8ANZEwYm5w9LcvCXrxHlwf4fNVSn8jEipMybMkWUyyF0JhnC+C4VcOVSBuHRKs1L5Ow== - -prismjs@~1.17.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.17.1.tgz#e669fcbd4cdd873c35102881c33b14d0d68519be" - integrity sha512-PrEDJAFdUGbOP6xK/UsfkC5ghJsPJviKgnQOoxaDbBjwc8op68Quupwt1DeAFoG8GImPhiKXAvvsH7wDSLsu1Q== - optionalDependencies: - clipboard "^2.0.0" - private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -15179,37 +11657,11 @@ progress@^2.0.1, progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= - promise-polyfill@^8.1.3: version "8.2.0" resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.2.0.tgz#367394726da7561457aba2133c9ceefbd6267da0" integrity sha512-k/TC0mIcPVF6yHhUvwAp7cvL6I2fFV7TzF1DuGPI8mBh4QQazf36xCKEHKTZKRysEoTQoQdKyP25J8MPJp7j5g== -promise.allsettled@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" - integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== - dependencies: - array.prototype.map "^1.0.3" - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - get-intrinsic "^1.0.2" - iterate-value "^1.0.2" - -promise.prototype.finally@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.2.tgz#b8af89160c9c673cefe3b4c4435b53cfd0287067" - integrity sha512-A2HuJWl2opDH0EafgdjwEw7HysI8ff/n4lW4QEVBCUXFk9QeGecBWv0Deph0UmLe3tTNYegz8MOjsVuE6SMoJA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.0" - function-bind "^1.1.1" - promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -15241,7 +11693,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@15.7.2, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -15255,21 +11707,6 @@ property-expr@^2.0.2: resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.2.tgz#fff2a43919135553a3bc2fdd94bdb841965b2330" integrity sha512-bc/5ggaYZxNkFKj374aLbEDqVADdYaLcFo8XBkishUWbaAdjlphaBFns9TvRA2pUseVL/wMFmui9X3IdNDU37g== -property-information@^5.0.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" - integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== - dependencies: - xtend "^4.0.0" - -proxy-addr@~2.0.5: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -15290,18 +11727,6 @@ psl@^1.1.28: resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - pull-lock@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pull-lock/-/pull-lock-1.0.0.tgz#6a0ab2719a3b7e6f49838b52168a30b8fdd84188" @@ -15311,14 +11736,6 @@ pull-lock@1.0.0: debug "^4.1.1" execa "^1.0.0" -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" @@ -15327,25 +11744,11 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" @@ -15369,18 +11772,6 @@ puppeteer@^7.1.0: unbzip2-stream "^1.3.3" ws "^7.2.3" -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@^6.6.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -15412,25 +11803,15 @@ query-string@^6.8.2: split-on-first "^1.0.0" strict-uri-encode "^2.0.0" -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= quickselect@^1.0.1: version "1.1.1" @@ -15471,49 +11852,11 @@ randexp@^0.4.2: drange "^1.0.0" ret "^0.2.0" -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== - dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" - rbush@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/rbush/-/rbush-2.0.2.tgz#bb6005c2731b7ba1d5a9a035772927d16a614605" @@ -15531,44 +11874,6 @@ rc@^1.2.7, rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-clientside-effect@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/react-clientside-effect/-/react-clientside-effect-1.2.5.tgz#e2c4dc3c9ee109f642fac4f5b6e9bf5bcd2219a3" - integrity sha512-2bL8qFW1TGBHozGGbVeyvnggRpMjibeZM2536AKNENLECutp2yfs44IL8Hmpn8qjFQ2K7A9PnYf3vc7aQq/cPA== - dependencies: - "@babel/runtime" "^7.12.13" - -react-dev-utils@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" - integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== - dependencies: - "@babel/code-frame" "7.5.5" - address "1.1.2" - browserslist "4.7.0" - chalk "2.4.2" - cross-spawn "6.0.5" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - fork-ts-checker-webpack-plugin "1.5.0" - global-modules "2.0.0" - globby "8.0.2" - gzip-size "5.1.1" - immer "1.10.0" - inquirer "6.5.0" - is-root "2.1.0" - loader-utils "1.2.3" - open "^6.3.0" - pkg-up "2.0.0" - react-error-overlay "^6.0.3" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - sockjs-client "1.4.0" - strip-ansi "5.2.0" - text-table "0.2.0" - react-devtools-core@^4.6.0: version "4.8.2" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.8.2.tgz#4465f2e8de7795564aa20f28b2f3a9737586db23" @@ -15587,78 +11892,11 @@ react-dom@16.8.3: prop-types "^15.6.2" scheduler "^0.13.3" -react-dom@^16.8.3: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-draggable@^4.0.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" - integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== - dependencies: - classnames "^2.2.5" - prop-types "^15.6.0" - -react-error-overlay@^6.0.3: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== - react-fast-compare@^2.0.1: version "2.0.4" resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-fast-compare@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.0.tgz#641a9da81b6a6320f270e89724fb45a0b39e43bb" - integrity sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA== - -react-focus-lock@^2.1.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/react-focus-lock/-/react-focus-lock-2.5.2.tgz#f1e4db5e25cd8789351f2bd5ebe91e9dcb9c2922" - integrity sha512-WzpdOnEqjf+/A3EH9opMZWauag7gV0BxFl+EY4ElA4qFqYsUsBLnmo2sELbN5OC30S16GAWMy16B9DLPpdJKAQ== - dependencies: - "@babel/runtime" "^7.0.0" - focus-lock "^0.9.1" - prop-types "^15.6.2" - react-clientside-effect "^1.2.5" - use-callback-ref "^1.2.5" - use-sidecar "^1.0.5" - -react-helmet-async@^1.0.2: - version "1.0.9" - resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.0.9.tgz#5b9ed2059de6b4aab47f769532f9fbcbce16c5ca" - integrity sha512-N+iUlo9WR3/u9qGMmP4jiYfaD6pe9IvDTapZLFJz2D3xlTlCM1Bzy4Ab3g72Nbajo/0ZyW+W9hdz8Hbe4l97pQ== - dependencies: - "@babel/runtime" "^7.12.5" - invariant "^2.2.4" - prop-types "^15.7.2" - react-fast-compare "^3.2.0" - shallowequal "^1.1.0" - -react-hotkeys@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/react-hotkeys/-/react-hotkeys-2.0.0.tgz#a7719c7340cbba888b0e9184f806a9ec0ac2c53f" - integrity sha512-3n3OU8vLX/pfcJrR3xJ1zlww6KS1kEJt0Whxc4FiGV+MJrQ1mYSYI3qS/11d2MJDFm8IhOXMTFQirfu6AVOF6Q== - dependencies: - prop-types "^15.6.1" - -react-inspector@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-4.0.1.tgz#0f888f78ff7daccbc7be5d452b20c96dc6d5fbb8" - integrity sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg== - dependencies: - "@babel/runtime" "^7.6.3" - is-dom "^1.0.9" - prop-types "^15.6.1" - react-is@^16.12.0, react-is@^16.13.0, react-is@^16.7.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -15679,15 +11917,10 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.1.tgz#5b3531bd76a645a4c9fb6e693ed36419e3301339" integrity sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA== -react-lifecycles-compat@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" - integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== - -react-native-appboy-sdk@^1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.30.0.tgz#ccebdcb297c887d30bd7fb75afab88022e243884" - integrity sha512-IP6QgYZsgGkk7EyTuEzIgr/b/GyHWP2YSmcOcB06S6PTF6tUPyHobHDT1+MyC85UZpwVHkdXJ9k6GvMxHiJo3w== +react-native-appboy-sdk@^1.29.1: + version "1.29.1" + resolved "https://registry.yarnpkg.com/react-native-appboy-sdk/-/react-native-appboy-sdk-1.29.1.tgz#ff38f7e02e3928fa804e55c6ec5034384cf63dd3" + integrity sha512-FwnbOqxWwivJyXL/XcWpfXIqb72/d0DVgpRDTSDJk5shze24EujvoYV9m7HNHl8rvKYLEu9QQ5Xzn7X34Fgsag== react-native-bootsplash@^3.2.0: version "3.2.0" @@ -15814,20 +12047,9 @@ react-native-scrollable-tab-view@1.0.0: react-timer-mixin "^0.13.3" react-native-share@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-5.1.0.tgz#6431f0aa6952e13fc74afbc756c2b37f06cb7feb" - integrity sha512-QGMWOPlwboAGd/5uUh2l0jXIDhZ2q8J4CIa063NDE7ihsZRQlF/w6kd90i3bi6GF6aedvhynqZPmezwqjiyU7g== - -react-native-storybook-loader@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/react-native-storybook-loader/-/react-native-storybook-loader-2.0.4.tgz#37bf37193e69b42a0b2aa0daeed4de8dbfeeae28" - integrity sha512-MmBdO7ugBkHEZa4F1qXFgjB7ejURmKGTZ/3o6zXPgUpaoMdh8tT5LLliJH9uOFzh7oY13TfTMZ9HyCa3E/dqLg== - dependencies: - colors "^1.1.2" - find-up "^4.1.0" - glob "^7.1.1" - prettier "^2.0.5" - yargs "^15.4.1" + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-native-share/-/react-native-share-5.1.0.tgz#6431f0aa6952e13fc74afbc756c2b37f06cb7feb" + integrity sha512-QGMWOPlwboAGd/5uUh2l0jXIDhZ2q8J4CIa063NDE7ihsZRQlF/w6kd90i3bi6GF6aedvhynqZPmezwqjiyU7g== react-native-svg@9.13.3: version "9.13.3" @@ -15837,11 +12059,6 @@ react-native-svg@9.13.3: css-select "^2.0.2" css-tree "^1.0.0-alpha.37" -react-native-swipe-gestures@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/react-native-swipe-gestures/-/react-native-swipe-gestures-1.0.5.tgz#a172cb0f3e7478ccd681fd36b8bfbcdd098bde7c" - integrity sha512-Ns7Bn9H/Tyw278+5SQx9oAblDZ7JixyzeOczcBK8dipQk2pD7Djkcfnf1nB/8RErAmMLL9iXgW0QHqiII8AhKw== - react-native-view-shot@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/react-native-view-shot/-/react-native-view-shot-3.1.2.tgz#8c8e84c67a4bc8b603e697dbbd59dbc9b4f84825" @@ -15888,27 +12105,6 @@ react-native@0.63.3: use-subscription "^1.0.0" whatwg-fetch "^3.0.0" -react-popper-tooltip@^2.8.3: - version "2.11.1" - resolved "https://registry.yarnpkg.com/react-popper-tooltip/-/react-popper-tooltip-2.11.1.tgz#3c4bdfd8bc10d1c2b9a162e859bab8958f5b2644" - integrity sha512-04A2f24GhyyMicKvg/koIOQ5BzlrRbKiAgP6L+Pdj1MVX3yJ1NeZ8+EidndQsbejFT55oW1b++wg2Z8KlAyhfQ== - dependencies: - "@babel/runtime" "^7.9.2" - react-popper "^1.3.7" - -react-popper@^1.3.7: - version "1.3.11" - resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-1.3.11.tgz#a2cc3f0a67b75b66cfa62d2c409f9dd1fcc71ffd" - integrity sha512-VSA/bS+pSndSF2fiasHK/PTEEAyOpX60+H5EPAjoArr8JGm+oihu4UbrqcEBpQibJxBVCpYyjAX7abJ+7DoYVg== - dependencies: - "@babel/runtime" "^7.1.2" - "@hypnosphi/create-react-context" "^0.3.1" - deep-equal "^1.1.1" - popper.js "^1.14.4" - prop-types "^15.6.1" - typed-styles "^0.0.7" - warning "^4.0.2" - react-refresh@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.2.tgz#54a277a6caaac2803d88f1d6f13c1dcfbd81e334" @@ -15932,16 +12128,6 @@ react-relay@^10.0.1: nullthrows "^1.1.1" relay-runtime "10.0.1" -react-sizeme@^2.6.7: - version "2.6.12" - resolved "https://registry.yarnpkg.com/react-sizeme/-/react-sizeme-2.6.12.tgz#ed207be5476f4a85bf364e92042520499455453e" - integrity sha512-tL4sCgfmvapYRZ1FO2VmBmjPVzzqgHA7kI8lSJ6JS6L78jXFNRdOZFpXyK6P1NBZvKPPCZxReNgzZNUajAerZw== - dependencies: - element-resize-detector "^1.2.1" - invariant "^2.2.4" - shallowequal "^1.1.0" - throttle-debounce "^2.1.0" - react-spring@8.0.23: version "8.0.23" resolved "https://registry.yarnpkg.com/react-spring/-/react-spring-8.0.23.tgz#2a0ddaeb0816ea9e21898d04d3b8da7d1a3daa14" @@ -15950,17 +12136,6 @@ react-spring@8.0.23: "@babel/runtime" "^7.3.1" prop-types "^15.5.8" -react-syntax-highlighter@^11.0.2: - version "11.0.2" - resolved "https://registry.yarnpkg.com/react-syntax-highlighter/-/react-syntax-highlighter-11.0.2.tgz#4e3f376e752b20d2f54e4c55652fd663149e4029" - integrity sha512-kqmpM2OH5OodInbEADKARwccwSQWBfZi0970l5Jhp4h39q9Q65C4frNcnd6uHE5pR00W8pOWj9HDRntj2G4Rww== - dependencies: - "@babel/runtime" "^7.3.1" - highlight.js "~9.13.0" - lowlight "~1.11.0" - prismjs "^1.8.4" - refractor "^2.4.1" - react-test-renderer@16.13.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-16.13.1.tgz#de25ea358d9012606de51e012d9742e7f0deabc1" @@ -15981,14 +12156,6 @@ react-test-renderer@^16.0.0-0: react-is "^16.8.4" scheduler "^0.13.4" -react-textarea-autosize@^7.1.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-7.1.2.tgz#70fdb333ef86bcca72717e25e623e90c336e2cda" - integrity sha512-uH3ORCsCa3C6LHxExExhF4jHoXYCQwE5oECmrRsunlspaDAbS4mGKNlWZqjLfInWtFQcf0o1n1jC/NGXFdUBCg== - dependencies: - "@babel/runtime" "^7.1.2" - prop-types "^15.6.0" - react-timer-mixin@^0.13.3: version "0.13.3" resolved "https://registry.yarnpkg.com/react-timer-mixin/-/react-timer-mixin-0.13.3.tgz#0da8b9f807ec07dc3e854d082c737c65605b3d22" @@ -16037,15 +12204,6 @@ react@16.13.1: object-assign "^4.1.1" prop-types "^15.6.2" -react@^16.6.0, react@^16.8.3: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - read-chunk@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-3.2.0.tgz#2984afe78ca9bfbbdb74b19387bf9e86289c16ca" @@ -16061,6 +12219,14 @@ read-env@^1.3.0: dependencies: camelcase "5.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" @@ -16078,19 +12244,6 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - "readable-stream@2 || 3": version "3.3.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.3.0.tgz#cb8011aad002eb717bf040291feba8569c986fb9" @@ -16113,7 +12266,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: +readable-stream@^3.1.1, readable-stream@^3.4.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -16122,22 +12275,6 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - readline-sync@^1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" @@ -16160,12 +12297,13 @@ recursive-readdir-sync@1.0.6: resolved "https://registry.yarnpkg.com/recursive-readdir-sync/-/recursive-readdir-sync-1.0.6.tgz#1dbf6d32f3c5bb8d3cde97a6c588d547a9e13d56" integrity sha1-Hb9tMvPFu4083pemxYjVR6nhPVY= -recursive-readdir@2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" - integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: - minimatch "3.0.4" + indent-string "^3.0.0" + strip-indent "^2.0.0" reduce-flatten@^2.0.0: version "2.0.0" @@ -16205,15 +12343,6 @@ reflect.ownkeys@^0.2.0: resolved "https://registry.yarnpkg.com/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz#749aceec7f3fdf8b63f927a04809e90c5c0b3460" integrity sha1-dJrO7H8/34tj+SegSAnpDFwLNGA= -refractor@^2.4.1: - version "2.10.1" - resolved "https://registry.yarnpkg.com/refractor/-/refractor-2.10.1.tgz#166c32f114ed16fd96190ad21d5193d3afc7d34e" - integrity sha512-Xh9o7hQiQlDbxo5/XkOX6H+x/q8rmlmZKr97Ie1Q8ZM32IRRd3B/UxuA/yXDW79DBSXGWxm2yRTbcTVmAciJRw== - dependencies: - hastscript "^5.0.0" - parse-entities "^1.1.2" - prismjs "~1.17.0" - regenerate-unicode-properties@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.0.2.tgz#7b38faa296252376d363558cfbda90c9ce709662" @@ -16221,13 +12350,6 @@ regenerate-unicode-properties@^8.0.2: dependencies: regenerate "^1.4.0" -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -16259,13 +12381,6 @@ regenerator-transform@^0.13.3: dependencies: private "^0.1.6" -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -16274,14 +12389,6 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" - integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - regexpu-core@^4.1.3: version "4.5.4" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" @@ -16294,18 +12401,6 @@ regexpu-core@^4.1.3: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.1.0" -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - registry-url@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" @@ -16318,11 +12413,6 @@ regjsgen@^0.5.0: resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - regjsparser@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" @@ -16330,18 +12420,6 @@ regjsparser@^0.6.0: dependencies: jsesc "~0.5.0" -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" - integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= - relay-compiler-language-typescript@13.0.3: version "13.0.3" resolved "https://registry.yarnpkg.com/relay-compiler-language-typescript/-/relay-compiler-language-typescript-13.0.3.tgz#81c0ef35910514c7ae1a3252e0d7a802cdcdc76c" @@ -16419,6 +12497,53 @@ relay-test-utils@^10.0.1: fbjs "^1.0.0" relay-runtime "10.0.1" +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-stringify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + dependencies: + remark-parse "^5.0.0" + remark-stringify "^5.0.0" + unified "^6.0.0" + remove-markdown@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/remove-markdown/-/remove-markdown-0.1.0.tgz#cf8b66e9e6fcb4acc9721048adeee7a357698ba9" @@ -16434,23 +12559,12 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= -renderkid@^2.0.4: - version "2.0.7" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.7.tgz#464f276a6bdcee606f4a15993f9b29fc74ca8609" - integrity sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ== - dependencies: - css-select "^4.1.3" - dom-converter "^0.2.0" - htmlparser2 "^6.1.0" - lodash "^4.17.21" - strip-ansi "^3.0.1" - repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -16460,7 +12574,7 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= -replace-ext@^1.0.0: +replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= @@ -16527,11 +12641,6 @@ require-main-filename@^2.0.0: resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - resize-observer-polyfill@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" @@ -16583,7 +12692,7 @@ resolve@^1.1.6, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: dependencies: path-parse "^1.0.6" -resolve@^1.11.0, resolve@^1.12.0, resolve@^1.14.2: +resolve@^1.12.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -16636,7 +12745,7 @@ rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.6.1, rimraf@^2.7.1: +rimraf@^2.6.1: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -16655,14 +12764,6 @@ rimraf@~2.2.6: resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - rn-fetch-blob@0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/rn-fetch-blob/-/rn-fetch-blob-0.12.0.tgz#ec610d2f9b3f1065556b58ab9c106eeb256f3cba" @@ -16698,18 +12799,11 @@ run-async@^2.0.0: dependencies: is-promise "^2.1.0" -run-async@^2.2.0, run-async@^2.4.0: +run-async@^2.2.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= - dependencies: - aproba "^1.1.1" - rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" @@ -16734,7 +12828,7 @@ rxjs@^5.4.3: dependencies: symbol-observable "1.0.1" -rxjs@^6.4.0, rxjs@^6.6.0, rxjs@^6.6.7: +rxjs@^6.4.0, rxjs@^6.6.7: version "6.6.7" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== @@ -16746,16 +12840,11 @@ safe-buffer@5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== -safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.2.0, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -16763,7 +12852,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -16819,24 +12908,6 @@ scheduler@^0.18.0: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" - integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== - dependencies: - "@types/json-schema" "^7.0.5" - ajv "^6.12.4" - ajv-keywords "^3.5.2" - scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -16847,10 +12918,10 @@ screenfull@^5.1.0: resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8" integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA== -select@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" - integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= +secure-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/secure-keys/-/secure-keys-1.0.0.tgz#f0c82d98a3b139a8776a8808050b824431087fca" + integrity sha1-8MgtmKOxOah3aogIBQuCRDEIf8o= semver-compare@^1.0.0: version "1.0.0" @@ -16866,11 +12937,6 @@ semver-regex@^2.0.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - semver@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -16881,7 +12947,7 @@ semver@^5.5.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -16912,58 +12978,11 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - serialize-error@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go= -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -serve-favicon@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.5.0.tgz#935d240cdfe0f5805307fdfe967d88942a2cbcf0" - integrity sha1-k10kDN/g9YBTB/3+ln2IlCosvPA= - dependencies: - etag "~1.8.1" - fresh "0.5.2" - ms "2.1.1" - parseurl "~1.3.2" - safe-buffer "5.1.1" - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - serve-static@^1.13.1: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" @@ -17004,7 +13023,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4, setimmediate@^1.0.5: +setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -17014,29 +13033,6 @@ setprototypeof@1.0.3: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" integrity sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ= -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shallow-equal@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/shallow-equal/-/shallow-equal-1.2.1.tgz#4c16abfa56043aa20d050324efa68940b0da79da" - integrity sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA== - -shallowequal@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -17071,11 +13067,6 @@ shell-quote@1.6.1, shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shell-quote@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - shelljs@^0.8.0: version "0.8.3" resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" @@ -17085,29 +13076,11 @@ shelljs@^0.8.0: interpret "^1.0.0" rechoir "^0.6.2" -shelljs@^0.8.3: - version "0.8.4" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.4.tgz#de7684feeb767f8716b326078a8a00875890e3c2" - integrity sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -17150,26 +13123,6 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" -simplebar-react@^1.0.0-alpha.6: - version "1.2.3" - resolved "https://registry.yarnpkg.com/simplebar-react/-/simplebar-react-1.2.3.tgz#bd81fa9827628470e9470d06caef6ece15e1c882" - integrity sha512-1EOWJzFC7eqHUp1igD1/tb8GBv5aPQA5ZMvpeDnVkpNJ3jAuvmrL2kir3HuijlxhG7njvw9ssxjjBa89E5DrJg== - dependencies: - prop-types "^15.6.1" - simplebar "^4.2.3" - -simplebar@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/simplebar/-/simplebar-4.2.3.tgz#dac40aced299c17928329eab3d5e6e795fafc10c" - integrity sha512-9no0pK7/1y+8/oTF3sy/+kx0PjQ3uk4cYwld5F1CJGk2gx+prRyUq8GRfvcVLq5niYWSozZdX73a2wIr1o9l/g== - dependencies: - can-use-dom "^0.1.0" - core-js "^3.0.1" - lodash.debounce "^4.0.8" - lodash.memoize "^4.1.2" - lodash.throttle "^4.1.1" - resize-observer-polyfill "^1.5.1" - sisteransi@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" @@ -17190,10 +13143,21 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + slice-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" slice-ansi@^3.0.0: version "3.0.0" @@ -17258,24 +13222,7 @@ snapshot-diff@0.2.2: pretty-format "^20.0.3" strip-ansi "^4.0.0" -sockjs-client@1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" - integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== - dependencies: - debug "^3.2.5" - eventsource "^1.0.7" - faye-websocket "~0.11.1" - inherits "^2.0.3" - json3 "^3.3.2" - url-parse "^1.4.3" - -source-list-map@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" - integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== - -source-map-resolve@^0.5.0: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== @@ -17308,14 +13255,6 @@ source-map-support@^0.5.9: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.12: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -17326,12 +13265,12 @@ source-map@0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= -source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -17346,11 +13285,6 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -17377,6 +13311,10 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" integrity sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g== +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" @@ -17409,26 +13347,6 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -ssri@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.1.tgz#33e44f896a967158e3c63468e47ec46613b95b5f" - integrity sha512-w+daCzXN89PseTL99MkA+fxJEcU3wfaE/ah0i0lnOlpG1CYLJ2ZjzEry68YBKfLs4JfoTShrTEsJkAZuNZ/stw== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - stack-generator@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" @@ -17477,6 +13395,11 @@ stacktrace-parser@^0.1.3: dependencies: type-fest "^0.7.1" +state-toggle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + integrity sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -17485,7 +13408,7 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -"statuses@>= 1.3.1 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: +"statuses@>= 1.3.1 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= @@ -17505,48 +13428,11 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= -store2@^2.7.1: - version "2.12.0" - resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" - integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== - -stream-browserify@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - stream-buffers@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha1-kdX1Ew0c75bc+n9yaUUYh0HQnuQ= -stream-each@^1.1.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" - integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -17609,15 +13495,6 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -17627,38 +13504,6 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -"string.prototype.matchall@^4.0.0 || ^3.0.1": - version "4.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" - integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.2" - get-intrinsic "^1.1.1" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - regexp.prototype.flags "^1.3.1" - side-channel "^1.0.4" - -string.prototype.padend@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz#6858ca4f35c5268ebd5e8615e1327d55f59ee311" - integrity sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -string.prototype.padstart@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz#f9b9ce66bedd7c06acb40ece6e34c6046e1a019d" - integrity sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -17668,29 +13513,6 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -17705,6 +13527,16 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -17714,13 +13546,6 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" @@ -17740,7 +13565,14 @@ strip-ansi@^4.0.0: resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: - ansi-regex "^3.0.0" + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" @@ -17784,23 +13616,25 @@ strip-final-newline@^2.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -style-loader@^1.0.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" - integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== - dependencies: - loader-utils "^2.0.0" - schema-utils "^2.7.0" +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= -styled-components@4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.1.tgz#494e35525b5557f7ce7b3c0040fcb0a46af40886" - integrity sha512-zBSMOJW1zfQ1rASGHJ5dHXIkn3VoOGLtQAYhkd4Ib7e+eI//uwMJWsI65JRe3aGrN2Xx8IT9jxxnVSXt9LaLCw== +styled-components@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.2.0.tgz#811fbbec4d64c7189f6c7482b9eb6fefa7fefef7" + integrity sha512-L/LzkL3ZbBhqIVHdR7DbYujy4tqvTNRfc+4JWDCYyhTatI+8CRRQUmdaR0+ARl03DWsfKLhjewll5uNLrqrl4A== dependencies: "@babel/helper-module-imports" "^7.0.0" "@emotion/is-prop-valid" "^0.7.3" @@ -17833,6 +13667,86 @@ styled-system@5.1.5: "@styled-system/variant" "^5.1.5" object-assign "^4.1.1" +stylelint-config-recommended@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" + integrity sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA== + +stylelint-config-standard@18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06" + integrity sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA== + dependencies: + stylelint-config-recommended "^2.1.0" + +stylelint-config-styled-components@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/stylelint-config-styled-components/-/stylelint-config-styled-components-0.1.1.tgz#b408388d7c687833ab4be4c4e6522d97d2827ede" + integrity sha512-z5Xz/9GmvxO6e/DLzBMwkB85zHxEEjN6K7Cj80Bi+o/9vR9eS3GX3E9VuMnX9WLFYulqbqLtTapGGY28JBiy9Q== + +stylelint-processor-styled-components@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/stylelint-processor-styled-components/-/stylelint-processor-styled-components-1.5.1.tgz#c3ab94eb0ea234750003ab648f2d3a17f79e1c61" + integrity sha512-gDsr2PCwc82lN2RkK2fq108lEIGFqnX0ZB+KVhHn4i+Lisb9W0f9gHChQK8peMo9/DVksb6QYNTLOwCb9OwcKg== + dependencies: + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + postcss "^6.0.14" + +stylelint@9.8.0: + version "9.8.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.8.0.tgz#bfdade6360d82afe820d6b15251b01acf8ffd04d" + integrity sha512-qYYgP9UnZ6S4uaXrfEGPIMeNv21gP4t3E7BtnYfJIiHKvz7AbrCP0vj1wPgD6OFyxLT5txQxtoznfSkm2vsUkQ== + dependencies: + autoprefixer "^9.0.0" + balanced-match "^1.0.0" + chalk "^2.4.1" + cosmiconfig "^5.0.0" + debug "^4.0.0" + execall "^1.0.0" + file-entry-cache "^2.0.0" + get-stdin "^6.0.0" + global-modules "^1.0.0" + globby "^8.0.0" + globjoin "^0.1.4" + html-tags "^2.0.0" + ignore "^5.0.4" + import-lazy "^3.1.0" + imurmurhash "^0.1.4" + known-css-properties "^0.9.0" + leven "^2.1.0" + lodash "^4.17.4" + log-symbols "^2.0.0" + mathml-tag-names "^2.0.1" + meow "^5.0.0" + micromatch "^3.1.10" + normalize-selector "^0.2.0" + pify "^4.0.0" + postcss "^7.0.0" + postcss-html "^0.34.0" + postcss-jsx "^0.35.0" + postcss-less "^3.0.1" + postcss-markdown "^0.34.0" + postcss-media-query-parser "^0.2.3" + postcss-reporter "^6.0.0" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^4.0.0" + postcss-sass "^0.3.5" + postcss-scss "^2.0.0" + postcss-selector-parser "^3.1.0" + postcss-styled "^0.34.0" + postcss-syntax "^0.34.0" + postcss-value-parser "^3.3.0" + resolve-from "^4.0.0" + signal-exit "^3.0.2" + slash "^2.0.0" + specificity "^0.4.1" + string-width "^2.1.0" + style-search "^0.1.0" + sugarss "^2.0.0" + svg-tags "^1.0.0" + table "^5.0.0" + stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -17853,6 +13767,12 @@ sudo-prompt@^9.0.0: resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" integrity sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA== +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + dependencies: + postcss "^7.0.2" + supercluster@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-6.0.1.tgz#4c0177d96daa195d58a5bad9f55dbf12fb727a4c" @@ -17870,6 +13790,13 @@ supports-color@^2.0.0: resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= +supports-color@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -17907,6 +13834,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" @@ -17922,16 +13854,6 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= -symbol.prototype.description@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.4.tgz#c30edd3fe8c040d941cf7dc15842be15adf66855" - integrity sha512-fZkHwJ8ZNRVRzF/+/2OtygyyH06CjC0YZAQRHu9jKKw8RXlJpbizEHvGRUu22Qkg182wJk1ugb5Aovcv3UPrww== - dependencies: - call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.2" - synchronous-promise@^2.0.10: version "2.0.13" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.13.tgz#9d8c165ddee69c5a6542862b405bc50095926702" @@ -17947,16 +13869,20 @@ table-layout@^1.0.0: typical "^5.0.0" wordwrapjs "^4.0.0" +table@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" + dependencies: + ajv "^6.5.3" + lodash "^4.17.10" + slice-ansi "1.0.0" + string-width "^2.1.1" + tapable@^0.2.5: version "0.2.9" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== -tapable@^1.0.0, tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - tapable@^2.0.0-beta.2: version "2.0.0-beta.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.0.0-beta.8.tgz#0a8d42f6895d43d5a895de15d9a9e3e425f72a0a" @@ -17996,20 +13922,6 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.3" -telejson@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/telejson/-/telejson-3.3.0.tgz#6d814f3c0d254d5c4770085aad063e266b56ad03" - integrity sha512-er08AylQ+LEbDLp1GRezORZu5wKOHaBczF6oYJtgC3Idv10qZ8A3p6ffT+J5BzDKkV9MqBvu8HAKiIIOp6KJ2w== - dependencies: - "@types/is-function" "^1.0.0" - global "^4.4.0" - is-function "^1.0.1" - is-regex "^1.0.4" - is-symbol "^1.0.3" - isobject "^4.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -18018,11 +13930,6 @@ temp@0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -18031,45 +13938,6 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser-webpack-plugin@^2.1.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" - integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.3.1" - jest-worker "^25.4.0" - p-limit "^2.3.0" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.6.12" - webpack-sources "^1.4.3" - -terser@^4.1.2, terser@^4.6.12, terser@^4.6.3: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -18079,7 +13947,7 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@0.2.0, text-table@^0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -18099,11 +13967,6 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== -throttle-debounce@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" - integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== - throttle-debounce@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" @@ -18139,23 +14002,11 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= -timers-browserify@^2.0.4: - version "2.0.12" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" - integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== - dependencies: - setimmediate "^1.0.4" - timm@^1.6.1: version "1.7.1" resolved "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz#96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f" integrity sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw== -tiny-emitter@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" - integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== - tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -18189,11 +14040,6 @@ tmpl@1.0.x: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -18236,11 +14082,6 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha1-bkWxJj8gF/oKzH2J14sVuL932jI= -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - toposort@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330" @@ -18270,15 +14111,30 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= + trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-dedent@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-1.2.0.tgz#6aa2229d837159bb6d635b6b233002423b91e0b0" - integrity sha512-6zSJp23uQI+Txyz5LlXMXAHpUhY4Hi0oluXny0OgIR7g/Cromq4vDBnhtbBdyIV34g0pgwxUvnvg+jLJe4c1NA== +trim-trailing-lines@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" + integrity sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" + integrity sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw== ts-easing@^0.2.0: version "0.2.0" @@ -18296,11 +14152,6 @@ ts-node@8.4.1: source-map-support "^0.5.6" yn "^3.0.0" -ts-pnp@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" - integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== - ts-toolbelt@^6.1.6: version "6.15.5" resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.5.tgz#cb3b43ed725cb63644782c64fbcad7d8f28c0a83" @@ -18326,11 +14177,6 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: - version "2.3.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.0.tgz#803b8cdab3e12ba581a4ca41c8839bbb0dacb09e" - integrity sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg== - tslib@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -18372,11 +14218,6 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -18416,24 +14257,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-styles@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" - integrity sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q== - typedarray-to-buffer@^3.1.2, typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -18453,25 +14276,24 @@ typescript-memoize@^1.0.0-alpha.3: dependencies: core-js "2.4.1" -typescript-styled-plugin@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.18.0.tgz#4e20e99bd7938f693ee37ad20682cc2401d06898" - integrity sha512-GopdOs3twyZkuLMU2ActiZQAtCgyibmwmQczULoe47qJ2URIaHSWxtUIDwuv6QhKPLBIrV6jSo/qp+184hlwLg== +typescript-styled-plugin@0.13.0: + version "0.13.0" + resolved "https://registry.yarnpkg.com/typescript-styled-plugin/-/typescript-styled-plugin-0.13.0.tgz#e5d3d1293b9b85cffd473f01a7f4917ad6035ee5" + integrity sha512-GGMzv/JAd4S8mvWgHZslvW2G1HHrdurrp93oSR4h85SM8e5at7+KCqHsZICiTaL+iN25YGkJqoaZe4XklA76rg== dependencies: - typescript-template-language-service-decorator "^2.2.0" - vscode-css-languageservice "^5.1.1" + typescript-template-language-service-decorator "^2.0.0" + vscode-css-languageservice "^3.0.12" vscode-emmet-helper "1.2.11" - vscode-languageserver-types "^3.16.0" + vscode-languageserver-types "^3.13.0" -typescript-template-language-service-decorator@^2.2.0: +typescript-template-language-service-decorator@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/typescript-template-language-service-decorator/-/typescript-template-language-service-decorator-2.2.0.tgz#4ee6d580f307fb9239978e69626f2775b8a59b2a" - integrity sha512-xiolqt1i7e22rpqMaprPgSFVgU64u3b9n6EJlAaUYE61jumipKAdI1+O5khPlWslpTUj80YzjUKjJ2jxT0D74w== -typescript@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" + integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== typical@^4.0.0: version "4.0.0" @@ -18506,16 +14328,6 @@ ultron@1.0.x: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" integrity sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po= -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -18529,10 +14341,13 @@ underscore@~1.4.4: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.4.4.tgz#61a6a32010622afa07963bf325203cf12239d604" integrity sha1-YaajIBBiKvoHljvzJSA88SI51gQ= -unfetch@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== +unherit@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" + integrity sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -18552,16 +14367,23 @@ unicode-match-property-value-ecmascript@^1.1.0: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== +unified@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -18572,19 +14394,54 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +unist-util-find-all-after@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" dependencies: - unique-slug "^2.0.0" + unist-util-is "^2.0.0" -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== +unist-util-is@^2.0.0, unist-util-is@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== + +unist-util-modify-children@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.3.tgz#d764a935f612dfb21b1bb92b0ea24321dc19a5f7" + integrity sha512-Aw3Us+NPrJGYWyLhcaqYzgxd/pryIanDNHVVvwdtTEEQ3Yfa/+sjnT2EeAAHbtTMAaYEdPW3XN6jxbzVWAo/BQ== dependencies: - imurmurhash "^0.1.4" + array-iterate "^1.0.0" + +unist-util-remove-position@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" + integrity sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-visit-parents@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== + dependencies: + unist-util-is "^2.1.2" + +unist-util-visit@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== + dependencies: + unist-util-visit-parents "^2.0.0" universal-url@^2.0.0: version "2.0.0" @@ -18618,16 +14475,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= -unquote@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -18648,11 +14500,6 @@ untildify@^3.0.3: resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA== -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -18670,15 +14517,6 @@ url-join@^4.0.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== -url-loader@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" @@ -18686,14 +14524,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse@^1.4.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.1.tgz#d5fa9890af8a5e1f274a2c98376510f6425f6e3b" - integrity sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -18707,19 +14537,6 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" -use-callback-ref@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/use-callback-ref/-/use-callback-ref-1.2.5.tgz#6115ed242cfbaed5915499c0a9842ca2912f38a5" - integrity sha512-gN3vgMISAgacF7sqsLPByqoePooY3n2emTH59Ur5d/M8eg4WTWu1xp8i8DHjohftIyEx0S08RiYxbffr4j8Peg== - -use-sidecar@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/use-sidecar/-/use-sidecar-1.0.5.tgz#ffff2a17c1df42e348624b699ba6e5c220527f2b" - integrity sha512-k9jnrjYNwN6xYLj1iaGhonDghfvmeTmYjAiGvOr7clwKfPjMXJf4/HOr7oT5tJwYafgp2tG2l3eZEOfoELiMcA== - dependencies: - detect-node-es "^1.1.0" - tslib "^1.9.3" - use-subscription@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/use-subscription/-/use-subscription-1.4.1.tgz#edcbcc220f1adb2dd4fa0b2f61b6cc308e620069" @@ -18746,38 +14563,11 @@ utif@^2.0.1: dependencies: pako "^1.0.5" -util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" - integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== - dependencies: - define-properties "^1.1.2" - object.getownpropertydescriptors "^2.0.3" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -utila@~0.4: - version "0.4.0" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" - integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= - utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -18823,6 +14613,28 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-location@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" + integrity sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + vinyl-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" @@ -18861,25 +14673,17 @@ vlq@^1.0.0: resolved "https://registry.yarnpkg.com/vlq/-/vlq-1.0.1.tgz#c003f6e7c0b4c1edd623fd6ee50bbc0d6a1de468" integrity sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w== -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vscode-apollo-relay@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.1.tgz#6c98bef9a127c5bb80d10f6de35dd60ab851415e" - integrity sha512-+tEyseQVbjEqFR7wda9taij5bayVxE1x9XkgCAtBK2qqCq+V/5ohbEsrOdFRL0Ir3o9U+i+I2gz7y7Jn4dDiPA== +vscode-apollo-relay@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/vscode-apollo-relay/-/vscode-apollo-relay-1.5.0.tgz#cd427a49093c3c055ef0f0028bd46deb1e225fc0" + integrity sha512-NWOEEmB0s1PZgIntLlpHPuRA95TPvVJfw4bSePphr+rY0e+4XvuvVvxe+EE/9BirM8G2cGY1UM4yukWpP778Qg== -vscode-css-languageservice@^5.1.1: - version "5.1.4" - resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-5.1.4.tgz#07e4c63f1c3bb06e6f3f329c32b490d20a601bab" - integrity sha512-fIJZJMXbaBsK0ifBb2RmSiLtzwn6NrZnKn7O+0ziIjwAY+rPvSK9St2qqQXFU3reZVRAt/I4GBp40dC/THcUDA== +vscode-css-languageservice@^3.0.12: + version "3.0.12" + resolved "https://registry.yarnpkg.com/vscode-css-languageservice/-/vscode-css-languageservice-3.0.12.tgz#fb4aac5ae3c5b761b1db1d7224b78ff824284dc3" dependencies: - vscode-languageserver-textdocument "^1.0.1" - vscode-languageserver-types "^3.16.0" - vscode-nls "^5.0.0" - vscode-uri "^3.0.2" + vscode-languageserver-types "^3.13.0" + vscode-nls "^4.0.0" vscode-emmet-helper@1.2.11: version "1.2.11" @@ -18889,29 +14693,13 @@ vscode-emmet-helper@1.2.11: jsonc-parser "^1.0.0" vscode-languageserver-types "^3.6.0-next.1" -vscode-languageserver-textdocument@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.1.tgz#178168e87efad6171b372add1dea34f53e5d330f" - integrity sha512-UIcJDjX7IFkck7cSkNNyzIz5FyvpQfY7sdzVy+wkKN/BLaD4DQ0ppXQrKePomCxTS7RrolK1I0pey0bG9eh8dA== - -vscode-languageserver-types@^3.16.0: - version "3.16.0" - resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz#ecf393fc121ec6974b2da3efb3155644c514e247" - integrity sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA== - -vscode-languageserver-types@^3.6.0-next.1: +vscode-languageserver-types@^3.13.0, vscode-languageserver-types@^3.6.0-next.1: version "3.13.0" resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.13.0.tgz#b704b024cef059f7b326611c99b9c8753c0a18b4" -vscode-nls@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-5.0.0.tgz#99f0da0bd9ea7cda44e565a74c54b1f2bc257840" - integrity sha512-u0Lw+IYlgbEJFF6/qAqG2d1jQmJl0eyAGJHoAJqr2HT4M2BNuQYSEiSE75f52pXHSJm8AlTjnLLbBFPrdz2hpA== - -vscode-uri@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.2.tgz#ecfd1d066cb8ef4c3a208decdbab9a8c23d055d0" - integrity sha512-jkjy6pjU1fxUvI51P+gCsxg1u2n8LSt0W6KrCNQceaziKzff74GoWmjVG46KieVzybO1sttPQmYfrwSHey7GUA== +vscode-nls@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.0.0.tgz#4001c8a6caba5cedb23a9c5ce1090395c0e44002" w3c-hr-time@^1.0.1: version "1.0.1" @@ -18941,31 +14729,6 @@ warn-once@^0.1.0: resolved "https://registry.yarnpkg.com/warn-once/-/warn-once-0.1.0.tgz#4f58d89b84f968d0389176aa99e0cf0f14ffd4c8" integrity sha512-recZTSvuaH/On5ZU5ywq66y99lImWqzP93+AiUo9LUwG8gXHW+LJjhOd6REJHm7qb0niYqrEQJvbHSQfuJtTqA== -warning@^4.0.2, warning@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" - integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== - dependencies: - loose-envify "^1.0.0" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - wcwidth@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" @@ -18978,93 +14741,6 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@^3.7.0: - version "3.7.3" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" - integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== - dependencies: - memory-fs "^0.4.1" - mime "^2.4.4" - mkdirp "^0.5.1" - range-parser "^1.2.1" - webpack-log "^2.0.0" - -webpack-hot-middleware@^2.25.0: - version "2.25.0" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.25.0.tgz#4528a0a63ec37f8f8ef565cf9e534d57d09fe706" - integrity sha512-xs5dPOrGPCzuRXNi8F6rwhawWvQQkeli5Ro48PRuQh8pYPCPmNnltP9itiUPT4xI8oW+y0m59lyyeQk54s5VgA== - dependencies: - ansi-html "0.0.7" - html-entities "^1.2.0" - querystring "^0.2.0" - strip-ansi "^3.0.0" - -webpack-log@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" - integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== - dependencies: - ansi-colors "^3.0.0" - uuid "^3.3.2" - -webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack-sources@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack-virtual-modules@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" - integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== - dependencies: - debug "^3.0.0" - -webpack@^4.33.0, webpack@^4.38.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -websocket-driver@>=0.5.1: - version "0.7.4" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" - integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== - dependencies: - http-parser-js ">=0.5.1" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" - integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== - whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -19090,17 +14766,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -19145,12 +14810,10 @@ widest-line@^2.0.1: dependencies: string-width "^2.1.1" -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" +window-size@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= windows-release@^3.1.0: version "3.2.0" @@ -19186,20 +14849,6 @@ wordwrapjs@^4.0.0: reduce-flatten "^2.0.0" typical "^5.0.0" -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -worker-rpc@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" - integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== - dependencies: - microevent.ts "~0.1.1" - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -19268,6 +14917,13 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +write@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= + dependencies: + mkdirp "^0.5.1" + ws@^1.1.0, ws@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" @@ -19281,16 +14937,16 @@ ws@^7, ws@^7.0.0: resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== -ws@^7.1.2: - version "7.5.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.3.tgz#160835b63c7d97bfab418fc1b8a9fced2ac01a74" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - ws@^7.2.3: version "7.4.3" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.3.tgz#1f9643de34a543b8edb124bdcbc457ae55a6e5cd" integrity sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA== +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + xcode@2.0.0, xcode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xcode/-/xcode-2.0.0.tgz#134f1f94c26fbfe8a9aaa9724bfb2772419da1a2" @@ -19364,11 +15020,16 @@ xtend@^4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= +y18n@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + "y18n@^3.2.1 || ^4.0.0": version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" @@ -19384,7 +15045,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.3: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -19394,18 +15055,36 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: - version "1.10.2" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" - integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== +yaml-lint@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/yaml-lint/-/yaml-lint-1.2.4.tgz#0dec2d1ef4e5ec999bba1e34d618fc60498d1bc5" + integrity sha512-qpKE0szyKsE9TrlVPi+bxKxVAjl30QjNAOyOxy7noQdf/WCCYUlT4xiCRxMG48eyeBzMBtBN6PgGfaB0MJePNw== + dependencies: + glob "^7.1.2" + js-yaml "^3.10.0" + leprechaun "0.0.2" + lodash.merge "^4.6.1" + lodash.snakecase "^4.1.1" + nconf "^0.10.0" -yaml@^1.7.2: +yaml@1.9.2, yaml@^1.7.2: version "1.9.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.9.2.tgz#f0cfa865f003ab707663e4f04b3956957ea564ed" integrity sha512-HPT7cGGI0DuRcsO51qC1j9O16Dh1mZ2bnXwsi0jrSpsLz0WxOLSLXfkABVl6bZO629py3CU+OMJtpNHDLB97kg== dependencies: "@babel/runtime" "^7.9.2" +yaml@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" @@ -19473,7 +15152,7 @@ yargs@^14.2.0: y18n "^4.0.0" yargs-parser "^15.0.0" -yargs@^15.1.0, yargs@^15.4.1: +yargs@^15.1.0: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -19507,6 +15186,19 @@ yargs@^15.3.1: y18n "^4.0.0" yargs-parser "^18.1.1" +yargs@^3.19.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + yauzl@^2.10.0: version "2.10.0" resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" @@ -19594,8 +15286,3 @@ zen-observable-ts@^0.8.10: zen-observable@^0.8.0: version "0.8.11" resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.11.tgz#d3415885eeeb42ee5abb9821c95bb518fcd6d199" - -zustand@^3.5.7: - version "3.5.7" - resolved "https://registry.yarnpkg.com/zustand/-/zustand-3.5.7.tgz#add5e8d0ba031ce6e0ddf9cb76ef15306efb665f" - integrity sha512-DlVFXJavIHyXTOGz6dB+8QHZsPyJcGJSEBtlp2Ivmd5SwtlCnhPo3L8LB6YRfAOJC2PbqzgoD8NMjk+y+vIF0g==