From 757baf02f0986d5d3474bb6fee6551ae26d81042 Mon Sep 17 00:00:00 2001 From: Michael Chung Date: Wed, 23 Apr 2025 16:33:49 -0400 Subject: [PATCH] Modified the sign in and sign up buttons to use the new button link component --- .../editor2d/src/app/pages/main/index.tsx | 1 + .../features/ToolbarTopRight/index.tsx | 4 +- .../reusable/ButtonLink/ButtonLink.tsx | 33 +- .../shared_authentication/AuthButtons.tsx | 37 ++ .../shared_authentication/authentication.tsx | 41 -- .../shared_authentication/profiledropdown.tsx | 359 ++++++++--------- .../shared_authentication/signup.tsx | 361 +++++++++--------- frontend/apps/editor2d/tsconfig.app.json | 6 + frontend/apps/editor2d/tsconfig.json | 6 + 9 files changed, 439 insertions(+), 409 deletions(-) create mode 100644 frontend/apps/editor2d/src/components/shared_authentication/AuthButtons.tsx delete mode 100644 frontend/apps/editor2d/src/components/shared_authentication/authentication.tsx diff --git a/frontend/apps/editor2d/src/app/pages/main/index.tsx b/frontend/apps/editor2d/src/app/pages/main/index.tsx index 84e7edac4d..285240f2ea 100644 --- a/frontend/apps/editor2d/src/app/pages/main/index.tsx +++ b/frontend/apps/editor2d/src/app/pages/main/index.tsx @@ -14,6 +14,7 @@ import { EditModeRootComponent } from "~/EditModeRootComponent/EditModeRootCompo import { useRef } from "react"; import { GenerationEngine } from "~/KonvaApp/GenerationEngine"; import { GalleryRootComponent } from "~/GalleryRootComponent"; + import { DemoModal } from "@storyteller/ui-demo-modal"; export const isTauri = (): boolean => { diff --git a/frontend/apps/editor2d/src/components/features/ToolbarTopRight/index.tsx b/frontend/apps/editor2d/src/components/features/ToolbarTopRight/index.tsx index 61d810dacc..bf3ba0ef01 100644 --- a/frontend/apps/editor2d/src/components/features/ToolbarTopRight/index.tsx +++ b/frontend/apps/editor2d/src/components/features/ToolbarTopRight/index.tsx @@ -4,9 +4,11 @@ import { Activity } from "~/components/ui/Activity/Activity"; // import { paperWrapperStyles } from "~/components/styles"; // import { faPlus, faQuestion } from "@fortawesome/pro-solid-svg-icons"; // import { ToolbarButton } from "~/components/features/ToolbarButton"; + import { Button } from "@storyteller/ui-button"; import { SettingsModal } from "@storyteller/ui-settings-modal"; import { useState } from "react"; +import { AuthButtons } from "~/components/shared_authentication/AuthButtons"; export const ToolbarTopRight = () => { const [isSettingsModalOpen, setIsSettingsModalOpen] = useState(false); @@ -21,8 +23,8 @@ export const ToolbarTopRight = () => { onClick={() => setIsSettingsModalOpen(true)} /> + - setIsSettingsModalOpen(false)} diff --git a/frontend/apps/editor2d/src/components/reusable/ButtonLink/ButtonLink.tsx b/frontend/apps/editor2d/src/components/reusable/ButtonLink/ButtonLink.tsx index 5d96f64879..6514512b19 100644 --- a/frontend/apps/editor2d/src/components/reusable/ButtonLink/ButtonLink.tsx +++ b/frontend/apps/editor2d/src/components/reusable/ButtonLink/ButtonLink.tsx @@ -1,11 +1,15 @@ -import { Link, LinkProps } from "@remix-run/react"; +import React from "react"; +import { useNavigate } from "react-router-dom"; import { IconDefinition } from "@fortawesome/fontawesome-svg-core"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { twMerge } from "tailwind-merge"; -interface LinkButtonProps extends LinkProps { +interface ButtonLinkProps { icon?: IconDefinition; variant?: "primary" | "secondary"; + className?: string; + to: string; + children: React.ReactNode; } export const ButtonLink = ({ @@ -13,9 +17,11 @@ export const ButtonLink = ({ children, className: propsClassName, variant = "primary", + to, ...rest -}: LinkButtonProps) => { - //TODO: Duplicated from Button.tsx +}: ButtonLinkProps) => { + const navigate = useNavigate(); + function getVariantClassNames(variant: string) { switch (variant) { case "secondary": { @@ -31,14 +37,19 @@ export const ButtonLink = ({ "text-sm font-medium whitespace-nowrap rounded-lg px-3 py-2 shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 transition-all duration-150"; const variantClassNames = getVariantClassNames(variant); const className = twMerge(baseClassName, variantClassNames, propsClassName); - // END TODO + + const handleClick = () => { + navigate(to); + }; return ( - - - + ); }; diff --git a/frontend/apps/editor2d/src/components/shared_authentication/AuthButtons.tsx b/frontend/apps/editor2d/src/components/shared_authentication/AuthButtons.tsx new file mode 100644 index 0000000000..ddf16746d2 --- /dev/null +++ b/frontend/apps/editor2d/src/components/shared_authentication/AuthButtons.tsx @@ -0,0 +1,37 @@ +import { useSignals } from "@preact/signals-react/runtime"; +// import { AUTH_STATUS } from "~/signals/authentication/enums"; +// import { authentication } from "~/signals"; +import { ButtonLink } from "~/components/reusable/ButtonLink/ButtonLink"; +// import ProfileDropdown from "./ProfileDropdown"; + +// TODO MAKE THIS A SHARED COMPONENT ART CRAFT +export const AuthButtons = () => { + useSignals(); + //const { status } = authentication; + if (false) { + // status.value === AUTH_STATUS.LOGGED_IN + return ; + } else { + return ( +
+ | +
+ + Login + + + Sign Up + +
+
+ ); + } +}; diff --git a/frontend/apps/editor2d/src/components/shared_authentication/authentication.tsx b/frontend/apps/editor2d/src/components/shared_authentication/authentication.tsx deleted file mode 100644 index aa1d2d906b..0000000000 --- a/frontend/apps/editor2d/src/components/shared_authentication/authentication.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import { useSignals } from "@preact/signals-react/runtime"; - -import { AUTH_STATUS } from "~/signals/authentication/enums"; -import { authentication } from "~/signals"; - -import { ButtonLink } from "~/components/ui/ButtonLink"; -import ProfileDropdown from "~/src/components/ProfileDropdown"; - -// TODO MAKE THIS A SHARED COMPONENT ART CRAFT -export const AuthButtons = () => { - useSignals(); - - const { status } = authentication; - - if (status.value === AUTH_STATUS.LOGGED_IN) { - return ; - } else { - return ( -
- | -
- - Login - - - Sign Up - -
-
- ); - } -}; diff --git a/frontend/apps/editor2d/src/components/shared_authentication/profiledropdown.tsx b/frontend/apps/editor2d/src/components/shared_authentication/profiledropdown.tsx index 673c40d38d..5518e6fa55 100644 --- a/frontend/apps/editor2d/src/components/shared_authentication/profiledropdown.tsx +++ b/frontend/apps/editor2d/src/components/shared_authentication/profiledropdown.tsx @@ -1,188 +1,191 @@ -import { faEnvelope, faKey, faUser } from "@fortawesome/pro-solid-svg-icons"; -import { GlobalSettingsManager } from "./pages/PageEnigma/GlobalSettingsManager"; -import { Button, Input } from "~/shared/components"; -import { addToast, authentication, signUp } from "~/signals"; -import { FormEvent, useRef, useState, StrictMode } from "react"; -import { AUTH_STATUS, ToastTypes } from "~/enums"; -import { useSignalEffect, useSignals } from "@preact/signals-react/runtime"; -import { useNavigate, useSearchParams, BrowserRouter } from "react-router-dom"; -import { createRoot } from "react-dom/client"; +// import { faEnvelope, faKey, faUser } from "@fortawesome/pro-solid-svg-icons"; +// // import { GlobalSettingsManager } from "./pages/PageEnigma/GlobalSettingsManager"; +// import { Button } from "@storyteller/ui-button"; +// import { Input } from "@storyteller/ui-input"; -import "./styles/normalize.css"; -import "./styles/tailwind.css"; -import "./styles/base.css"; -import "@fortawesome/fontawesome-svg-core/styles.css"; +// // import { addToast, authentication, signUp } from "~/signals"; +// import { FormEvent, useRef, useState, StrictMode } from "react"; +// // import { AUTH_STATUS, ToastTypes } from "~/enums"; +// import { useSignalEffect, useSignals } from "@preact/signals-react/runtime"; +// import { useNavigate, useSearchParams, BrowserRouter } from "react-router-dom"; +// import { createRoot } from "react-dom/client"; -import { config } from "@fortawesome/fontawesome-svg-core"; +// // import "./styles/normalize.css"; +// // import "./styles/tailwind.css"; +// // import "./styles/base.css"; -config.autoAddCss = false; /* eslint-disable import/first */ -// TODO MAKE THIS A SHARED COMPONENT ART CRAFT -const regEx = - /^(([^<>()[\].,;:\s@"]+(.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; +// import "@fortawesome/fontawesome-svg-core/styles.css"; -// TODO(bt,2025-04-19): Make these configurable -const ENV = { - BASE_API: "https://api.storyteller.ai", - GOOGLE_API: "https://studio.storyteller.ai", - FUNNEL_API: "https://studio.storyteller.ai", - CDN_API: "https://cdn-2.fakeyou.com", - GRAVATAR_API: "https://studio.storyteller.ai", - DEPLOY_PRIME_URL: "https://studio.storyteller.ai", -}; +// import { config } from "@fortawesome/fontawesome-svg-core"; -export default function SignUpScreen() { - useSignals(); - const navigate = useNavigate(); - const formRef = useRef(null); - const [usernameError, setUsernameError] = useState(""); - const [emailError, setEmailError] = useState(""); - const [passwordError, setPasswordError] = useState(""); - const [passwordConfirmationError, setPasswordConfirmationError] = - useState(""); - const [searchParams] = useSearchParams(); - const { status: authStatus } = authentication; +// config.autoAddCss = false; /* eslint-disable import/first */ +// // TODO MAKE THIS A SHARED COMPONENT ART CRAFT +// const regEx = +// /^(([^<>()[\].,;:\s@"]+(.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; - const handleOnSubmit = (ev: FormEvent) => { - ev.preventDefault(); - if (formRef.current) { - const form = new FormData(formRef.current); - const email = form.get("email")?.toString(); - const password = form.get("password")?.toString(); - const passwordConfirmation = form - .get("password-confirmation") - ?.toString(); - const username = form.get("username")?.toString(); - setUsernameError(""); - if (!username || username.length < 6) { - setUsernameError("Username must be at least 6 characters long"); - } - setEmailError(""); - if (!email || !email.match(regEx)) { - setEmailError("Email must be a valid email address"); - } - setPasswordError(""); - if (!password || password.length < 8) { - setPasswordError("Password must be at least 8 characters long"); - } - setPasswordConfirmationError(""); - if (!passwordError && passwordConfirmation !== password) { - setPasswordConfirmationError("Passwords do not match"); - } +// // TODO(bt,2025-04-19): Make these configurable +// const ENV = { +// BASE_API: "https://api.storyteller.ai", +// GOOGLE_API: "https://studio.storyteller.ai", +// FUNNEL_API: "https://studio.storyteller.ai", +// CDN_API: "https://cdn-2.fakeyou.com", +// GRAVATAR_API: "https://studio.storyteller.ai", +// DEPLOY_PRIME_URL: "https://studio.storyteller.ai", +// }; - if ( - !usernameError && - !passwordError && - !emailError && - !passwordConfirmationError && - signUp - ) { - signUp({ - username: username!, - email: email!, - password: password!, - passwordConfirmation: passwordConfirmation!, - }).then((error) => { - console.log("Error occured", error); - if (error) { - addToast(ToastTypes.ERROR, error); - } - }); - } - } - }; // end handleOnSubmit +// export default function SignUpScreen() { +// useSignals(); +// const navigate = useNavigate(); +// const formRef = useRef(null); +// const [usernameError, setUsernameError] = useState(""); +// const [emailError, setEmailError] = useState(""); +// const [passwordError, setPasswordError] = useState(""); +// const [passwordConfirmationError, setPasswordConfirmationError] = +// useState(""); +// const [searchParams] = useSearchParams(); +// const { status: authStatus } = authentication; - useSignalEffect(() => { - const redirectPath = searchParams.get("redirect"); - if (authStatus.value === AUTH_STATUS.LOGGED_IN) { - navigate(redirectPath ? redirectPath : "/"); - return; - } - if (authStatus.value === AUTH_STATUS.NO_ACCESS) { - window.open("https://storyteller.ai/", "_self"); - return; - } - }); +// const handleOnSubmit = (ev: FormEvent) => { +// ev.preventDefault(); +// if (formRef.current) { +// const form = new FormData(formRef.current); +// const email = form.get("email")?.toString(); +// const password = form.get("password")?.toString(); +// const passwordConfirmation = form +// .get("password-confirmation") +// ?.toString(); +// const username = form.get("username")?.toString(); +// setUsernameError(""); +// if (!username || username.length < 6) { +// setUsernameError("Username must be at least 6 characters long"); +// } +// setEmailError(""); +// if (!email || !email.match(regEx)) { +// setEmailError("Email must be a valid email address"); +// } +// setPasswordError(""); +// if (!password || password.length < 8) { +// setPasswordError("Password must be at least 8 characters long"); +// } +// setPasswordConfirmationError(""); +// if (!passwordError && passwordConfirmation !== password) { +// setPasswordConfirmationError("Passwords do not match"); +// } - return ( -
-
- ArtCraft Logo -
-
-
-

