From b04b54ac99c5d990045249eca14d24a78abb3fe3 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 15 Aug 2022 08:16:59 -0400 Subject: [PATCH] Switched from React to Preact --- examples/FullScreenSaver/package.json | 15 +--- examples/FullScreenSaver/tsconfig.json | 3 +- packages/eightbittr/docs/FAQs.md | 3 +- .../setup/external/tsconfig.json | 3 +- .../setup/package-game.json | 12 +-- .../setup/package-web.json | 3 +- packages/userwrappr/README.md | 2 +- packages/userwrappr/package.json | 23 ++--- .../userwrappr/src/Bootstrapping/Styles.ts | 53 ++++++----- .../userwrappr/src/Menus/InitializeMenus.tsx | 22 ++--- packages/userwrappr/src/Menus/Menu.tsx | 4 +- .../userwrappr/src/Menus/MenuContainer.tsx | 4 +- packages/userwrappr/src/Menus/MenuContext.tsx | 7 +- packages/userwrappr/src/Menus/MenuTitle.tsx | 2 - packages/userwrappr/src/Menus/Menus.tsx | 4 +- .../src/Menus/Options/ActionOption.tsx | 4 +- .../src/Menus/Options/BooleanOption.tsx | 2 - .../src/Menus/Options/MultiSelectOption.tsx | 10 ++- .../src/Menus/Options/NumberOption.tsx | 4 +- .../userwrappr/src/Menus/Options/Options.tsx | 2 - .../src/Menus/Options/SelectOption.tsx | 4 +- .../src/Menus/Options/StringOption.tsx | 4 +- .../userwrappr/src/Menus/Options/types.ts | 4 +- .../src/Menus/Options/useOptionState.ts | 2 +- packages/userwrappr/src/UserWrappr.test.ts | 4 +- packages/userwrappr/src/UserWrappr.ts | 2 +- packages/userwrappr/src/VisualContext.tsx | 7 +- tsconfig.base.json | 8 +- yarn.lock | 88 ++----------------- 29 files changed, 97 insertions(+), 208 deletions(-) diff --git a/examples/FullScreenSaver/package.json b/examples/FullScreenSaver/package.json index 92363719..2e4e5138 100644 --- a/examples/FullScreenSaver/package.json +++ b/examples/FullScreenSaver/package.json @@ -19,8 +19,7 @@ "lint-staged": "^13.0.3", "mocha": "^10.0.0", "mocha-headless-chrome": "^4.0.0", - "react": "^16.8.6", - "react-dom": "^16.8.6", + "preact": "^10.10.2", "requirejs": "^2.3.6", "shenanigans-manager": "^0.8.1", "sinon": "^14.0.0", @@ -67,17 +66,9 @@ "externals": [ { "js": { - "dev": "react/umd/react.development", - "prod": "react/umd/react.production.min" + "dev": "preact/dist/preact.umd" }, - "name": "react" - }, - { - "js": { - "dev": "react-dom/umd/react-dom.development", - "prod": "react-dom/umd/react-dom.production.min" - }, - "name": "react-dom" + "name": "preact" }, { "js": { diff --git a/examples/FullScreenSaver/tsconfig.json b/examples/FullScreenSaver/tsconfig.json index 0723c279..d9a87b6b 100644 --- a/examples/FullScreenSaver/tsconfig.json +++ b/examples/FullScreenSaver/tsconfig.json @@ -5,7 +5,8 @@ "declarationMap": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "jsx": "react", + "jsx": "react-jsx", + "jsxImportSource": "preact", "module": "amd", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, diff --git a/packages/eightbittr/docs/FAQs.md b/packages/eightbittr/docs/FAQs.md index 2e854041..fdb25fb3 100644 --- a/packages/eightbittr/docs/FAQs.md +++ b/packages/eightbittr/docs/FAQs.md @@ -47,5 +47,4 @@ Quite a lot! ### UI -- #187: Use modern React _(hooks!)_. -- #229: Rewrite TouchPassr in React. +- #229: Rewrite TouchPassr in Preact. diff --git a/packages/shenanigans-manager/setup/external/tsconfig.json b/packages/shenanigans-manager/setup/external/tsconfig.json index 0723c279..d9a87b6b 100644 --- a/packages/shenanigans-manager/setup/external/tsconfig.json +++ b/packages/shenanigans-manager/setup/external/tsconfig.json @@ -5,7 +5,8 @@ "declarationMap": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "jsx": "react", + "jsx": "react-jsx", + "jsxImportSource": "preact", "module": "amd", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, diff --git a/packages/shenanigans-manager/setup/package-game.json b/packages/shenanigans-manager/setup/package-game.json index 94a1f993..30c93515 100644 --- a/packages/shenanigans-manager/setup/package-game.json +++ b/packages/shenanigans-manager/setup/package-game.json @@ -8,17 +8,9 @@ "externals": [ { "js": { - "dev": "react/umd/react.development", - "prod": "react/umd/react.production.min" + "dev": "preact/dist/preact.umd" }, - "name": "react" - }, - { - "js": { - "dev": "react-dom/umd/react-dom.development", - "prod": "react-dom/umd/react-dom.production.min" - }, - "name": "react-dom" + "name": "preact" }, { "js": { diff --git a/packages/shenanigans-manager/setup/package-web.json b/packages/shenanigans-manager/setup/package-web.json index 904c7eea..6240293f 100644 --- a/packages/shenanigans-manager/setup/package-web.json +++ b/packages/shenanigans-manager/setup/package-web.json @@ -1,7 +1,6 @@ { "devDependencies": { - "react": "^16.8.6", - "react-dom": "^16.8.6", + "preact": "^10.10.2", "requirejs": "^2.3.6" } } diff --git a/packages/userwrappr/README.md b/packages/userwrappr/README.md index e2efee2d..a4f0ead3 100644 --- a/packages/userwrappr/README.md +++ b/packages/userwrappr/README.md @@ -33,7 +33,7 @@ userWrapper.createDisplay(document.querySelector("#YourElementContainer")); UserWrappr prioritizes creating the contents as soon as possible. When you call `createDisplay`, the following happen in order: -1. View libraries (i.e. React) _start_ to load. +1. View libraries (i.e. Preact) _start_ to load. 2. A visual approximation of your menus is placed at the bottom of the area. 3. Contents are created in the remaining usable area. 4. Once view libraries are loaded, real menus created using them to replace the fake menus. diff --git a/packages/userwrappr/package.json b/packages/userwrappr/package.json index c56e7478..c2a87b52 100644 --- a/packages/userwrappr/package.json +++ b/packages/userwrappr/package.json @@ -8,23 +8,18 @@ "url": "https://github.com/FullScreenShenanigans/EightBittr/issues" }, "dependencies": { - "react": "^16.8.6", - "react-dom": "^16.8.6", + "preact": "^10.10.2", "requirejs": "^2.3.6" }, "description": "Creates configurable HTML displays over flexible-sized contents.", "devDependencies": { "@types/chai": "^4.3.3", "@types/mocha": "^9.1.1", - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", "@types/sinon": "^10.0.13", "@types/sinon-chai": "^3.2.8", "chai": "^4.3.6", "mocha": "^10.0.0", "mocha-headless-chrome": "^4.0.0", - "react": "^16.8.6", - "react-dom": "^16.8.6", "requirejs": "^2.3.6", "shenanigans-manager": "^0.8.1", "sinon": "^14.0.0", @@ -35,8 +30,7 @@ "license": "MIT", "name": "userwrappr", "repository": { - "type": "git", - "url": "ssh://git@github.com:FullScreenShenanigans/EightBittr.git" + "type": "git" }, "scripts": { "clean": "rm -rf dist lib *.tsbuildinfo", @@ -72,22 +66,15 @@ "externals": [ { "js": { - "dev": "../../../node_modules/react/umd/react.development", - "prod": "../../../node_modules/react/umd/react.production" + "dev": "../../node_modules/preact/dist/preact.umd" }, - "name": "react" - }, - { - "js": { - "dev": "../../../node_modules/react-dom/umd/react-dom.development", - "prod": "../../../node_modules/react-dom/umd/react-dom.production" - }, - "name": "react-dom" + "name": "preact" } ] }, "name": "UserWrappr" }, "types": "./lib/index.d.ts", + "url": "https://github.com/FullScreenShenanigans/EightBittr", "version": "0.8.2" } \ No newline at end of file diff --git a/packages/userwrappr/src/Bootstrapping/Styles.ts b/packages/userwrappr/src/Bootstrapping/Styles.ts index 380320dd..ef2ae434 100644 --- a/packages/userwrappr/src/Bootstrapping/Styles.ts +++ b/packages/userwrappr/src/Bootstrapping/Styles.ts @@ -1,7 +1,14 @@ +import * as Preact from "preact"; + /** - * Styles that work for both raw CSS styles and React CSS properties. + * String styles that work for Preact's CSS styles. */ -export type StyleDeclaration = CSSStyleDeclaration & React.CSSProperties; +export type PreactCSSProperties = Partial<{ + [K in keyof Omit]: Exclude< + Preact.JSX.CSSProperties[K], + number | null + >; +}>; /** * Styles to use for display elements. @@ -10,107 +17,107 @@ export interface Styles { /** * Styles for the content area container. */ - contentArea?: Partial; + contentArea?: PreactCSSProperties; /** * Styles for input elements. */ - input?: Partial; + input?: PreactCSSProperties; /** * Styles for input buttons. */ - inputButton?: Partial; + inputButton?: PreactCSSProperties; /** * Styles for action input buttons. */ - inputButtonAction?: Partial; + inputButtonAction?: PreactCSSProperties; /** * Styles for boolean input buttons. */ - inputButtonBoolean?: Partial; + inputButtonBoolean?: PreactCSSProperties; /** * Styles for input buttons in an off state. */ - inputButtonOff?: Partial; + inputButtonOff?: PreactCSSProperties; /** * Styles for input buttons in an on state. */ - inputButtonOn?: Partial; + inputButtonOn?: PreactCSSProperties; /** * Styles for select dropdowns. */ - inputSelect?: Partial; + inputSelect?: PreactCSSProperties; /** * Styles for a hidden children container in a menu. */ - menuChildrenClosed?: Partial; + menuChildrenClosed?: PreactCSSProperties; /** * Styles for a visible children container in a menu. */ - menuChildrenOpen?: Partial; + menuChildrenOpen?: PreactCSSProperties; /** * Styles for each menu. */ - menu?: Partial; + menu?: PreactCSSProperties; /** * Styles for the inner area of the menus container. */ - menusInnerArea?: Partial; + menusInnerArea?: PreactCSSProperties; /** * Styles for a fake version of inner area of the menus container. */ - menusInnerAreaFake?: Partial; + menusInnerAreaFake?: PreactCSSProperties; /** * Styles for each menu's title. */ - menuTitle?: Partial; + menuTitle?: PreactCSSProperties; /** * Styles for each menu's title button. */ - menuTitleButton?: Partial; + menuTitleButton?: PreactCSSProperties; /** * Styles for each menu's faked title button. */ - menuTitleButtonFake?: Partial; + menuTitleButtonFake?: PreactCSSProperties; /** * Styles for an option's container. */ - option?: Partial; + option?: PreactCSSProperties; /** * Styles for the left half of a two-part option. */ - optionLeft?: Partial; + optionLeft?: PreactCSSProperties; /** * Styles for the right half of a two-part option. */ - optionRight?: Partial; + optionRight?: PreactCSSProperties; /** * Styles for a container of options. */ - options?: Partial; + options?: PreactCSSProperties; /** * Styles for a list of options within its container. */ - optionsList?: Partial; + optionsList?: PreactCSSProperties; } /** diff --git a/packages/userwrappr/src/Menus/InitializeMenus.tsx b/packages/userwrappr/src/Menus/InitializeMenus.tsx index c7075517..6fca6809 100644 --- a/packages/userwrappr/src/Menus/InitializeMenus.tsx +++ b/packages/userwrappr/src/Menus/InitializeMenus.tsx @@ -1,5 +1,4 @@ -import * as React from "react"; -import * as ReactDOM from "react-dom"; +import { render } from "preact"; import { VisualContext, VisualContextType } from "../VisualContext"; import { Menus, MenusProps } from "./Menus"; @@ -20,7 +19,7 @@ export interface WrappingViewDependencies extends MenusProps, VisualContextType * @param container Container to create a view within. * @param schema Descriptions of menu options. */ -export type InitializeMenusView = (dependencies: WrappingViewDependencies) => Promise; +export type InitializeMenusView = (dependencies: WrappingViewDependencies) => void; /** * Module containing initializeMenus. @@ -40,20 +39,17 @@ export interface InitializeMenusViewWrapper { * @param dependencies Dependencies to create the menus view. * @returns A Promise for creating a menus view in the container. */ -export const initializeMenus: InitializeMenusView = async (dependencies) => { +export const initializeMenus: InitializeMenusView = (dependencies) => { const menusContainerQuery = `.${dependencies.classNames.menusOuterArea}`; const menusContainer = dependencies.container.querySelector(menusContainerQuery); if (menusContainer === null) { throw new Error(`Could not find menus container under '${menusContainerQuery}'.`); } - await new Promise((resolve) => { - ReactDOM.render( - - - , - menusContainer, - resolve - ); - }); + render( + + + , + menusContainer + ); }; diff --git a/packages/userwrappr/src/Menus/Menu.tsx b/packages/userwrappr/src/Menus/Menu.tsx index d47cfa27..bd27cc95 100644 --- a/packages/userwrappr/src/Menus/Menu.tsx +++ b/packages/userwrappr/src/Menus/Menu.tsx @@ -1,4 +1,4 @@ -import * as React from "react"; +import { useState } from "preact/hooks"; import { MenuSchema } from ".."; import { MenuContainer } from "./MenuContainer"; @@ -11,7 +11,7 @@ export interface MenuProps { } export const Menu = ({ menu }: MenuProps) => { - const [open, setOpen] = React.useState(OpenState.Closed); + const [open, setOpen] = useState(OpenState.Closed); return ( diff --git a/packages/userwrappr/src/Menus/MenuContainer.tsx b/packages/userwrappr/src/Menus/MenuContainer.tsx index 57c0ecf6..9a28454e 100644 --- a/packages/userwrappr/src/Menus/MenuContainer.tsx +++ b/packages/userwrappr/src/Menus/MenuContainer.tsx @@ -1,11 +1,11 @@ -import * as React from "react"; +import * as Preact from "preact"; import { useVisualContext } from "../VisualContext"; import { useMenuContext } from "./MenuContext"; import { MenuTitle } from "./MenuTitle"; export interface MenuContainerProps { - children: React.ReactNode; + children: Preact.ComponentChild; } export const MenuContainer = ({ children }: MenuContainerProps) => { diff --git a/packages/userwrappr/src/Menus/MenuContext.tsx b/packages/userwrappr/src/Menus/MenuContext.tsx index 0bfaa274..6a41195a 100644 --- a/packages/userwrappr/src/Menus/MenuContext.tsx +++ b/packages/userwrappr/src/Menus/MenuContext.tsx @@ -1,4 +1,5 @@ -import * as React from "react"; +import { createContext } from "preact"; +import { useContext } from "preact/hooks"; import { MenuSchema } from ".."; import { OpenState } from "./OpenState"; @@ -10,6 +11,6 @@ export interface MenuContextType { } // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -export const MenuContext = React.createContext({} as any); +export const MenuContext = createContext({} as any); -export const useMenuContext = () => React.useContext(MenuContext); +export const useMenuContext = () => useContext(MenuContext); diff --git a/packages/userwrappr/src/Menus/MenuTitle.tsx b/packages/userwrappr/src/Menus/MenuTitle.tsx index 24eabf0b..8ea65d43 100644 --- a/packages/userwrappr/src/Menus/MenuTitle.tsx +++ b/packages/userwrappr/src/Menus/MenuTitle.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { useVisualContext } from "../VisualContext"; import { useMenuContext } from "./MenuContext"; import { OpenState } from "./OpenState"; diff --git a/packages/userwrappr/src/Menus/Menus.tsx b/packages/userwrappr/src/Menus/Menus.tsx index bd795a30..66a2ac9b 100644 --- a/packages/userwrappr/src/Menus/Menus.tsx +++ b/packages/userwrappr/src/Menus/Menus.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { useVisualContext } from "../VisualContext"; import { Menu } from "./Menu"; import { MenuSchema } from "./MenuSchemas"; @@ -11,7 +9,7 @@ export interface MenusProps { menus: MenuSchema[]; } -export const Menus: React.FC = ({ menus }) => { +export const Menus = ({ menus }: MenusProps) => { const { classNames, containerSize, styles } = useVisualContext(); return ( diff --git a/packages/userwrappr/src/Menus/Options/ActionOption.tsx b/packages/userwrappr/src/Menus/Options/ActionOption.tsx index 9da10306..6db7866a 100644 --- a/packages/userwrappr/src/Menus/Options/ActionOption.tsx +++ b/packages/userwrappr/src/Menus/Options/ActionOption.tsx @@ -1,7 +1,5 @@ -import * as React from "react"; -import { ActionSchema } from "userwrappr/src"; - import { useVisualContext } from "../../VisualContext"; +import { ActionSchema } from "./OptionSchemas"; import { OptionComponent } from "./types"; export const ActionOption: OptionComponent = ({ option }) => { diff --git a/packages/userwrappr/src/Menus/Options/BooleanOption.tsx b/packages/userwrappr/src/Menus/Options/BooleanOption.tsx index 392e9f53..b7e58945 100644 --- a/packages/userwrappr/src/Menus/Options/BooleanOption.tsx +++ b/packages/userwrappr/src/Menus/Options/BooleanOption.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { useVisualContext } from "../../VisualContext"; import { BooleanSchema } from "./OptionSchemas"; import { OptionComponent } from "./types"; diff --git a/packages/userwrappr/src/Menus/Options/MultiSelectOption.tsx b/packages/userwrappr/src/Menus/Options/MultiSelectOption.tsx index 28594210..81f78c28 100644 --- a/packages/userwrappr/src/Menus/Options/MultiSelectOption.tsx +++ b/packages/userwrappr/src/Menus/Options/MultiSelectOption.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { useVisualContext } from "../../VisualContext"; import { MultiSelectSchema } from "./OptionSchemas"; import { OptionComponent } from "./types"; @@ -41,7 +39,13 @@ export const MultiSelectOption: OptionComponent = ({ option } setValue(event.target.value)} + onChange={(event) => setValue((event.target as HTMLSelectElement).value)} style={selectStyle} value={value} > diff --git a/packages/userwrappr/src/Menus/Options/StringOption.tsx b/packages/userwrappr/src/Menus/Options/StringOption.tsx index dac9f929..d579cf94 100644 --- a/packages/userwrappr/src/Menus/Options/StringOption.tsx +++ b/packages/userwrappr/src/Menus/Options/StringOption.tsx @@ -1,5 +1,3 @@ -import * as React from "react"; - import { useVisualContext } from "../../VisualContext"; import { StringSchema } from "./OptionSchemas"; import { OptionComponent } from "./types"; @@ -16,7 +14,7 @@ export const StringOption: OptionComponent = ({ option }) => {
setValue(event.target.value)} + onChange={(event) => setValue((event.target as HTMLInputElement).value)} type="string" value={value} /> diff --git a/packages/userwrappr/src/Menus/Options/types.ts b/packages/userwrappr/src/Menus/Options/types.ts index c5613374..2134bce3 100644 --- a/packages/userwrappr/src/Menus/Options/types.ts +++ b/packages/userwrappr/src/Menus/Options/types.ts @@ -1,9 +1,11 @@ +import * as Preact from "preact"; + import { OptionSchema } from "./OptionSchemas"; export interface OptionComponentProps { option: Schema; } -export type OptionComponent = React.ComponentType< +export type OptionComponent = Preact.ComponentType< OptionComponentProps >; diff --git a/packages/userwrappr/src/Menus/Options/useOptionState.ts b/packages/userwrappr/src/Menus/Options/useOptionState.ts index 56878269..1520cf71 100644 --- a/packages/userwrappr/src/Menus/Options/useOptionState.ts +++ b/packages/userwrappr/src/Menus/Options/useOptionState.ts @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useState } from "preact/hooks"; import { SaveableSchema } from "./OptionSchemas"; diff --git a/packages/userwrappr/src/UserWrappr.test.ts b/packages/userwrappr/src/UserWrappr.test.ts index 4391e2f1..9ae8c02d 100644 --- a/packages/userwrappr/src/UserWrappr.test.ts +++ b/packages/userwrappr/src/UserWrappr.test.ts @@ -4,7 +4,7 @@ import { stubUserWrappr } from "./fakes.test"; describe("UserWrappr", () => { describe("resetDisplay", () => { - it("loads React libraries", async () => { + it("loads Preact libraries", async () => { // Arrange const { container, requirejs, userWrapper } = stubUserWrappr(); @@ -12,7 +12,7 @@ describe("UserWrappr", () => { await userWrapper.createDisplay(container); // Assert - expect(requirejs.getCall(0).args[0]).to.deep.equal(["react", "react-dom"]); + expect(requirejs.getCall(0).args[0]).to.deep.equal(["preact"]); }); it("places contents within the container first", async () => { diff --git a/packages/userwrappr/src/UserWrappr.ts b/packages/userwrappr/src/UserWrappr.ts index e4c5324f..25aa8693 100644 --- a/packages/userwrappr/src/UserWrappr.ts +++ b/packages/userwrappr/src/UserWrappr.ts @@ -22,7 +22,7 @@ declare const requirejs: RequireJs; /** * View libraries required to initialize a wrapping display. */ -const externalViewLibraries: string[] = ["react", "react-dom"]; +const externalViewLibraries: string[] = ["preact"]; /** * Getters for the defaults of each optional UserWrappr setting. diff --git a/packages/userwrappr/src/VisualContext.tsx b/packages/userwrappr/src/VisualContext.tsx index 6d617b45..eb8da9c3 100644 --- a/packages/userwrappr/src/VisualContext.tsx +++ b/packages/userwrappr/src/VisualContext.tsx @@ -1,4 +1,5 @@ -import * as React from "react"; +import { createContext } from "preact"; +import { useContext } from "preact/hooks"; import { ClassNames } from "./Bootstrapping/ClassNames"; import { Styles } from "./Bootstrapping/Styles"; @@ -11,6 +12,6 @@ export interface VisualContextType { } // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -export const VisualContext = React.createContext({} as any); +export const VisualContext = createContext({} as any); -export const useVisualContext = () => React.useContext(VisualContext); +export const useVisualContext = () => useContext(VisualContext); diff --git a/tsconfig.base.json b/tsconfig.base.json index 06cf81c3..78a4bef3 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,16 +4,14 @@ "composite": true, "declaration": true, "declarationMap": true, + "esModuleInterop": true, "experimentalDecorators": true, "forceConsistentCasingInFileNames": true, - "jsx": "react", - "lib": ["dom", "es2017"], + "jsx": "react-jsx", + "jsxImportSource": "preact", "module": "amd", "moduleResolution": "node", "noFallthroughCasesInSwitch": true, - "noImplicitAny": true, - "noImplicitReturns": true, - "noImplicitThis": true, "noUnusedLocals": true, "noUnusedParameters": true, "pretty": true, diff --git a/yarn.lock b/yarn.lock index 61abaa95..b4f73b41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1740,27 +1740,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.0.tgz#ea03e9f0376a4446f44797ca19d9c46c36e352dc" integrity sha512-RI1L7N4JnW5gQw2spvL7Sllfuf1SaHdrZpCHiBlCXjIlufi1SMNnbu2teze3/QE67Fg2tBlH7W+mi4hVNk4p0A== -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - -"@types/react-dom@^18.0.6": - version "18.0.6" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.0.6.tgz#36652900024842b74607a17786b6662dd1e103a1" - integrity sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA== - dependencies: - "@types/react" "*" - -"@types/react@*", "@types/react@^18.0.17": - version "18.0.17" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.17.tgz#4583d9c322d67efe4b39a935d223edcc7050ccf4" - integrity sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/responselike@*", "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" @@ -1776,11 +1755,6 @@ "@types/glob" "*" "@types/node" "*" -"@types/scheduler@*": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" - integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== - "@types/sinon-chai@^3.2.8": version "3.2.8" resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.8.tgz#5871d09ab50d671d8e6dd72e9073f8e738ac61dc" @@ -3075,11 +3049,6 @@ cspell@^6.6.1: strip-ansi "^6.0.1" vscode-uri "^3.0.3" -csstype@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" - integrity sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA== - dargs@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" @@ -4473,7 +4442,7 @@ jju@^1.1.0: resolved "https://registry.yarnpkg.com/jju/-/jju-1.4.0.tgz#a3abe2718af241a2b2904f84a625970f389ae32a" integrity sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA== -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: +js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -4814,13 +4783,6 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - loupe@^2.3.1: version "2.3.4" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" @@ -5525,7 +5487,7 @@ nx@14.5.6, "nx@>=14.5.4 < 16": yargs "^17.4.0" yargs-parser "21.0.1" -object-assign@^4.0.1, object-assign@^4.1.1: +object-assign@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5904,6 +5866,11 @@ pkg-dir@4.2.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +preact@^10.10.2: + version "10.10.2" + resolved "https://registry.yarnpkg.com/preact/-/preact-10.10.2.tgz#3460d456d84c4701af33ac37e9bd3054271d5b1e" + integrity sha512-GUXSsfwq4NKhlLYY5ctfNE0IjFk7Xo4952yPI8yMkXdhzeQmQ+FahZITe7CeHXMPyKBVQ8SoCmGNIy9TSOdhgQ== + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5967,15 +5934,6 @@ promzard@^0.3.0: dependencies: read "1" -prop-types@^15.6.2: - version "15.8.1" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" - integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.13.1" - proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6076,30 +6034,6 @@ rc@1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-is@^16.13.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react@^16.8.6: - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - read-cmd-shim@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz#62b8c638225c61e6cc607f8f4b779f3b8238f155" @@ -6383,14 +6317,6 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - schema-utils@^3.1.0, schema-utils@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281"