diff --git a/.storybook/main.js b/.storybook/main.js index b41f43f..93fe468 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -15,6 +15,7 @@ // ============================================================================= const { mergeConfig } = require("vite"); +const svgrPlugin = require("vite-plugin-svgr"); const viteConfig = require("../packages/renderer/vite.config"); module.exports = { @@ -35,8 +36,15 @@ module.exports = { viteFinal: async (config) => { // return the customized config return mergeConfig(config, { - root: viteConfig.root, + root: process.cwd(), resolve: viteConfig.resolve, + plugins: [ + svgrPlugin({ + svgrOptions: { + icon: true, + }, + }), + ], }); }, }; diff --git a/.storybook/preview.jsx b/.storybook/preview.jsx index 6d51cdd..8c0b3d0 100644 --- a/.storybook/preview.jsx +++ b/.storybook/preview.jsx @@ -17,16 +17,7 @@ import { RecoilRoot } from "recoil"; import { HashRouter } from "react-router-dom"; import { QueryClient, QueryClientProvider } from "react-query"; -import { IntlProvider } from "@atoms/IntlProvider"; - -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - refetchOnWindowFocus: false, - staleTime: 60 * 1000, // 60 sec - }, - }, -}); +import { AppProviders } from "@atoms/AppProviders"; export const parameters = { actions: { argTypesRegex: "^on[A-Z].*" }, @@ -41,13 +32,7 @@ export const parameters = { export const decorators = [ (Story) => ( - - - - {Story()} - - - + {Story()} ), ]; diff --git a/package.json b/package.json index aa64d35..0c7ef06 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "test:main": "vitest run -r packages/main --passWithNoTests", "test:preload": "vitest run -r packages/preload --passWithNoTests", "test:renderer": "vitest run -r packages/renderer --passWithNoTests", + "test:renderer:watch": "vitest -r packages/renderer", "watch": "node scripts/watch.js", "format": "prettier --write .", "lint": "eslint .", @@ -44,6 +45,7 @@ "@storybook/builder-vite": "^0.1.29", "@storybook/react": "^6.4.22", "@storybook/testing-library": "^0.0.10", + "@testing-library/react": "^12", "@types/react": "<18.0.0", "@types/react-dom": "<18.0.0", "@typescript-eslint/eslint-plugin": "5.12.1", @@ -63,6 +65,7 @@ "nano-staged": "^0.7.0", "playwright": "1.19.1", "prettier": "^2.6.2", + "react-devtools": "^4.24.4", "typescript": "4.5.5", "vite": "2.8.4", "vite-plugin-svgr": "^1.1.0", diff --git a/packages/renderer/assets/account.svg b/packages/renderer/assets/account.svg new file mode 100644 index 0000000..b29d013 --- /dev/null +++ b/packages/renderer/assets/account.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/renderer/assets/arrow-down.svg b/packages/renderer/assets/arrow-down.svg new file mode 100644 index 0000000..cff2cd4 --- /dev/null +++ b/packages/renderer/assets/arrow-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/renderer/assets/arrow-up.svg b/packages/renderer/assets/arrow-up.svg new file mode 100644 index 0000000..a61ddb1 --- /dev/null +++ b/packages/renderer/assets/arrow-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/renderer/assets/fonts/Inter-Variable.ttf b/packages/renderer/assets/fonts/Inter-Variable.ttf new file mode 100644 index 0000000..969a990 Binary files /dev/null and b/packages/renderer/assets/fonts/Inter-Variable.ttf differ diff --git a/packages/renderer/assets/logo-icon.svg b/packages/renderer/assets/logo-icon.svg new file mode 100644 index 0000000..0dc2f21 --- /dev/null +++ b/packages/renderer/assets/logo-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/renderer/assets/logo.svg b/packages/renderer/assets/logo.svg index 6471ae0..4ebdf7c 100644 --- a/packages/renderer/assets/logo.svg +++ b/packages/renderer/assets/logo.svg @@ -1,15 +1,9 @@ - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + diff --git a/packages/renderer/assets/markets.svg b/packages/renderer/assets/markets.svg new file mode 100644 index 0000000..c7590bc --- /dev/null +++ b/packages/renderer/assets/markets.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/renderer/assets/notifications.svg b/packages/renderer/assets/notifications.svg new file mode 100644 index 0000000..96a0e56 --- /dev/null +++ b/packages/renderer/assets/notifications.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/renderer/assets/offers.svg b/packages/renderer/assets/offers.svg new file mode 100644 index 0000000..356a1de --- /dev/null +++ b/packages/renderer/assets/offers.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/renderer/assets/trades.svg b/packages/renderer/assets/trades.svg new file mode 100644 index 0000000..b6d8518 --- /dev/null +++ b/packages/renderer/assets/trades.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/renderer/assets/xmr-logo-1.svg b/packages/renderer/assets/xmr-logo-1.svg new file mode 100644 index 0000000..792d5bb --- /dev/null +++ b/packages/renderer/assets/xmr-logo-1.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/renderer/index.html b/packages/renderer/index.html index 8ca7421..b417044 100644 --- a/packages/renderer/index.html +++ b/packages/renderer/index.html @@ -7,7 +7,7 @@ content="script-src 'self' blob:" /> - Vite App + Haveno
diff --git a/packages/renderer/src/Routes.tsx b/packages/renderer/src/Routes.tsx index e5e8240..105d5ca 100644 --- a/packages/renderer/src/Routes.tsx +++ b/packages/renderer/src/Routes.tsx @@ -15,19 +15,23 @@ // ============================================================================= import { Routes, Route } from "react-router-dom"; -import { Home } from "@pages/Home"; -import { Page2 } from "@pages/Page2"; +import { Home, Welcome } from "@pages/Onboarding"; +import { Wallet } from "@pages/Wallet"; export const ROUTES = { Home: "/", - Page2: "page2", + Welcome: "/onboarding/welcome", + RestoreBackup: "/onboarding/restore-backup", + SetupAccount: "/onboarding/setup", + Wallet: "/wallet", }; export function AppRoutes() { return ( } /> - } /> + } /> + } /> ); } diff --git a/packages/renderer/src/components/atoms/IntlProvider/index.tsx b/packages/renderer/src/components/atoms/AppProviders/IntlProvider.tsx similarity index 82% rename from packages/renderer/src/components/atoms/IntlProvider/index.tsx rename to packages/renderer/src/components/atoms/AppProviders/IntlProvider.tsx index 63f0d44..462c0af 100644 --- a/packages/renderer/src/components/atoms/IntlProvider/index.tsx +++ b/packages/renderer/src/components/atoms/AppProviders/IntlProvider.tsx @@ -17,12 +17,8 @@ import type { FC } from "react"; import { useEffect, useMemo, useState } from "react"; import { IntlProvider as ReacIntlProvider } from "react-intl"; -import type { LangKeys } from "@src/constants/lang/LangKeys"; - -const SupportedLocales = { - EN: "en", - ES: "es", -}; +import type { LangKeys } from "@src/constants/lang"; +import { LangPack, SupportedLocales } from "@src/constants/lang"; const DEFAULT_LOCALE = SupportedLocales.EN; @@ -37,12 +33,7 @@ export const IntlProvider: FC = ({ children }) => { ); useEffect(() => { - console.log(navigator.language); - import(/* @vite-ignore */ `../../../constants/lang/${locale}.ts`).then( - (val) => { - setMessages(val.default); - } - ); + setMessages(LangPack[locale] ?? LangPack[DEFAULT_LOCALE]); }, [locale]); return ( diff --git a/packages/renderer/src/components/atoms/AppProviders/QueryClientProvider.tsx b/packages/renderer/src/components/atoms/AppProviders/QueryClientProvider.tsx new file mode 100644 index 0000000..28ff4a3 --- /dev/null +++ b/packages/renderer/src/components/atoms/AppProviders/QueryClientProvider.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { FC } from "react"; +import { QueryClient, QueryClientProvider as QCProvider } from "react-query"; + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + staleTime: 60 * 1000, // 60 sec + }, + }, +}); + +export const QueryClientProvider: FC = ({ children }) => ( + {children} +); diff --git a/packages/renderer/src/pages/Home.tsx b/packages/renderer/src/components/atoms/AppProviders/ThemeProvider.tsx similarity index 66% rename from packages/renderer/src/pages/Home.tsx rename to packages/renderer/src/components/atoms/AppProviders/ThemeProvider.tsx index 64e59f7..472a3b7 100644 --- a/packages/renderer/src/pages/Home.tsx +++ b/packages/renderer/src/components/atoms/AppProviders/ThemeProvider.tsx @@ -14,19 +14,15 @@ // limitations under the License. // ============================================================================= -import { Link } from "react-router-dom"; -import { ROUTES } from "@src/Routes"; -import { FormattedMessage } from "react-intl"; -import { LangKeys } from "@constants/lang/LangKeys"; +import type { FC } from "react"; +import { MantineProvider, Global } from "@mantine/core"; +import { themeOverride, globalStyles } from "@src/theme"; -export function Home() { +export const ThemeProvider: FC = ({ children }) => { return ( -
-