Sign up

-
- - - - - -
-
-
-
-

Already have an account?

- - Log in - -
-
-
-
- ); -} +// if ( +// !usernameError && +// !passwordError && +// !emailError && +// !passwordConfirmationError && +// signUp +// ) { +// signUp({ +// username: username!, +// email: email!, +// password: password!, +// passwordConfirmation: passwordConfirmation!, +// }).then((error) => { +// console.log("Error occured", error); +// if (error) { +// addToast(ToastTypes.ERROR, error); +// } +// }); +// } +// } +// }; // end handleOnSubmit -// TODO: Replace environment variables from `root.tsx` -createRoot(document.getElementById("root")!).render( - <> - - - - - - - , -); +// useSignalEffect(() => { +// const redirectPath = searchParams.get("redirect"); +// if (authStatus.value === AUTH_STATUS.LOGGED_IN) { +// navigate(redirectPath ? redirectPath : "/"); +// return; +// } +// if (authStatus.value === AUTH_STATUS.NO_ACCESS) { +// window.open("https://storyteller.ai/", "_self"); +// return; +// } +// }); + +// return ( +//
+//
+// ArtCraft Logo +//
+//
+//
+//

Sign up

+//
+// +// +// +// +// +//
+//
+//
+//
+//

Already have an account?

