diff --git a/e2e/__screenshots__/nextjs-example/production/example.spec.ts/login-current-mode.png b/e2e/__screenshots__/nextjs-example/production/example.spec.ts/login-current-mode.png index 3a82b62..d8d96c4 100644 Binary files a/e2e/__screenshots__/nextjs-example/production/example.spec.ts/login-current-mode.png and b/e2e/__screenshots__/nextjs-example/production/example.spec.ts/login-current-mode.png differ diff --git a/e2e/__screenshots__/nextjs-example/production/example.spec.ts/logout-current-mode.png b/e2e/__screenshots__/nextjs-example/production/example.spec.ts/logout-current-mode.png index 3a82b62..d8d96c4 100644 Binary files a/e2e/__screenshots__/nextjs-example/production/example.spec.ts/logout-current-mode.png and b/e2e/__screenshots__/nextjs-example/production/example.spec.ts/logout-current-mode.png differ diff --git a/templates/angular-example/src/app/components/login-with-google/login-with-google.component.html b/templates/angular-example/src/app/components/login-with-google/login-with-google.component.html new file mode 100644 index 0000000..2ffadfa --- /dev/null +++ b/templates/angular-example/src/app/components/login-with-google/login-with-google.component.html @@ -0,0 +1,73 @@ +Continue with Google + +@if (showModal) { + + + +} diff --git a/templates/angular-example/src/app/components/login-with-google/login-with-google.component.ts b/templates/angular-example/src/app/components/login-with-google/login-with-google.component.ts new file mode 100644 index 0000000..4cf6b30 --- /dev/null +++ b/templates/angular-example/src/app/components/login-with-google/login-with-google.component.ts @@ -0,0 +1,25 @@ +import { Component, signal } from '@angular/core'; +import { signIn } from '@junobuild/core'; +import { ButtonComponent } from '../button/button.component'; +import { BackdropComponent } from '../backdrop/backdrop.component'; + +@Component({ + selector: 'app-login-with-google', + imports: [ButtonComponent, BackdropComponent], + templateUrl: './login-with-google.component.html', +}) +export class LoginComponentWithGoogle { + #showModal = signal(false); + + get showModal(): boolean { + return this.#showModal(); + } + + start() { + this.#showModal.set(true); + } + + close() { + this.#showModal.set(false); + } +} diff --git a/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.html b/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.html new file mode 100644 index 0000000..8716297 --- /dev/null +++ b/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.html @@ -0,0 +1,3 @@ +Continue with Internet Identity diff --git a/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.ts b/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.ts new file mode 100644 index 0000000..e8bc709 --- /dev/null +++ b/templates/angular-example/src/app/components/login-with-ii/login-with-ii.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; +import { signIn } from '@junobuild/core'; +import { ButtonComponent } from '../button/button.component'; + +@Component({ + selector: 'app-login-with-ii', + imports: [ButtonComponent], + templateUrl: './login-with-ii.component.html', +}) +export class LoginComponentWithII { + readonly signIn = signIn; +} diff --git a/templates/angular-example/src/app/components/login/login.component.html b/templates/angular-example/src/app/components/login/login.component.html index 3ebc919..ff7aa9b 100644 --- a/templates/angular-example/src/app/components/login/login.component.html +++ b/templates/angular-example/src/app/components/login/login.component.html @@ -1,7 +1,7 @@
+ + - Continue with Internet Identity +
diff --git a/templates/angular-example/src/app/components/login/login.component.ts b/templates/angular-example/src/app/components/login/login.component.ts index c291b42..3a72e56 100644 --- a/templates/angular-example/src/app/components/login/login.component.ts +++ b/templates/angular-example/src/app/components/login/login.component.ts @@ -1,13 +1,11 @@ import { Component } from '@angular/core'; -import { signIn } from '@junobuild/core'; -import { ButtonComponent } from '../button/button.component'; import { PasskeyComponent } from '../passkey/passkey/passkey.component'; +import { LoginComponentWithII } from '../login-with-ii/login-with-ii.component'; +import { LoginComponentWithGoogle } from '../login-with-google/login-with-google.component'; @Component({ selector: 'app-login', - imports: [ButtonComponent, PasskeyComponent], + imports: [LoginComponentWithII, PasskeyComponent, LoginComponentWithGoogle], templateUrl: './login.component.html', }) -export class LoginComponent { - readonly signIn = signIn; -} +export class LoginComponent {} diff --git a/templates/nextjs-example/src/components/auth.tsx b/templates/nextjs-example/src/components/auth.tsx index d0ff02b..70f3178 100644 --- a/templates/nextjs-example/src/components/auth.tsx +++ b/templates/nextjs-example/src/components/auth.tsx @@ -1,8 +1,9 @@ -import { Login } from "@/components/login"; +import { LoginWithII } from "@/components/login-with-ii"; import { Logout } from "@/components/logout"; import { onAuthStateChange, type User } from "@junobuild/core"; import { createContext, useEffect, useState, type ReactNode } from "react"; import { Passkey } from "@/components/passkey/passkey"; +import { LoginWithGoogle } from "@/components/login-with-google"; export const AuthContext = createContext<{ user: User | undefined | null }>({ user: undefined, @@ -35,8 +36,9 @@ export const Auth = ({ children }: AuthProps) => { ) : (
+ - +
)} diff --git a/templates/nextjs-example/src/components/login-with-google.tsx b/templates/nextjs-example/src/components/login-with-google.tsx new file mode 100644 index 0000000..c4644a5 --- /dev/null +++ b/templates/nextjs-example/src/components/login-with-google.tsx @@ -0,0 +1,94 @@ +import { Button } from "@/components/button"; +import { Backdrop } from "@/components/backdrop"; +import { useState } from "react"; + +export const LoginWithGoogle = () => { + const [showModal, setShowModal] = useState(false); + + const start = () => { + setShowModal(true); + }; + + const close = () => { + setShowModal(false); + }; + + return ( + <> + + + {showModal ? ( + <> +
+
+
+

+ Hey 👋 +

+ + +
+ +
+

+ You can sign in with Google... but it requires a little setup + 😉 +

+ +

+ Check out the{" "} + + Juno authentication docs{" "} + + + + +

+
+
+
+ + + ) : null} + + ); +}; diff --git a/templates/nextjs-example/src/components/login.tsx b/templates/nextjs-example/src/components/login-with-ii.tsx similarity index 88% rename from templates/nextjs-example/src/components/login.tsx rename to templates/nextjs-example/src/components/login-with-ii.tsx index 7d447ed..834d835 100644 --- a/templates/nextjs-example/src/components/login.tsx +++ b/templates/nextjs-example/src/components/login-with-ii.tsx @@ -1,7 +1,7 @@ import { Button } from "@/components/button"; import { signIn } from "@junobuild/core"; -export const Login = () => { +export const LoginWithII = () => { const signWithII = async () => { await signIn({ internet_identity: {}, diff --git a/templates/react-example/src/components/Auth.jsx b/templates/react-example/src/components/Auth.jsx index 322e776..ab43666 100644 --- a/templates/react-example/src/components/Auth.jsx +++ b/templates/react-example/src/components/Auth.jsx @@ -1,9 +1,10 @@ import { onAuthStateChange } from "@junobuild/core"; import PropTypes from "prop-types"; import { createContext, useEffect, useState } from "react"; -import { Login } from "./Login"; +import { LoginWithII } from "./LoginWithII.jsx"; import { Logout } from "./Logout"; import { Passkey } from "./passkey/Passkey"; +import { LoginWithGoogle } from "./LoginWithGoogle.jsx"; export const AuthContext = createContext(); @@ -26,8 +27,9 @@ export const Auth = ({ children }) => { ) : (
+ - +
)} diff --git a/templates/react-example/src/components/LoginWithGoogle.jsx b/templates/react-example/src/components/LoginWithGoogle.jsx new file mode 100644 index 0000000..380c893 --- /dev/null +++ b/templates/react-example/src/components/LoginWithGoogle.jsx @@ -0,0 +1,96 @@ +import { Button } from "./Button.jsx"; +import { useState } from "react"; +import { CreatePasskey } from "./passkey/CreatePasskey.jsx"; +import { UsePasskey } from "./passkey/UsePasskey.jsx"; +import { Backdrop } from "./Backdrop.jsx"; + +export const LoginWithGoogle = () => { + const [showModal, setShowModal] = useState(false); + + const start = () => { + setShowModal(true); + }; + + const close = () => { + setShowModal(false); + }; + + return ( + <> + + + {showModal ? ( + <> +
+
+
+

+ Hey 👋 +

+ + +
+ +
+

+ You can sign in with Google... but it requires a little setup + 😉 +

+ +

+ Check out the{" "} + + Juno authentication docs{" "} + + + + +

+
+
+
+ + + ) : null} + + ); +}; diff --git a/templates/react-example/src/components/Login.jsx b/templates/react-example/src/components/LoginWithII.jsx similarity index 88% rename from templates/react-example/src/components/Login.jsx rename to templates/react-example/src/components/LoginWithII.jsx index 53e9e96..8ee652d 100644 --- a/templates/react-example/src/components/Login.jsx +++ b/templates/react-example/src/components/LoginWithII.jsx @@ -1,7 +1,7 @@ import { signIn } from "@junobuild/core"; import { Button } from "./Button"; -export const Login = () => { +export const LoginWithII = () => { const signWithII = async () => { await signIn({ internet_identity: {}, diff --git a/templates/react-ts-example/src/components/Auth.tsx b/templates/react-ts-example/src/components/Auth.tsx index ea14a4c..ebcacd9 100644 --- a/templates/react-ts-example/src/components/Auth.tsx +++ b/templates/react-ts-example/src/components/Auth.tsx @@ -6,9 +6,10 @@ import { useEffect, useState, } from "react"; -import { Login } from "./Login"; +import { LoginWitII } from "./LoginWitII.tsx"; import { Logout } from "./Logout"; import { Passkey } from "./passkey/Passkey.tsx"; +import { LoginWithGoogle } from "./LoginWithGoogle.tsx"; export const AuthContext = createContext<{ user: User | null }>({ user: null }); @@ -32,8 +33,9 @@ export const Auth: FC = (props) => { ) : (
+ - +
)} diff --git a/templates/react-ts-example/src/components/Login.tsx b/templates/react-ts-example/src/components/LoginWitII.tsx similarity index 88% rename from templates/react-ts-example/src/components/Login.tsx rename to templates/react-ts-example/src/components/LoginWitII.tsx index d517442..17161de 100644 --- a/templates/react-ts-example/src/components/Login.tsx +++ b/templates/react-ts-example/src/components/LoginWitII.tsx @@ -2,7 +2,7 @@ import { signIn } from "@junobuild/core"; import { FC } from "react"; import { Button } from "./Button"; -export const Login: FC = () => { +export const LoginWitII: FC = () => { const signWithII = async () => { await signIn({ internet_identity: {}, diff --git a/templates/react-ts-example/src/components/LoginWithGoogle.tsx b/templates/react-ts-example/src/components/LoginWithGoogle.tsx new file mode 100644 index 0000000..07e5fb2 --- /dev/null +++ b/templates/react-ts-example/src/components/LoginWithGoogle.tsx @@ -0,0 +1,94 @@ +import { FC, useState } from "react"; +import { Button } from "./Button"; +import { Backdrop } from "./Backdrop"; + +export const LoginWithGoogle: FC = () => { + const [showModal, setShowModal] = useState(false); + + const start = () => { + setShowModal(true); + }; + + const close = () => { + setShowModal(false); + }; + + return ( + <> + + + {showModal ? ( + <> +
+
+
+

+ Hey 👋 +

+ + +
+ +
+

+ You can sign in with Google... but it requires a little setup + 😉 +

+ +

+ Check out the{" "} + + Juno authentication docs{" "} + + + + +

+
+
+
+ + + ) : null} + + ); +}; diff --git a/templates/sveltekit-example/src/lib/components/Auth.svelte b/templates/sveltekit-example/src/lib/components/Auth.svelte index e172e4e..96a9e63 100644 --- a/templates/sveltekit-example/src/lib/components/Auth.svelte +++ b/templates/sveltekit-example/src/lib/components/Auth.svelte @@ -4,8 +4,9 @@ import { userStore } from '$lib/stores/user.store'; import { userSignedIn } from '$lib/derived/user.derived'; import Logout from '$lib/components/Logout.svelte'; - import Login from '$lib/components/Login.svelte'; + import LoginWithII from '$lib/components/LoginWithII.svelte'; import Passkey from '$lib/components/passkey/Passkey.svelte'; + import LoginWithGoogle from '$lib/components/LoginWithGoogle.svelte'; interface Props { children: Snippet; @@ -32,8 +33,10 @@ {:else}
+ + - +
{/if} diff --git a/templates/sveltekit-example/src/lib/components/LoginWithGoogle.svelte b/templates/sveltekit-example/src/lib/components/LoginWithGoogle.svelte new file mode 100644 index 0000000..194c202 --- /dev/null +++ b/templates/sveltekit-example/src/lib/components/LoginWithGoogle.svelte @@ -0,0 +1,82 @@ + + + + +{#if showModal} + + + +{/if} diff --git a/templates/sveltekit-example/src/lib/components/Login.svelte b/templates/sveltekit-example/src/lib/components/LoginWithII.svelte similarity index 100% rename from templates/sveltekit-example/src/lib/components/Login.svelte rename to templates/sveltekit-example/src/lib/components/LoginWithII.svelte diff --git a/templates/vanilla-js-example/src/components/login-with-google.js b/templates/vanilla-js-example/src/components/login-with-google.js new file mode 100644 index 0000000..88dc16c --- /dev/null +++ b/templates/vanilla-js-example/src/components/login-with-google.js @@ -0,0 +1,91 @@ +import { addEventClick } from "../utils/utils.js"; + +export const renderLoginWithGoogle = (app) => { + addEventClick({ + target: app, + selector: "#loginWithGoogle", + fn: showModal, + }); + + return ` + +
+`; +}; + +const closeModal = (modal) => (modal.innerHTML = ""); + +const showModal = () => { + const modal = document.querySelector("#wizard"); + + addEventClick({ + target: modal, + selector: "#closeModal", + fn: () => closeModal(modal), + }); + + modal.innerHTML = ` + +
`; +}; diff --git a/templates/vanilla-js-example/src/components/login.js b/templates/vanilla-js-example/src/components/login-with-ii.js similarity index 87% rename from templates/vanilla-js-example/src/components/login.js rename to templates/vanilla-js-example/src/components/login-with-ii.js index 3c7ee5d..1bffdeb 100644 --- a/templates/vanilla-js-example/src/components/login.js +++ b/templates/vanilla-js-example/src/components/login-with-ii.js @@ -1,8 +1,9 @@ import { signIn } from "@junobuild/core"; import { addEventClick } from "../utils/utils"; import { renderPasskey } from "./passkey.js"; +import { renderLoginWithGoogle } from "./login-with-google.js"; -export const renderLogin = (app) => { +export const renderLoginWithII = (app) => { const signInWithII = async () => { await signIn({ internet_identity: {}, @@ -16,6 +17,8 @@ export const renderLogin = (app) => { }); app.innerHTML = `
+ ${renderLoginWithGoogle(app)} + ${renderPasskey(app)}