Home

-

- -

- Page 2 -
+ + + {children} + ); -} +}; diff --git a/packages/renderer/src/components/atoms/AppProviders/index.tsx b/packages/renderer/src/components/atoms/AppProviders/index.tsx new file mode 100644 index 0000000..e12b265 --- /dev/null +++ b/packages/renderer/src/components/atoms/AppProviders/index.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { FC } from "react"; +import { RecoilRoot } from "recoil"; +import { QueryClientProvider } from "./QueryClientProvider"; +import { IntlProvider } from "./IntlProvider"; +import { ThemeProvider } from "./ThemeProvider"; + +export const AppProviders: FC = ({ children }) => ( + + + + {children} + + + +); diff --git a/packages/renderer/src/components/atoms/Buttons/Buttons.stories.tsx b/packages/renderer/src/components/atoms/Buttons/Buttons.stories.tsx new file mode 100644 index 0000000..06789ee --- /dev/null +++ b/packages/renderer/src/components/atoms/Buttons/Buttons.stories.tsx @@ -0,0 +1,38 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { Button } from "."; + +export default { + title: "atoms/Buttons", + component: Button, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/components/atoms/Buttons/Buttons.test.tsx b/packages/renderer/src/components/atoms/Buttons/Buttons.test.tsx new file mode 100644 index 0000000..166f080 --- /dev/null +++ b/packages/renderer/src/components/atoms/Buttons/Buttons.test.tsx @@ -0,0 +1,41 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { describe, expect, it } from "vitest"; +import { render } from "@testing-library/react"; +import { Button } from "."; + +describe("atoms::Buttons", () => { + it("renders primary button by default", () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); + }); + + it("renders neutral button", () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); + }); + + it("renders success button", () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); + }); + + it("renders error button", () => { + const { asFragment } = render(); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/packages/renderer/src/components/atoms/Buttons/Buttons.tsx b/packages/renderer/src/components/atoms/Buttons/Buttons.tsx new file mode 100644 index 0000000..cb9b1f4 --- /dev/null +++ b/packages/renderer/src/components/atoms/Buttons/Buttons.tsx @@ -0,0 +1,69 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { ButtonProps as MButtonProps } from "@mantine/core"; +import { Button as MButton, createStyles } from "@mantine/core"; + +type ButtonProps = MButtonProps & { + flavor?: "primary" | "neutral" | "success" | "danger"; +}; + +export function Button(props: ButtonProps) { + const { children, flavor = "primary", ...rest } = props; + const { classes, cx } = useStyles(); + + return ( + + {children} + + ); +} + +const useStyles = createStyles((theme) => ({ + common: { + borderRadius: 10, + fontWeight: 600, + height: 48, + padding: "1rem", + }, + neutral: { + backgroundColor: theme.colors.gray[2], + color: theme.colors.gray[9], + "&:hover": { + backgroundColor: theme.colors.gray[3], + }, + }, + success: { + backgroundColor: theme.colors.green[7], + "&:hover": { + backgroundColor: theme.colors.green[8], + }, + }, + danger: { + backgroundColor: theme.colors.red[6], + "&:hover": { + backgroundColor: theme.colors.red[7], + }, + }, +})); diff --git a/packages/renderer/src/components/atoms/Buttons/__snapshots__/Buttons.test.tsx.snap b/packages/renderer/src/components/atoms/Buttons/__snapshots__/Buttons.test.tsx.snap new file mode 100644 index 0000000..80cd1e3 --- /dev/null +++ b/packages/renderer/src/components/atoms/Buttons/__snapshots__/Buttons.test.tsx.snap @@ -0,0 +1,77 @@ +// Vitest Snapshot v1 + +exports[`atoms::Buttons > renders error button 1`] = ` + + + +`; + +exports[`atoms::Buttons > renders neutral button 1`] = ` + + + +`; + +exports[`atoms::Buttons > renders primary button by default 1`] = ` + + + +`; + +exports[`atoms::Buttons > renders success button 1`] = ` + + + +`; diff --git a/packages/renderer/src/components/atoms/Buttons/index.ts b/packages/renderer/src/components/atoms/Buttons/index.ts new file mode 100644 index 0000000..62a9dd4 --- /dev/null +++ b/packages/renderer/src/components/atoms/Buttons/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./Buttons"; diff --git a/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.stories.tsx b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.stories.tsx new file mode 100644 index 0000000..08dd35e --- /dev/null +++ b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { ConnectionProgress } from "."; + +export default { + title: "atoms/ConnectionProgress", + component: ConnectionProgress, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.test.tsx b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.test.tsx new file mode 100644 index 0000000..707ecc3 --- /dev/null +++ b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.test.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { describe, expect, it } from "vitest"; +import { render } from "@testing-library/react"; +import { AppProviders } from "@atoms/AppProviders"; +import { ConnectionProgress } from "."; + +describe("atoms::ConnectionProgress", () => { + it("renders without exploding", () => { + const { asFragment } = render( + + + + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.tsx b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.tsx new file mode 100644 index 0000000..a19f86c --- /dev/null +++ b/packages/renderer/src/components/atoms/ConnectionProgress/ConnectionProgress.tsx @@ -0,0 +1,59 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Box, createStyles, keyframes, Stack, Text } from "@mantine/core"; +import { FormattedMessage } from "react-intl"; +import { LangKeys } from "@constants/lang/LangKeys"; + +export function ConnectionProgress() { + const { classes } = useStyles(); + return ( + + + + + + + + + ); +} + +const bounce = keyframes({ + "from, to": { transform: "translate3d(0, 0, 0)" }, + "50%": { transform: "translate3d(19rem, 0, 0)" }, +}); + +const useStyles = createStyles((theme) => ({ + container: { + background: "rgba(17, 17, 17, 0.15)", + borderRadius: 3, + height: 6, + position: "relative", + width: "23rem", + }, + bar: { + animation: `${bounce} 3s ease-in-out infinite`, + background: theme.colors.brand[5], + borderRadius: 3, + height: 6, + position: "absolute", + width: "4rem", + }, +})); diff --git a/packages/renderer/src/components/atoms/ConnectionProgress/__snapshots__/ConnectionProgress.test.tsx.snap b/packages/renderer/src/components/atoms/ConnectionProgress/__snapshots__/ConnectionProgress.test.tsx.snap new file mode 100644 index 0000000..1288e2c --- /dev/null +++ b/packages/renderer/src/components/atoms/ConnectionProgress/__snapshots__/ConnectionProgress.test.tsx.snap @@ -0,0 +1,22 @@ +// Vitest Snapshot v1 + +exports[`atoms::ConnectionProgress > renders without exploding 1`] = ` + +
+
+ Connecting to Monero Network +
+
+
+
+
+ +`; diff --git a/packages/renderer/src/components/atoms/ConnectionProgress/index.ts b/packages/renderer/src/components/atoms/ConnectionProgress/index.ts new file mode 100644 index 0000000..8a82d8d --- /dev/null +++ b/packages/renderer/src/components/atoms/ConnectionProgress/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./ConnectionProgress"; diff --git a/packages/renderer/src/components/atoms/__stories__/Header.stories.tsx b/packages/renderer/src/components/atoms/Header/Header.stories.tsx similarity index 77% rename from packages/renderer/src/components/atoms/__stories__/Header.stories.tsx rename to packages/renderer/src/components/atoms/Header/Header.stories.tsx index d2ea922..661a4b8 100644 --- a/packages/renderer/src/components/atoms/__stories__/Header.stories.tsx +++ b/packages/renderer/src/components/atoms/Header/Header.stories.tsx @@ -14,16 +14,21 @@ // limitations under the License. // ============================================================================= +import { Stack } from "@mantine/core"; import type { ComponentStory, ComponentMeta } from "@storybook/react"; -import { Header } from "../Header"; +import { HeaderWithLogo } from "."; export default { title: "atoms/Header", - component: Header, -} as ComponentMeta; + component: HeaderWithLogo, +} as ComponentMeta; -const Template: ComponentStory = () => { - return
; +const Template: ComponentStory = () => { + return ( + + + + ); }; export const Default = Template.bind({}); diff --git a/packages/renderer/src/components/atoms/Header/HeaderWithLogo.test.tsx b/packages/renderer/src/components/atoms/Header/HeaderWithLogo.test.tsx new file mode 100644 index 0000000..e3bbbdc --- /dev/null +++ b/packages/renderer/src/components/atoms/Header/HeaderWithLogo.test.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { describe, expect, it } from "vitest"; +import { render } from "@testing-library/react"; +import { AppProviders } from "@atoms/AppProviders"; +import { HeaderWithLogo } from "."; + +describe("atoms::HeaderWithLogo", () => { + it("renders without exploding", () => { + const { asFragment } = render( + + + + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/packages/renderer/src/components/atoms/Header/index.tsx b/packages/renderer/src/components/atoms/Header/HeaderWithLogo.tsx similarity index 76% rename from packages/renderer/src/components/atoms/Header/index.tsx rename to packages/renderer/src/components/atoms/Header/HeaderWithLogo.tsx index 121a1fc..b88bd20 100644 --- a/packages/renderer/src/components/atoms/Header/index.tsx +++ b/packages/renderer/src/components/atoms/Header/HeaderWithLogo.tsx @@ -15,13 +15,16 @@ // ============================================================================= import { Box } from "@mantine/core"; -import { FormattedMessage } from "react-intl"; -import { LangKeys } from "@constants/lang/LangKeys"; +import Logo from "@assets/logo.svg"; -export function Header() { +export function HeaderWithLogo() { return ( - - + + Haveno ); } diff --git a/packages/renderer/src/components/atoms/Header/__snapshots__/HeaderWithLogo.test.tsx.snap b/packages/renderer/src/components/atoms/Header/__snapshots__/HeaderWithLogo.test.tsx.snap new file mode 100644 index 0000000..63bccf2 --- /dev/null +++ b/packages/renderer/src/components/atoms/Header/__snapshots__/HeaderWithLogo.test.tsx.snap @@ -0,0 +1,15 @@ +// Vitest Snapshot v1 + +exports[`atoms::HeaderWithLogo > renders without exploding 1`] = ` + +
+ Haveno +
+
+`; diff --git a/packages/renderer/src/components/atoms/Header/index.ts b/packages/renderer/src/components/atoms/Header/index.ts new file mode 100644 index 0000000..d9b2bd6 --- /dev/null +++ b/packages/renderer/src/components/atoms/Header/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./HeaderWithLogo"; diff --git a/packages/renderer/src/components/molecules/.gitkeep b/packages/renderer/src/components/molecules/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/renderer/src/components/molecules/Sidebar/Sidebar.stories.tsx b/packages/renderer/src/components/molecules/Sidebar/Sidebar.stories.tsx new file mode 100644 index 0000000..44d13c6 --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/Sidebar.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { Sidebar } from "."; + +export default { + title: "molecules/Sidebar", + component: Sidebar, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/components/molecules/Sidebar/Sidebar.test.tsx b/packages/renderer/src/components/molecules/Sidebar/Sidebar.test.tsx new file mode 100644 index 0000000..d95b3b2 --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/Sidebar.test.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { describe, expect, it } from "vitest"; +import { render } from "@testing-library/react"; +import { AppProviders } from "@atoms/AppProviders"; +import { Sidebar } from "."; + +describe("molecules::Sidebar", () => { + it("renders without exploding", () => { + const { asFragment } = render( + + + + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/packages/renderer/src/components/molecules/Sidebar/Sidebar.tsx b/packages/renderer/src/components/molecules/Sidebar/Sidebar.tsx new file mode 100644 index 0000000..c072377 --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/Sidebar.tsx @@ -0,0 +1,54 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Box, createStyles, Navbar, Stack } from "@mantine/core"; +import { WalletBalance } from "@molecules/WalletBalance"; +import { ReactComponent as Logo } from "@assets/logo-icon.svg"; +import { NavLink } from "./_NavLink"; +import { NAV_LINKS, WIDTH } from "./_constants"; + +export function Sidebar() { + const { classes } = useStyles(); + return ( + + + + + + {NAV_LINKS.map((link) => ( + + + + ))} + + + + + + + + ); +} + +const useStyles = createStyles((theme) => ({ + logo: { + height: 32, + padding: `${theme.spacing.lg} ${theme.spacing.xl}`, + }, + container: { + width: WIDTH, + }, +})); diff --git a/packages/renderer/src/components/molecules/Sidebar/_NavLink.tsx b/packages/renderer/src/components/molecules/Sidebar/_NavLink.tsx new file mode 100644 index 0000000..31dce6b --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/_NavLink.tsx @@ -0,0 +1,88 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { ReactNode } from "react"; +import { UnstyledButton, Group, Text, createStyles } from "@mantine/core"; + +interface NavLinkProps { + icon: ReactNode; + isActive?: boolean; + label: string; +} + +export function NavLink({ icon, isActive = false, label }: NavLinkProps) { + const { classes } = useStyles({ isActive }); + return ( + + + {icon} + + {label} + + + + ); +} + +const useStyles = createStyles( + (theme, { isActive }, getRef) => ({ + navLink: { + display: "block", + padding: "1.5rem 2.5rem", + transition: "opacity 0.2s", + width: "100%", + + [`svg, .${getRef("text")}`]: { + opacity: isActive ? 1 : 0.5, + transition: "opacity 0.2s", + }, + + svg: isActive + ? { + path: { + fill: theme.colors.brand[6], + }, + } + : null, + + "&:hover": { + backgroundColor: + theme.colorScheme === "dark" + ? theme.colors.dark[6] + : theme.colors.gray[0], + + [`svg, .${getRef("text")}`]: { + opacity: 1, + }, + }, + }, + text: { + ref: getRef("text"), + color: + theme.colorScheme === "dark" + ? theme.colors.dark[6] + : theme.colors.dark[8], + + transition: "opacity 0.2s", + }, + }) +); diff --git a/packages/renderer/src/components/molecules/Sidebar/__snapshots__/Sidebar.test.tsx.snap b/packages/renderer/src/components/molecules/Sidebar/__snapshots__/Sidebar.test.tsx.snap new file mode 100644 index 0000000..4bf3307 --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/__snapshots__/Sidebar.test.tsx.snap @@ -0,0 +1,352 @@ +// Vitest Snapshot v1 + +exports[`molecules::Sidebar > renders without exploding 1`] = ` + +
+ +
+
+`; diff --git a/packages/renderer/src/components/molecules/Sidebar/_constants.tsx b/packages/renderer/src/components/molecules/Sidebar/_constants.tsx new file mode 100644 index 0000000..603b449 --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/_constants.tsx @@ -0,0 +1,46 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { ReactComponent as MarketsIcon } from "@assets/markets.svg"; +import { ReactComponent as OffersIcon } from "@assets/offers.svg"; +import { ReactComponent as TradesIcon } from "@assets/trades.svg"; +import { ReactComponent as NotificationsIcon } from "@assets/notifications.svg"; +import { ReactComponent as AccountIcon } from "@assets/account.svg"; + +export const WIDTH = 210; + +export const NAV_LINKS = [ + { + icon: , + label: "Markets", + }, + { + icon: , + label: "My Offers", + }, + { + icon: , + label: "My Trades", + }, + { + icon: , + label: "Notifications", + }, + { + icon: , + label: "Account", + }, +]; diff --git a/packages/renderer/src/components/molecules/Sidebar/index.ts b/packages/renderer/src/components/molecules/Sidebar/index.ts new file mode 100644 index 0000000..66201df --- /dev/null +++ b/packages/renderer/src/components/molecules/Sidebar/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./Sidebar"; diff --git a/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.stories.tsx b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.stories.tsx new file mode 100644 index 0000000..01dac26 --- /dev/null +++ b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { WalletBalance } from "."; + +export default { + title: "molecules/WalletBalance", + component: WalletBalance, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.test.tsx b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.test.tsx new file mode 100644 index 0000000..84382b5 --- /dev/null +++ b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.test.tsx @@ -0,0 +1,31 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { describe, expect, it } from "vitest"; +import { render } from "@testing-library/react"; +import { AppProviders } from "@atoms/AppProviders"; +import { WalletBalance } from "."; + +describe("molecules::WalletBalance", () => { + it("renders without exploding", () => { + const { asFragment } = render( + + + + ); + expect(asFragment()).toMatchSnapshot(); + }); +}); diff --git a/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.tsx b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.tsx new file mode 100644 index 0000000..2bbc0dd --- /dev/null +++ b/packages/renderer/src/components/molecules/WalletBalance/WalletBalance.tsx @@ -0,0 +1,115 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { useState } from "react"; +import { + Box, + Collapse, + createStyles, + Group, + Stack, + Text, + UnstyledButton, +} from "@mantine/core"; +import { ReactComponent as XMRLogo } from "@assets/xmr-logo-1.svg"; +import { ReactComponent as ArrowDown } from "@assets/arrow-down.svg"; + +export function WalletBalance() { + const [isOpen, setOpen] = useState(false); + const { classes } = useStyles({ isOpen }); + return ( + + + + + + Available Balance + + + + setOpen(!isOpen)} + > + + 10.647382650365 + + + + (EUR 2441,02) + + + + + Total + 14.048212174412 + + + Reserved + 2.874598526325 + + + Locked + 0.854975624859 + + + + + + ); +} + +const useStyles = createStyles( + (theme, params) => ({ + container: { + border: `solid 1px ${theme.colors.gray[4]}`, + borderRadius: theme.radius.md, + padding: theme.spacing.md, + }, + heading: { + fontSize: "0.5rem", + fontWeight: 700, + textTransform: "uppercase", + }, + btnToggle: { + svg: { + transform: `rotate(${params.isOpen ? 180 : 0}deg)`, + transition: "transform 0.2s", + width: 8, + }, + }, + xmr: { + fontSize: "0.75rem", + fontWeight: 600, + }, + fiat: { + color: theme.colors.gray[6], + fontSize: "0.625rem", + fontWeight: 500, + }, + balanceLabel: { + color: theme.colors.gray[6], + fontSize: "0.625rem", + fontWeight: 700, + textTransform: "uppercase", + }, + balanceValue: { + color: theme.colors.gray[8], + fontSize: "0.625rem", + fontWeight: 600, + }, + }) +); diff --git a/packages/renderer/src/components/molecules/WalletBalance/__snapshots__/WalletBalance.test.tsx.snap b/packages/renderer/src/components/molecules/WalletBalance/__snapshots__/WalletBalance.test.tsx.snap new file mode 100644 index 0000000..531906a --- /dev/null +++ b/packages/renderer/src/components/molecules/WalletBalance/__snapshots__/WalletBalance.test.tsx.snap @@ -0,0 +1,149 @@ +// Vitest Snapshot v1 + +exports[`molecules::WalletBalance > renders without exploding 1`] = ` + +
+
+
+ + + + + + + + + + + +
+ Available Balance +
+
+
+ +
+ (EUR 2441,02) +
+
+ +
+
+
+`; diff --git a/packages/renderer/src/components/molecules/WalletBalance/index.ts b/packages/renderer/src/components/molecules/WalletBalance/index.ts new file mode 100644 index 0000000..4bf7da7 --- /dev/null +++ b/packages/renderer/src/components/molecules/WalletBalance/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./WalletBalance"; diff --git a/packages/renderer/src/components/templates/.gitkeep b/packages/renderer/src/components/templates/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/renderer/src/components/templates/CenteredLayout/index.tsx b/packages/renderer/src/components/templates/CenteredLayout/index.tsx new file mode 100644 index 0000000..e705bae --- /dev/null +++ b/packages/renderer/src/components/templates/CenteredLayout/index.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { FC } from "react"; +import { Container, Stack } from "@mantine/core"; +import { HeaderWithLogo } from "@atoms/Header"; + +interface CenteredLayoutProps { + showHeader?: boolean; +} + +export const CenteredLayout: FC = (props) => { + const { children, showHeader = false } = props; + return ( + + {showHeader && } + + {children} + + + ); +}; diff --git a/packages/renderer/src/components/templates/NavbarLayout/index.tsx b/packages/renderer/src/components/templates/NavbarLayout/index.tsx new file mode 100644 index 0000000..f57c0ae --- /dev/null +++ b/packages/renderer/src/components/templates/NavbarLayout/index.tsx @@ -0,0 +1,44 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { FC } from "react"; +import { Box, createStyles, Group } from "@mantine/core"; +import { Sidebar } from "@molecules/Sidebar"; + +export const NavbarLayout: FC = (props) => { + const { children } = props; + const { classes } = useStyles(); + return ( + + + {children} + + ); +}; +// fcfcfc + +const useStyles = createStyles((theme) => ({ + container: { + flex: 1, + alignItems: "stretch", + }, + contentArea: { + background: theme.colors.gray[0], + display: "flex", + flex: 1, + padding: theme.spacing.sm, + }, +})); diff --git a/packages/renderer/src/constants/lang/LangKeys.ts b/packages/renderer/src/constants/lang/LangKeys.ts index b0eaf2e..59f05d4 100644 --- a/packages/renderer/src/constants/lang/LangKeys.ts +++ b/packages/renderer/src/constants/lang/LangKeys.ts @@ -16,5 +16,8 @@ export enum LangKeys { AppTitle = "app.title", + AppHeading2 = "app.heading2", Header = "app.header", + ConnectingToNetwork = "app.connectingToNetwork", + WelcomeToHaveno = "app.welcomeToHaveno", } diff --git a/packages/renderer/src/constants/lang/en.ts b/packages/renderer/src/constants/lang/en.ts index 6491e73..6ebafee 100644 --- a/packages/renderer/src/constants/lang/en.ts +++ b/packages/renderer/src/constants/lang/en.ts @@ -18,7 +18,11 @@ import { LangKeys } from "./LangKeys"; const LangPackEN: { [key in LangKeys]: string } = { [LangKeys.AppTitle]: "Welcome", - [LangKeys.Header]: "Electron Starter", + [LangKeys.AppHeading2]: "Monero based decentralized exchange", + [LangKeys.ConnectingToNetwork]: "Connecting to Monero Network", + [LangKeys.Header]: "Haveno", + [LangKeys.WelcomeToHaveno]: + "Welcome to Haveno. The world’s first Monero based decentralised exchange.", }; export default LangPackEN; diff --git a/packages/renderer/src/constants/lang/es.ts b/packages/renderer/src/constants/lang/es.ts index 3f20488..9f9a291 100644 --- a/packages/renderer/src/constants/lang/es.ts +++ b/packages/renderer/src/constants/lang/es.ts @@ -18,7 +18,11 @@ import { LangKeys } from "./LangKeys"; const LangPackES: { [key in LangKeys]: string } = { [LangKeys.AppTitle]: "Bienvenido", - [LangKeys.Header]: "Electron Starter", + [LangKeys.AppHeading2]: "Intercambio descentralizado basado en Monero", + [LangKeys.ConnectingToNetwork]: "Conexión a la red Monero", + [LangKeys.Header]: "Haveno", + [LangKeys.WelcomeToHaveno]: + "Bienvenido a Haveno. El primer intercambio descentralizado basado en Monero del mundo.", }; export default LangPackES; diff --git a/packages/renderer/src/constants/lang/index.ts b/packages/renderer/src/constants/lang/index.ts new file mode 100644 index 0000000..0a9526b --- /dev/null +++ b/packages/renderer/src/constants/lang/index.ts @@ -0,0 +1,29 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./LangKeys"; +import en from "./en"; +import es from "./es"; + +export const SupportedLocales = { + EN: "en", + ES: "es", +}; + +export const LangPack = { + [SupportedLocales.EN]: en, + [SupportedLocales.EN]: es, +}; diff --git a/packages/renderer/src/index.tsx b/packages/renderer/src/index.tsx index 5d11d9e..a80b5e4 100644 --- a/packages/renderer/src/index.tsx +++ b/packages/renderer/src/index.tsx @@ -16,31 +16,16 @@ import { StrictMode } from "react"; import ReactDOM from "react-dom"; -import { QueryClient, QueryClientProvider } from "react-query"; import { HashRouter } from "react-router-dom"; -import { RecoilRoot } from "recoil"; -import { IntlProvider } from "@atoms/IntlProvider"; import { AppRoutes } from "./Routes"; - -const queryClient = new QueryClient({ - defaultOptions: { - queries: { - refetchOnWindowFocus: false, - staleTime: 60 * 1000, // 60 sec - }, - }, -}); +import { AppProviders } from "@atoms/AppProviders"; ReactDOM.render( - - - - - - - + + + , document.getElementById("app") diff --git a/packages/renderer/src/pages/Onboarding/Home.stories.tsx b/packages/renderer/src/pages/Onboarding/Home.stories.tsx new file mode 100644 index 0000000..fb40e38 --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/Home.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { Home } from "."; + +export default { + title: "pages/Onboarding/Home", + component: Home, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/pages/Onboarding/Home.tsx b/packages/renderer/src/pages/Onboarding/Home.tsx new file mode 100644 index 0000000..677e4d1 --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/Home.tsx @@ -0,0 +1,42 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { FormattedMessage } from "react-intl"; +import { Space, Stack, Text } from "@mantine/core"; +import { LangKeys } from "@constants/lang/LangKeys"; +import { CenteredLayout } from "@templates/CenteredLayout"; +import Logo from "@assets/logo.svg"; +import { ConnectionProgress } from "@atoms/ConnectionProgress"; + +export function Home() { + return ( + + + + Haveno + + + + + + + + + ); +} diff --git a/packages/renderer/src/pages/Onboarding/Welcome.stories.tsx b/packages/renderer/src/pages/Onboarding/Welcome.stories.tsx new file mode 100644 index 0000000..243514f --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/Welcome.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { Welcome } from "."; + +export default { + title: "pages/Onboarding/Welcome", + component: Welcome, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/pages/Onboarding/Welcome.tsx b/packages/renderer/src/pages/Onboarding/Welcome.tsx new file mode 100644 index 0000000..a9492bf --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/Welcome.tsx @@ -0,0 +1,51 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack, Space, Text, Title, Container, Group } from "@mantine/core"; +import { FormattedMessage } from "react-intl"; +import { LangKeys } from "@constants/lang/LangKeys"; +import { CenteredLayout } from "@src/components/templates/CenteredLayout"; +import { Button } from "@atoms/Buttons"; +import { CONTENT_MAX_WIDTH } from "./_constants"; + +export function Welcome() { + return ( + + + + + + <FormattedMessage + id={LangKeys.WelcomeToHaveno} + defaultMessage="Welcome to Haveno. The world’s first Monero based decentralised exchange." + /> + + + + + Before you can use Haveno, we’re going to set up your account.{" "} + + + + + + + + + + + ); +} diff --git a/packages/renderer/src/pages/Onboarding/_constants.ts b/packages/renderer/src/pages/Onboarding/_constants.ts new file mode 100644 index 0000000..52d9fe3 --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/_constants.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export const CONTENT_MAX_WIDTH = 470; diff --git a/packages/renderer/src/pages/Onboarding/index.ts b/packages/renderer/src/pages/Onboarding/index.ts new file mode 100644 index 0000000..e88a47e --- /dev/null +++ b/packages/renderer/src/pages/Onboarding/index.ts @@ -0,0 +1,18 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./Home"; +export * from "./Welcome"; diff --git a/packages/renderer/src/pages/Wallet/Walet.stories.tsx b/packages/renderer/src/pages/Wallet/Walet.stories.tsx new file mode 100644 index 0000000..7d8ddce --- /dev/null +++ b/packages/renderer/src/pages/Wallet/Walet.stories.tsx @@ -0,0 +1,35 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { Stack } from "@mantine/core"; +import type { ComponentStory, ComponentMeta } from "@storybook/react"; +import { Wallet } from "."; + +export default { + title: "pages/Wallet", + component: Wallet, +} as ComponentMeta; + +const Template: ComponentStory = () => { + return ( + + + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; diff --git a/packages/renderer/src/pages/Wallet/Wallet.tsx b/packages/renderer/src/pages/Wallet/Wallet.tsx new file mode 100644 index 0000000..b50f80d --- /dev/null +++ b/packages/renderer/src/pages/Wallet/Wallet.tsx @@ -0,0 +1,21 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import { NavbarLayout } from "@templates/NavbarLayout"; + +export function Wallet() { + return ; +} diff --git a/packages/renderer/src/pages/Wallet/index.ts b/packages/renderer/src/pages/Wallet/index.ts new file mode 100644 index 0000000..ad9807b --- /dev/null +++ b/packages/renderer/src/pages/Wallet/index.ts @@ -0,0 +1,17 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./Wallet"; diff --git a/packages/renderer/src/theme/global-styles.ts b/packages/renderer/src/theme/global-styles.ts new file mode 100644 index 0000000..965e7a6 --- /dev/null +++ b/packages/renderer/src/theme/global-styles.ts @@ -0,0 +1,34 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import InterFont from "@assets/fonts/Inter-Variable.ttf"; + +export const globalStyles = { + "@font-face": { + fontFamily: "Inter", + src: `url('${InterFont}')`, + fontWeight: "100 800", + fontStyle: "normal italic", + }, + body: { + margin: 0, + padding: 0, + }, + "#app": { + display: "flex", + minHeight: "100vh", + }, +}; diff --git a/packages/renderer/src/theme/index.ts b/packages/renderer/src/theme/index.ts new file mode 100644 index 0000000..683d46b --- /dev/null +++ b/packages/renderer/src/theme/index.ts @@ -0,0 +1,18 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +export * from "./global-styles"; +export * from "./override"; diff --git a/packages/renderer/src/theme/override.ts b/packages/renderer/src/theme/override.ts new file mode 100644 index 0000000..c688735 --- /dev/null +++ b/packages/renderer/src/theme/override.ts @@ -0,0 +1,63 @@ +// ============================================================================= +// Copyright 2022 Haveno +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================= + +import type { MantineThemeOverride } from "@mantine/core"; + +export const themeOverride: MantineThemeOverride = { + fontFamily: "Inter", + headings: { + fontFamily: "Inter", + }, + colors: { + brand: [ + "#dff2ff", + "#b2caff", + "#b2d4ff", + "#83b8fc", + "#539bf7", + "#257ff4", + "#0b65da", + "#034fab", + "#00387b", + "#00224d", + ], + gray: [ + "#f8f9fa", + "#f1f3f5", + "#ececec", + "#dee2e6", + "#ced4da", + "#adb5bd", + "#868e96", + "#495057", + "#343a40", + "#111111", + ], + success: [ + "#e8f9eb", + "#cbe5cd", + "#abd3af", + "#8bc08f", + "#6bad6d", + "#529458", + "#3e7347", + "#2b5234", + "#173220", + "#011207", + ], + }, + primaryColor: "brand", +}; diff --git a/packages/renderer/tsconfig.json b/packages/renderer/tsconfig.json index 75becc3..dc2c61e 100644 --- a/packages/renderer/tsconfig.json +++ b/packages/renderer/tsconfig.json @@ -13,6 +13,7 @@ "esModuleInterop": true, "baseUrl": "./src", "paths": { + "@assets/*": ["../assets/*"], "@atoms/*": ["components/atoms/*"], "@constants/*": ["constants/*"], "@molecules/*": ["components/molecules/*"], diff --git a/packages/renderer/vite.config.js b/packages/renderer/vite.config.js index 435e96f..4bdb628 100644 --- a/packages/renderer/vite.config.js +++ b/packages/renderer/vite.config.js @@ -33,6 +33,7 @@ const config = { root: PACKAGE_ROOT, resolve: { alias: { + "@assets/": join(PACKAGE_ROOT, "assets") + "/", "@atoms/": join(PACKAGE_ROOT, "src", "components", "atoms") + "/", "@constants/": join(PACKAGE_ROOT, "src", "constants") + "/", "@molecules/": join(PACKAGE_ROOT, "src", "components", "molecules") + "/", diff --git a/yarn.lock b/yarn.lock index 39e0396..c25ac85 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1314,7 +1314,7 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@electron/get@^1.13.0": +"@electron/get@^1.0.1", "@electron/get@^1.13.0": version "1.14.1" resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.14.1.tgz#16ba75f02dffb74c23965e72d617adc721d27f40" integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw== @@ -2970,7 +2970,7 @@ dependencies: defer-to-connect "^1.0.1" -"@testing-library/dom@^8.13.0": +"@testing-library/dom@^8.0.0", "@testing-library/dom@^8.13.0": version "8.13.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== @@ -2984,6 +2984,15 @@ lz-string "^1.4.4" pretty-format "^27.0.2" +"@testing-library/react@^12": + version "12.1.5" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-12.1.5.tgz#bb248f72f02a5ac9d949dea07279095fa577963b" + integrity sha512-OfTXCJUFgjd/digLUuPxa0+/3ZxsQmE7ub9kcbW/wi96Bh3o/p5vrETcBGfP17NWPGqeYYl5LTRpwyGoMC4ysg== + dependencies: + "@babel/runtime" "^7.12.5" + "@testing-library/dom" "^8.0.0" + "@types/react-dom" "<18.0.0" + "@testing-library/user-event@^14.1.1": version "14.1.1" resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.1.1.tgz#e1ff6118896e4b22af31e5ea2f9da956adde23d8" @@ -3180,6 +3189,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== +"@types/node@^12.0.12": + version "12.20.49" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.49.tgz#97897a33dd145490f514bbcbccefc178534e360f" + integrity sha512-5e6QNb9bkeh4Hni4ktLqUZuUqnGTX/kou2aZkXyxtuYaHXgBm+In1SHR9V+7kDzWzjB08KC2uqt2doDi7cuAAA== + "@types/node@^14.0.10": version "14.18.13" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.13.tgz#6ad4d9db59e6b3faf98dcfe4ca9d2aec84443277" @@ -3794,6 +3808,13 @@ ajv@^8.0.0, ajv@^8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= + dependencies: + string-width "^2.0.0" + ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -3816,6 +3837,11 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -4401,6 +4427,19 @@ boolean@^3.0.1: resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw== +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + boxen@^5.0.0, boxen@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" @@ -4776,6 +4815,11 @@ camelcase-keys@^6.2.2: map-obj "^4.0.0" quick-lru "^4.0.1" +camelcase@^4.0.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.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -4803,6 +4847,11 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== + case-sensitive-paths-webpack-plugin@^2.3.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" @@ -4831,7 +4880,7 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -4927,6 +4976,11 @@ chromium-pickle-js@^0.2.0: resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -4967,6 +5021,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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= + cli-boxes@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" @@ -5202,6 +5261,18 @@ config-chain@^1.1.11: ini "^1.3.4" proto-list "~1.2.1" +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + configstore@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" @@ -5409,6 +5480,13 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.5.3" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= + dependencies: + capture-stack-trace "^1.0.0" + 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" @@ -5444,6 +5522,15 @@ cross-env@7.0.3: dependencies: cross-spawn "^7.0.1" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -5481,6 +5568,11 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= + crypto-random-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" @@ -5886,6 +5978,13 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + dot-prop@^5.1.0, dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -6042,6 +6141,15 @@ electron@17.1.0: "@types/node" "^14.6.2" extract-zip "^1.0.3" +electron@^11.1.0: + version "11.5.0" + resolved "https://registry.yarnpkg.com/electron/-/electron-11.5.0.tgz#f1650543b9d8f2047d3807755bdb120153ed210f" + integrity sha512-WjNDd6lGpxyiNjE3LhnFCAk/D9GIj1rU3GSDealVShhkkkPR3Vh4q8ErXGDl1OAO/faomVa10KoFPUN/pLbNxg== + dependencies: + "@electron/get" "^1.0.1" + "@types/node" "^12.0.12" + extract-zip "^1.0.3" + element-resize-detector@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz#3e6c5982dd77508b5fa7e6d5c02170e26325c9b1" @@ -6698,6 +6806,19 @@ exec-sh@^0.3.2: resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -7309,6 +7430,11 @@ get-port@^3.1.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -7427,7 +7553,7 @@ global-agent@^3.0.0: semver "^7.3.2" serialize-error "^7.0.1" -global-dirs@^0.1.1: +global-dirs@^0.1.0, global-dirs@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= @@ -7504,6 +7630,23 @@ globby@^9.2.0: pify "^4.0.1" slash "^2.0.0" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -8066,7 +8209,7 @@ invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -ip@^1.1.5: +ip@^1.1.4, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -8165,6 +8308,13 @@ is-callable@^1.1.4, is-callable@^1.2.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -8267,6 +8417,11 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -8296,6 +8451,14 @@ is-hexadecimal@^1.0.0: resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-installed-globally@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" @@ -8314,6 +8477,11 @@ is-negative-zero@^2.0.2: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= + is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" @@ -8338,6 +8506,11 @@ 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: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + is-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" @@ -8348,6 +8521,13 @@ is-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" integrity sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA== +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-path-inside@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" @@ -8375,6 +8555,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= + is-regex@^1.1.2, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" @@ -8383,6 +8568,11 @@ is-regex@^1.1.2, is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + is-set@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" @@ -8395,7 +8585,7 @@ is-shared-array-buffer@^1.0.2: dependencies: call-bind "^1.0.2" -is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -8834,6 +9024,13 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.5.tgz#d166574d90076395d9963aa7a928fabb8d76afbc" integrity sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ== +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= + dependencies: + package-json "^4.0.0" + latest-version@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" @@ -9013,6 +9210,14 @@ lowlight@^1.14.0: fault "^1.0.0" highlight.js "~10.7.0" +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + 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" @@ -9044,6 +9249,13 @@ magic-string@^0.26.1: dependencies: sourcemap-codec "^1.4.8" +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -9374,7 +9586,7 @@ minimist-options@4.1.0: is-plain-obj "^1.1.0" kind-of "^6.0.3" -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== @@ -9973,6 +10185,16 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + package-json@^6.3.0: version "6.5.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" @@ -10098,6 +10320,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" @@ -10361,6 +10588,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" @@ -10519,6 +10751,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -10663,7 +10900,7 @@ raw-loader@^4.0.2: loader-utils "^2.0.0" schema-utils "^3.0.0" -rc@^1.2.8: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -10678,6 +10915,26 @@ react-colorful@^5.1.2: resolved "https://registry.yarnpkg.com/react-colorful/-/react-colorful-5.5.1.tgz#29d9c4e496f2ca784dd2bb5053a3a4340cfaf784" integrity sha512-M1TJH2X3RXEt12sWkpa6hLc/bbYS0H6F4rIqjQZ+RxNBstpY67d9TrFXtqdZwhpmBXcCwEi7stKqFue3ZRkiOg== +react-devtools-core@4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-4.24.4.tgz#adaa54569f87ce7c08384d12e0b35122a755cbae" + integrity sha512-jbX8Yqyq4YvFEobHyXVlGaH0Cs/+EOdb3PL911bxaR5BnzbB5TE4RFHC1iOgT4vRH3VxIIrVQ7lR9vsiFFCYCA== + dependencies: + shell-quote "^1.6.1" + ws "^7" + +react-devtools@^4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/react-devtools/-/react-devtools-4.24.4.tgz#cbc299ca0100755721d002ca4eb0b72743a0baef" + integrity sha512-r2/HZo1LAYrSm1EpJL2NAJZFxWuSgIXTciAICuBhgXlDW5WvZrJpsFa2gaPnVNACFnjRUzDebpSR1gYy2oGdeQ== + dependencies: + cross-spawn "^5.0.1" + electron "^11.1.0" + ip "^1.1.4" + minimist "^1.2.3" + react-devtools-core "4.24.4" + update-notifier "^2.1.0" + react-docgen-typescript@^2.0.0, react-docgen-typescript@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" @@ -11041,6 +11298,14 @@ regexpu-core@^5.0.1: unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.0.0" +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + registry-auth-token@^4.0.0: version "4.2.1" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" @@ -11048,6 +11313,13 @@ registry-auth-token@^4.0.0: dependencies: rc "^1.2.8" +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= + dependencies: + rc "^1.0.1" + registry-url@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" @@ -11405,6 +11677,13 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= + dependencies: + semver "^5.0.3" + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -11412,7 +11691,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -11576,6 +11855,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shell-quote@^1.6.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + side-channel@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" @@ -11875,6 +12159,14 @@ stream-shift@^1.0.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + "string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.6: version "4.0.7" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz#8e6ecb0d8a1fb1fda470d81acecb2dba057a481d" @@ -11944,6 +12236,13 @@ strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" +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@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -12099,6 +12398,13 @@ temp-file@^3.4.0: async-exit-hook "^2.0.1" fs-extra "^10.0.0" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= + dependencies: + execa "^0.7.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" @@ -12209,6 +12515,11 @@ through2@^4.0.0: resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= +timed-out@^4.0.0: + version "4.0.1" + 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" @@ -12568,6 +12879,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= + dependencies: + crypto-random-string "^1.0.0" + unique-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" @@ -12673,11 +12991,32 @@ unzip-crx-3@^0.2.0: mkdirp "^0.5.1" yaku "^0.16.6" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= + 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== +update-notifier@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + update-notifier@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" @@ -12719,6 +13058,13 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.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" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= + dependencies: + prepend-http "^1.0.1" + url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" @@ -13116,6 +13462,13 @@ wide-align@^1.1.2: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + 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" @@ -13161,6 +13514,15 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^2.0.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + write-file-atomic@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" @@ -13176,11 +13538,21 @@ ws@8.4.2: resolved "https://registry.yarnpkg.com/ws/-/ws-8.4.2.tgz#18e749868d8439f2268368829042894b6907aa0b" integrity sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA== +ws@^7: + version "7.5.7" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" + integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== + ws@^8.2.3: version "8.5.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= + xdg-basedir@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" @@ -13216,6 +13588,11 @@ yaku@^0.16.6: resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" integrity sha1-HRlceKqbW/hHnIlblQT9TwhHmE4= +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"