+// +// Log in +// +//
+//
+//
+//
+// ); +// } + +// // TODO: Replace environment variables from `root.tsx` +// createRoot(document.getElementById("root")!).render( +// <> +// +// + +// +// +// +// , +// ); diff --git a/frontend/apps/editor2d/src/components/shared_authentication/signup.tsx b/frontend/apps/editor2d/src/components/shared_authentication/signup.tsx index 37a4aae073..52b6bfa435 100644 --- a/frontend/apps/editor2d/src/components/shared_authentication/signup.tsx +++ b/frontend/apps/editor2d/src/components/shared_authentication/signup.tsx @@ -1,188 +1,193 @@ -import { faEnvelope, faKey, faUser } from "@fortawesome/pro-solid-svg-icons"; -import { GlobalSettingsManager } from "./pages/PageEnigma/GlobalSettingsManager"; -import { Button, Input } from "~/components"; -import { addToast, authentication, signUp } from "~/signals"; -import { FormEvent, useRef, useState, StrictMode } from "react"; -import { AUTH_STATUS, ToastTypes } from "~/enums"; -import { useSignalEffect, useSignals } from "@preact/signals-react/runtime"; -import { useNavigate, useSearchParams, BrowserRouter } from "react-router-dom"; -import { createRoot } from "react-dom/client"; +// import { faEnvelope, faKey, faUser } from "@fortawesome/pro-solid-svg-icons"; +// // import { GlobalSettingsManager } from "./pages/PageEnigma/GlobalSettingsManager"; -import "./styles/normalize.css"; -import "./styles/tailwind.css"; -import "./styles/base.css"; -import "@fortawesome/fontawesome-svg-core/styles.css"; +// import { Button } from "@storyteller/ui-button"; +// import { Input } from "@storyteller/ui-input"; +// import { Toaster } from "@storyteller/ui-toaster"; -import { config } from "@fortawesome/fontawesome-svg-core"; +// // import { authentication, signUp } from "~/signals"; +// import { FormEvent, useRef, useState, StrictMode } from "react"; +// // import { AUTH_STATUS, ToastTypes } from "~/enums"; +// import { useSignalEffect, useSignals } from "@preact/signals-react/runtime"; +// import { useNavigate, useSearchParams, BrowserRouter } from "react-router-dom"; +// import { createRoot } from "react-dom/client"; -config.autoAddCss = false; /* eslint-disable import/first */ -// TODO MAKE THIS A SHARED COMPONENT ART CRAFT -const regEx = - /^(([^<>()[\].,;:\s@"]+(.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; +// // import "./styles/normalize.css"; +// // import "./styles/tailwind.css"; +// // import "./styles/base.css"; -// TODO(bt,2025-04-19): Make these configurable -const ENV = { - BASE_API: "https://api.storyteller.ai", - GOOGLE_API: "https://studio.storyteller.ai", - FUNNEL_API: "https://studio.storyteller.ai", - CDN_API: "https://cdn-2.fakeyou.com", - GRAVATAR_API: "https://studio.storyteller.ai", - DEPLOY_PRIME_URL: "https://studio.storyteller.ai", -}; +// import "@fortawesome/fontawesome-svg-core/styles.css"; -export default function SignUpScreen() { - useSignals(); - const navigate = useNavigate(); - const formRef = useRef(null); - const [usernameError, setUsernameError] = useState(""); - const [emailError, setEmailError] = useState(""); - const [passwordError, setPasswordError] = useState(""); - const [passwordConfirmationError, setPasswordConfirmationError] = - useState(""); - const [searchParams] = useSearchParams(); - const { status: authStatus } = authentication; +// import { config } from "@fortawesome/fontawesome-svg-core"; - const handleOnSubmit = (ev: FormEvent) => { - ev.preventDefault(); - if (formRef.current) { - const form = new FormData(formRef.current); - const email = form.get("email")?.toString(); - const password = form.get("password")?.toString(); - const passwordConfirmation = form - .get("password-confirmation") - ?.toString(); - const username = form.get("username")?.toString(); - setUsernameError(""); - if (!username || username.length < 6) { - setUsernameError("Username must be at least 6 characters long"); - } - setEmailError(""); - if (!email || !email.match(regEx)) { - setEmailError("Email must be a valid email address"); - } - setPasswordError(""); - if (!password || password.length < 8) { - setPasswordError("Password must be at least 8 characters long"); - } - setPasswordConfirmationError(""); - if (!passwordError && passwordConfirmation !== password) { - setPasswordConfirmationError("Passwords do not match"); - } +// config.autoAddCss = false; /* eslint-disable import/first */ +// // TODO MAKE THIS A SHARED COMPONENT ART CRAFT +// const regEx = +// /^(([^<>()[\].,;:\s@"]+(.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; - if ( - !usernameError && - !passwordError && - !emailError && - !passwordConfirmationError && - signUp - ) { - signUp({ - username: username!, - email: email!, - password: password!, - passwordConfirmation: passwordConfirmation!, - }).then((error) => { - console.log("Error occured", error); - if (error) { - addToast(ToastTypes.ERROR, error); - } - }); - } - } - }; // end handleOnSubmit +// // TODO(bt,2025-04-19): Make these configurable +// const ENV = { +// BASE_API: "https://api.storyteller.ai", +// GOOGLE_API: "https://studio.storyteller.ai", +// FUNNEL_API: "https://studio.storyteller.ai", +// CDN_API: "https://cdn-2.fakeyou.com", +// GRAVATAR_API: "https://studio.storyteller.ai", +// DEPLOY_PRIME_URL: "https://studio.storyteller.ai", +// }; - useSignalEffect(() => { - const redirectPath = searchParams.get("redirect"); - if (authStatus.value === AUTH_STATUS.LOGGED_IN) { - navigate(redirectPath ? redirectPath : "/"); - return; - } - if (authStatus.value === AUTH_STATUS.NO_ACCESS) { - window.open("https://storyteller.ai/", "_self"); - return; - } - }); +// export default function SignUpScreen() { +// useSignals(); +// const navigate = useNavigate(); +// const formRef = useRef(null); +// const [usernameError, setUsernameError] = useState(""); +// const [emailError, setEmailError] = useState(""); +// const [passwordError, setPasswordError] = useState(""); +// const [passwordConfirmationError, setPasswordConfirmationError] = +// useState(""); +// const [searchParams] = useSearchParams(); +// // const { status: authStatus } = authentication; - return ( -
-
- ArtCraft Logo -
-
-
-

