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) {
+
+
+
+
+ Hey 👋
+
+
+
+
+
+
+
+
+
+
+}
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 👋
+
+
+
+
+
+
+
+
+
+ >
+ ) : 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 👋
+
+
+
+
+
+
+
+
+
+ >
+ ) : 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 👋
+
+
+
+
+
+
+
+
+
+ >
+ ) : 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 = `
+
+
+
+ Hey 👋
+
+
+
+
+
+
+
+
+
+ `;
+};
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)}