Sign up

-
- - - - - -
-
-
-
-

Already have an account?

- - Log in - -
-
-
-
- ); -} +// const handleOnSubmit = (ev: FormEvent) => { +// ev.preventDefault(); +// if (formRef.current) { +// const form = new FormData(formRef.current); +// const email = form.get("email")?.toString(); +// const password = form.get("password")?.toString(); +// const passwordConfirmation = form +// .get("password-confirmation") +// ?.toString(); +// const username = form.get("username")?.toString(); +// setUsernameError(""); +// if (!username || username.length < 6) { +// setUsernameError("Username must be at least 6 characters long"); +// } +// setEmailError(""); +// if (!email || !email.match(regEx)) { +// setEmailError("Email must be a valid email address"); +// } +// setPasswordError(""); +// if (!password || password.length < 8) { +// setPasswordError("Password must be at least 8 characters long"); +// } +// setPasswordConfirmationError(""); +// if (!passwordError && passwordConfirmation !== password) { +// setPasswordConfirmationError("Passwords do not match"); +// } -// TODO: Replace environment variables from `root.tsx` -createRoot(document.getElementById("root")!).render( - <> - - - - - - - , -); +// if ( +// !usernameError && +// !passwordError && +// !emailError && +// !passwordConfirmationError && +// signUp +// ) { +// signUp({ +// username: username!, +// email: email!, +// password: password!, +// passwordConfirmation: passwordConfirmation!, +// }).then((error) => { +// console.log("Error occured", error); +// if (error) { +// Toaster.toast(ToastTypes.ERROR, error); +// } +// }); +// } +// } +// }; // end handleOnSubmit + +// useSignalEffect(() => { +// const redirectPath = searchParams.get("redirect"); +// if (authStatus.value === AUTH_STATUS.LOGGED_IN) { +// navigate(redirectPath ? redirectPath : "/"); +// return; +// } +// if (authStatus.value === AUTH_STATUS.NO_ACCESS) { +// window.open("https://storyteller.ai/", "_self"); +// return; +// } +// }); + +// return ( +//
+//
+// ArtCraft Logo +//
+//
+//
+//

Sign up

+//
+// +// +// +// +// +//
+//
+//
+//
+//

Already have an account?

+// +// Log in +// +//
+//
+//
+//
+// ); +// } + +// // TODO: Replace environment variables from `root.tsx` +// createRoot(document.getElementById("root")!).render( +// <> +// +// +// {/* */} +// +// +// +// , +// ); diff --git a/frontend/apps/editor2d/tsconfig.app.json b/frontend/apps/editor2d/tsconfig.app.json index 0ad9c59eb7..031bec6b5d 100644 --- a/frontend/apps/editor2d/tsconfig.app.json +++ b/frontend/apps/editor2d/tsconfig.app.json @@ -28,6 +28,12 @@ "src" ], "references": [ + { + "path": "../../libs/components/toaster/tsconfig.lib.json" + }, + { + "path": "../../libs/components/input/tsconfig.lib.json" + }, { "path": "../../libs/components/settings-modal/tsconfig.lib.json" }, diff --git a/frontend/apps/editor2d/tsconfig.json b/frontend/apps/editor2d/tsconfig.json index 04e53ea42f..5f9e4230d8 100644 --- a/frontend/apps/editor2d/tsconfig.json +++ b/frontend/apps/editor2d/tsconfig.json @@ -1,6 +1,12 @@ { "files": [], "references": [ + { + "path": "../../libs/components/toaster" + }, + { + "path": "../../libs/components/input" + }, { "path": "../../libs/components/settings-modal" },