From eb6099b80bf9960674e4ea60f97ef16642e4ea64 Mon Sep 17 00:00:00 2001 From: Alano Terblanche <18033717+Benehiko@users.noreply.github.com> Date: Tue, 27 Sep 2022 14:14:50 +0200 Subject: [PATCH] fix: css and styling (#8) * fix: codebox styling * fix: width of codebox code * feat: add image heading to card * fix: button social text centering * fix: conditional settings rendering * feat: auth card heading image * chore: cleanup * style: format * fix: button social text centering * fix: error messages * style: format --- src/react-components/button-social.tsx | 13 +- src/react-components/card.tsx | 16 +- .../ory/helpers/error-messages.tsx | 22 +- .../ory/sections/link-section.tsx | 1 + .../ory/sections/login-section.tsx | 6 +- .../ory/sections/lookup-secrets-section.tsx | 1 + .../ory/sections/oidc-section.tsx | 6 +- .../ory/sections/registration-section.tsx | 6 +- .../ory/user-auth-card.spec.tsx | 1 - src/react-components/ory/user-auth-card.tsx | 25 +- .../ory/user-settings-card.tsx | 63 +++- src/stories/Card.stories.tsx | 10 +- src/stories/Ory/Auth.stories.tsx | 18 + src/stories/Ory/AuthSettings.stories.tsx | 57 ++++ src/stories/Ory/login-flow-ui-error.json | 122 +++++++ src/stories/Ory/settings-flow.json | 308 ++++++++++++++++++ src/stories/assets/fork.png | Bin 3433 -> 0 bytes src/stories/assets/gear.png | Bin 1455 -> 0 bytes src/stories/assets/logo.png | Bin 12287 -> 0 bytes src/stories/assets/logo.svg | 8 + src/stories/assets/ory.png | Bin 3011 -> 0 bytes src/stories/assets/repo-forked.png | Bin 847 -> 0 bytes src/stories/assets/sign-out.png | Bin 733 -> 0 bytes src/theme/button-social.css.ts | 31 +- src/theme/card.css.ts | 7 + tests/preact-spa/src/login.tsx | 1 - tests/react-spa/src/App.tsx | 1 - tests/react-spa/src/Login.tsx | 1 - 28 files changed, 664 insertions(+), 60 deletions(-) create mode 100644 src/stories/Ory/AuthSettings.stories.tsx create mode 100644 src/stories/Ory/login-flow-ui-error.json create mode 100644 src/stories/Ory/settings-flow.json delete mode 100644 src/stories/assets/fork.png delete mode 100644 src/stories/assets/gear.png delete mode 100644 src/stories/assets/logo.png create mode 100644 src/stories/assets/logo.svg delete mode 100644 src/stories/assets/ory.png delete mode 100644 src/stories/assets/repo-forked.png delete mode 100644 src/stories/assets/sign-out.png diff --git a/src/react-components/button-social.tsx b/src/react-components/button-social.tsx index 2dfd9a3b4..99ddb29ca 100644 --- a/src/react-components/button-social.tsx +++ b/src/react-components/button-social.tsx @@ -1,9 +1,9 @@ import React from "react" import { - buttonSocialIconStyle, + buttonSocialIconEndStyle, + buttonSocialIconStartStyle, ButtonSocialStyle, buttonSocialStyle, - buttonSocialTitleStyle, } from "../theme/button-social.css" import cn from "classnames" @@ -42,8 +42,13 @@ export const ButtonSocial = ({ style={{ width: fullWidth ? "100%" : "auto" }} {...props} > - -
{title}
+ + {title} + {/* add another hidden icon to the end to center the text */} + ) diff --git a/src/react-components/card.tsx b/src/react-components/card.tsx index fa1e368d8..515a833b6 100644 --- a/src/react-components/card.tsx +++ b/src/react-components/card.tsx @@ -1,16 +1,18 @@ import React from "react" -import { cardStyle, cardTitleStyle, gridStyle } from "../theme" +import { cardStyle, cardTitleImage, cardTitleStyle, gridStyle } from "../theme" import { typographyStyle } from "../theme" import cn from "classnames" export interface CardProps extends React.HTMLAttributes { heading: string | React.ReactNode + image?: string | React.ReactNode className?: string children?: React.ReactNode } export const Card = ({ heading, + image, className, children, ...props @@ -24,6 +26,18 @@ export const Card = ({ {...props} >
+
+ {typeof image === "string" ? ( + {`${heading}-image`} + ) : ( + image + )} +
{typeof heading === "string" ? (

diff --git a/src/react-components/ory/helpers/error-messages.tsx b/src/react-components/ory/helpers/error-messages.tsx index daaca1500..3308cbdd3 100644 --- a/src/react-components/ory/helpers/error-messages.tsx +++ b/src/react-components/ory/helpers/error-messages.tsx @@ -4,7 +4,7 @@ import { gridStyle } from "../../../theme" import { Message } from "../../message" export type NodeMessagesProps = { - nodes: UiNode[] + nodes?: UiNode[] uiMessages?: Array } @@ -26,18 +26,24 @@ export const NodeMessages = ({ nodes, uiMessages, }: NodeMessagesProps): JSX.Element | null => { - const $groupMessages = nodes.reduce((groups, { messages }) => { - groups.concat( - messages.map(({ text, id }) => nodeMessage({ text, id, key: id })), - ) - return groups - }, []) + const $groupMessages = nodes?.reduce( + (groups, { messages }) => { + groups = groups.concat( + messages.map(({ text, id }) => nodeMessage({ text, id, key: id })), + ) + return groups + }, + [], + ) const $messages = uiMessages?.map(({ text, id }, key) => nodeMessage({ text, id, key }), ) - return ($messages && $messages.length > 0) || $groupMessages.length > 0 ? ( + console.dir({ $groupMessages, $messages }) + + return ($messages && $messages.length > 0) || + ($groupMessages && $groupMessages.length > 0) ? (
{$messages} {$groupMessages} diff --git a/src/react-components/ory/sections/link-section.tsx b/src/react-components/ory/sections/link-section.tsx index 31d1743df..3acc8b292 100644 --- a/src/react-components/ory/sections/link-section.tsx +++ b/src/react-components/ory/sections/link-section.tsx @@ -15,6 +15,7 @@ export const LinkSection = ({ nodes }: LinkSectionProps): JSX.Element => ( nodes={filterNodesByGroups({ nodes: nodes, groups: "link", + withoutDefaultGroup: true, })} />
diff --git a/src/react-components/ory/sections/login-section.tsx b/src/react-components/ory/sections/login-section.tsx index eefa2e15e..85e29ccc2 100644 --- a/src/react-components/ory/sections/login-section.tsx +++ b/src/react-components/ory/sections/login-section.tsx @@ -18,7 +18,11 @@ export const LoginSection = ({ return (
{ return hasOIDC(flow.ui.nodes) ? (
{filterNodesByGroups({ diff --git a/src/react-components/ory/sections/registration-section.tsx b/src/react-components/ory/sections/registration-section.tsx index 0f3fff242..6d5650800 100644 --- a/src/react-components/ory/sections/registration-section.tsx +++ b/src/react-components/ory/sections/registration-section.tsx @@ -16,7 +16,11 @@ export const RegistrationSection = ({ return hasPassword(nodes) ? (
{ await expect(component.locator('a[href="/login"]')).toBeVisible() }) -// TODO: change to 2fa flow fixture test("ory auth card login 2fa flow", async ({ mount }) => { const component = await mount( { @@ -170,7 +172,7 @@ export const UserAuthCard = ({ .map((flow, index) => index > 0 ? ( <> - {flow} + {flow} ) : ( flow @@ -246,19 +248,16 @@ export const UserAuthCard = ({ {title}

} + image={cardImage} >
- {flow.ui.messages && - flow.ui.messages.length > 0 && - flow.ui.messages.map((m) => ( - - {m.text} - - ))} + {$oidc && ( <> @@ -292,7 +291,7 @@ export const UserAuthCard = ({ {canShowPasswordless() && ( <> - + break case "password": - cardTitle = title || "Change Password" - $flow = + if (hasPassword(flow.ui.nodes)) { + hasFlow = true + cardTitle = title || "Change Password" + $flow = + } break case "webauthn": - cardTitle = title || "Manage Hardware Tokens" - $flow = + if (hasWebauthn(flow.ui.nodes)) { + hasFlow = true + cardTitle = title || "Manage Hardware Tokens" + $flow = + } break case "lookupSecret": - cardTitle = title || "Manage 2FA Backup Recovery Codes" - $flow = + if (hasLookupSecret(flow.ui.nodes)) { + hasFlow = true + cardTitle = title || "Manage 2FA Backup Recovery Codes" + $flow = + } break case "oidc": - cardTitle = title || "Social Sign In" - $flow = + if (hasOIDC(flow.ui.nodes)) { + hasFlow = true + cardTitle = title || "Social Sign In" + $flow = + } break case "totp": - cardTitle = title || "Manage 2FA TOTP Authenticator App" - $flow = + if (hasTotp(flow.ui.nodes)) { + hasFlow = true + cardTitle = title || "Manage 2FA TOTP Authenticator App" + $flow = + } break default: $flow = null } - return $flow ? ( + return hasFlow ? (
{cardTitle && ( - +

{cardTitle} - +

)} {$flow} diff --git a/src/stories/Card.stories.tsx b/src/stories/Card.stories.tsx index 52e3a3606..564d2a8a8 100644 --- a/src/stories/Card.stories.tsx +++ b/src/stories/Card.stories.tsx @@ -2,6 +2,7 @@ import React from "react" import { Story, ComponentMeta } from "@storybook/react" import { Container } from "./storyhelper" import { Card, CardProps, Message } from "../react-components" +import logo from "./assets/logo.svg" export default { title: "Component/Card", @@ -17,6 +18,13 @@ const Template: Story = (args: CardProps) => ( export const NormalCard = Template.bind({}) NormalCard.args = { - header: "Normal Title", + heading: "Normal Title", children: This is an error message., } + +export const LogoHeadingCard = Template.bind({}) + +LogoHeadingCard.args = { + heading: "Logo Heading", + image: logo, +} diff --git a/src/stories/Ory/Auth.stories.tsx b/src/stories/Ory/Auth.stories.tsx index c3046bb71..a89320d93 100644 --- a/src/stories/Ory/Auth.stories.tsx +++ b/src/stories/Ory/Auth.stories.tsx @@ -11,6 +11,7 @@ import { import loginFlow from "./login-flow.json" import loginFlow2FA from "./login-flow-2fa.json" +import loginFlowUiError from "./login-flow-ui-error.json" import loginFlowError from "./login-flow-error.json" import registrationFlow from "./register-flow.json" @@ -20,6 +21,8 @@ import recoveryFlow from "./recovery-flow.json" import verificationFlow from "./verification-flow.json" +import logo from "../assets/logo.svg" + export default { title: "Ory/SelfServiceFlowCard", component: UserAuthCard, @@ -37,6 +40,7 @@ LoginAuthCard.args = { title: "Sign in to your Acme account", flow: loginFlow as SelfServiceLoginFlow, flowType: "login", + cardImage: logo, additionalProps: { signupURL: "https://acme.com/login", forgotPasswordURL: "https://acme.com/forgot-password", @@ -81,11 +85,25 @@ LoginAuthCardError.args = { }, } +export const LoginAuthCardUiError = Template.bind({}) + +LoginAuthCardUiError.args = { + title: "Sign in to your Acme account", + flow: loginFlowUiError as SelfServiceLoginFlow, + flowType: "login", + additionalProps: { + signupURL: "https://acme.com/login", + forgotPasswordURL: "https://acme.com/forgot-password", + logoutURL: "https://acme.com/logout", + }, +} + export const RegistrationAuthCard = Template.bind({}) RegistrationAuthCard.args = { title: "Create an account for Acme", flow: registrationFlow as SelfServiceRegistrationFlow, + cardImage: logo, flowType: "registration", additionalProps: { loginURL: "https://acme.com/login", diff --git a/src/stories/Ory/AuthSettings.stories.tsx b/src/stories/Ory/AuthSettings.stories.tsx new file mode 100644 index 000000000..a3e181c52 --- /dev/null +++ b/src/stories/Ory/AuthSettings.stories.tsx @@ -0,0 +1,57 @@ +import React from "react" +import { ComponentMeta, Story } from "@storybook/react" +import { UserSettingsCard, UserSettingsCardProps } from "../../react-components" +import { Container } from "../storyhelper" + +import settingsFlow from "./settings-flow.json" +import { SelfServiceSettingsFlow } from "@ory/client" + +export default { + title: "Ory/UserSettingsCard", + component: UserSettingsCard, +} as ComponentMeta + +const Template: Story = ( + args: UserSettingsCardProps, +) => ( + +
+ +
+
+) + +export const UserSettingsProfileCard = Template.bind({}) + +UserSettingsProfileCard.args = { + flowType: "profile", + flow: settingsFlow as SelfServiceSettingsFlow, +} + +export const UserSettingsPasswordCard = Template.bind({}) + +UserSettingsPasswordCard.args = { + flowType: "password", + flow: settingsFlow as SelfServiceSettingsFlow, +} + +export const UserSettingsWebauthnCard = Template.bind({}) + +UserSettingsWebauthnCard.args = { + flowType: "webauthn", + flow: settingsFlow as SelfServiceSettingsFlow, +} + +export const UserSettingsTotpCard = Template.bind({}) + +UserSettingsTotpCard.args = { + flowType: "totp", + flow: settingsFlow as SelfServiceSettingsFlow, +} + +export const UserSettingsOidcCard = Template.bind({}) + +UserSettingsOidcCard.args = { + flowType: "oidc", + flow: settingsFlow as SelfServiceSettingsFlow, +} diff --git a/src/stories/Ory/login-flow-ui-error.json b/src/stories/Ory/login-flow-ui-error.json new file mode 100644 index 000000000..231a3ec62 --- /dev/null +++ b/src/stories/Ory/login-flow-ui-error.json @@ -0,0 +1,122 @@ +{ + "id": "4825164f-0784-4ed3-ba8f-9d0bef2bc3f2", + "type": "browser", + "expires_at": "2022-09-27T12:07:40.581807Z", + "issued_at": "2022-09-27T11:37:40.581807Z", + "request_url": "http://test.com/self-service/login/browser?refresh=true&aal=aal1", + "ui": { + "action": "http://test.com/self-service/login?flow=4825164f-0784-4ed3-ba8f-9d0bef2bc3f2", + "method": "POST", + "nodes": [ + { + "type": "input", + "group": "oidc", + "attributes": { + "name": "provider", + "type": "submit", + "value": "github", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1010002, + "text": "Sign in with GitHub", + "type": "info", + "context": { + "provider": "GitHub" + } + } + } + }, + { + "type": "input", + "group": "default", + "attributes": { + "name": "csrf_token", + "type": "hidden", + "value": "8sIxbFJwFrHHWTI4rYRfVwGjtbQ/a4z6bf5R+KMW8DBlxNcIO1mBNk7HjsleD/jSadbVlK9CJah2sZo9OrfM9g==", + "required": true, + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": {} + }, + { + "type": "input", + "group": "default", + "attributes": { + "name": "identifier", + "type": "text", + "value": "", + "required": true, + "disabled": false, + "node_type": "input" + }, + "messages": [ + { + "id": 4000002, + "text": "Property identifier is missing.", + "type": "error", + "context": { + "property": "identifier" + } + } + ], + "meta": { + "label": { + "id": 1070004, + "text": "ID", + "type": "info" + } + } + }, + { + "type": "input", + "group": "password", + "attributes": { + "name": "password", + "type": "password", + "required": true, + "autocomplete": "current-password", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070001, + "text": "Password", + "type": "info" + } + } + }, + { + "type": "input", + "group": "password", + "attributes": { + "name": "method", + "type": "submit", + "value": "password", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1010001, + "text": "Sign in", + "type": "info", + "context": {} + } + } + } + ] + }, + "created_at": "2022-09-27T11:37:40.673019Z", + "updated_at": "2022-09-27T11:37:40.673019Z", + "refresh": false, + "requested_aal": "aal1" +} diff --git a/src/stories/Ory/settings-flow.json b/src/stories/Ory/settings-flow.json new file mode 100644 index 000000000..a7185d192 --- /dev/null +++ b/src/stories/Ory/settings-flow.json @@ -0,0 +1,308 @@ +{ + "id": "211d1b28-6144-4b0e-9001-8f73e18c4a82", + "type": "browser", + "expires_at": "2022-08-29T14:09:37.514116692Z", + "issued_at": "2022-08-29T13:39:37.514116692Z", + "request_url": "http://test.com/self-service/settings/browser", + "ui": { + "action": "http://test.com/self-service/settings?flow=211d1b28-6144-4b0e-9001-8f73e18c4a82", + "method": "POST", + "nodes": [ + { + "type": "input", + "group": "default", + "attributes": { + "name": "csrf_token", + "type": "hidden", + "value": "CA1DBzOMYjlLmjKDQ66PUSAPF+9nG+umyOeKvVeM5CLNlXF068/V9nEXNzk6KfXVsPYt4+Y5acxUZwPJW8bzDQ==", + "required": true, + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": {} + }, + { + "type": "input", + "group": "profile", + "attributes": { + "name": "traits.email", + "type": "email", + "value": "test@test.com", + "required": true, + "autocomplete": "email", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070002, + "text": "E-Mail", + "type": "info" + } + } + }, + { + "type": "input", + "group": "profile", + "attributes": { + "name": "method", + "type": "submit", + "value": "profile", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070003, + "text": "Save", + "type": "info" + } + } + }, + { + "type": "input", + "group": "password", + "attributes": { + "name": "password", + "type": "password", + "required": true, + "autocomplete": "new-password", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070001, + "text": "Password", + "type": "info" + } + } + }, + { + "type": "input", + "group": "password", + "attributes": { + "name": "method", + "type": "submit", + "value": "password", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070003, + "text": "Save", + "type": "info" + } + } + }, + { + "type": "input", + "group": "lookup_secret", + "attributes": { + "name": "lookup_secret_regenerate", + "type": "submit", + "value": "true", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1050008, + "text": "Generate new backup recovery codes", + "type": "info" + } + } + }, + { + "type": "input", + "group": "webauthn", + "attributes": { + "name": "webauthn_register_displayname", + "type": "text", + "value": "", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1050013, + "text": "Name of the security key", + "type": "info" + } + } + }, + { + "type": "input", + "group": "webauthn", + "attributes": { + "name": "webauthn_register", + "type": "hidden", + "value": "", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": {} + }, + { + "type": "input", + "group": "webauthn", + "attributes": { + "name": "webauthn_register_trigger", + "type": "button", + "value": "", + "disabled": false, + "onclick": "window.__oryWebAuthnRegistration({\"publicKey\":{\"challenge\":\"\",\"rp\":{\"name\":\"Test\",\"id\":\"test.com\"},\"user\":{\"name\":\"placeholder\",\"icon\":\"https://via.placeholder.com/128\",\"displayName\":\"placeholder\",\"id\":\"\"},\"pubKeyCredParams\":[{\"type\":\"public-key\",\"alg\":-7},{\"type\":\"public-key\",\"alg\":-35},{\"type\":\"public-key\",\"alg\":-36},{\"type\":\"public-key\",\"alg\":-257},{\"type\":\"public-key\",\"alg\":-258},{\"type\":\"public-key\",\"alg\":-259},{\"type\":\"public-key\",\"alg\":-37},{\"type\":\"public-key\",\"alg\":-38},{\"type\":\"public-key\",\"alg\":-39},{\"type\":\"public-key\",\"alg\":-8}],\"authenticatorSelection\":{\"userVerification\":\"discouraged\"},\"timeout\":60000}})", + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1050012, + "text": "Add security key", + "type": "info" + } + } + }, + { + "type": "script", + "group": "webauthn", + "attributes": { + "src": "http://test.com/.well-known/ory/webauthn.js", + "async": true, + "referrerpolicy": "no-referrer", + "crossorigin": "anonymous", + "integrity": "sha512-E3ctShTQEYTkfWrjztRCbP77lN7L0jJC2IOd6j8vqUKslvqhX/Ho3QxlQJIeTI78krzAWUQlDXd9JQ0PZlKhzQ==", + "type": "text/javascript", + "id": "webauthn_script", + "nonce": "98844887-ab03-4551-841a-693c5ac802ca", + "node_type": "script" + }, + "messages": [], + "meta": {} + }, + { + "type": "img", + "group": "totp", + "attributes": { + "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAEAAAAAApiSv5AAAHM0lEQVR4nOydwY4yOQwGl9X//q/8723gYKVt/HXPSlV1GgGdhKEUWUns/Pn79x8B8+9vD0B+FwWAowBwFADOn/efr1eiwSqo7LY8f/b8xH0BbjWqd2/VCDLfI/8bOQPAUQA4CgBHAeD8qV6cB0/z4OTcRzfI6vbbDajmgVz1Pc6vVa2k/38VdR/OAHAUAI4CwFEAOGUQ+Ga+flU9213hmwdP3VCou5Z2HnO6lfOzXTa/kTMAHgWAowBwFADORRD4f2ITSlbvzrdbz2t4m+BuHiymcAaAowBwFACOAsB5JAjsBkCb03ybs4jz0O/cb/e1zdpmCmcAOAoARwHgKACciyDw2ZBkk+ZRfW4eXlanDef9dk8bnlvpsvuNnAHgKAAcBYCjAHDKIDCTg/qmuwU7f63bR8WmvflrFZvAMPUbOQPAUQA4CgBHAeB8BIFPrPplwqNuH5vPdXN457m+m/N/+d/IGQCOAsBRADgKAOe1WcmqmFe8y5wJPPNECZYnRpD/Hs4AcBQAjgLAUQA47TOB8wAtU26lam8+vk3R5vlYzi3Pn82MucYZAI4CwFEAOAoAJ3QmcFO0OV1GOX3Wr2JTuLpqJcM3N7M4A8BRADgKAEcB4FycCewmJ5zfTd+R0V1Luy+l4zyqTLmaTb3Dc8ufOAPAUQA4CgBHAeCUdwdvriR7Ii1jc09I5jbfzajOdMecuY/FGQCPAsBRADgKAKdcCdwUaKmYb/ima/PNR9Vls5VcsVmV/OZ7OAPAUQA4CgBHAeCE7g6er0tt0jy6Y8mcbTyfXtzcNlJ9Ll3v8Grt0BkAjgLAUQA4CgBntR183ybw/FTd/JaO8/juu9ej+z0yK5XVCD5xBoCjAHAUAI4CwHltEj4qMu1lSrpkto3TN3fM/0Pn3nb5zs4AcBQAjgLAUQA4ZRD48fY4OzidKLHZFJ2Hl5m0kfk2+RN1At0OlgIFgKMAcBQATnslcBMOdrlvG3rTyhMFZDZsQl1nADwKAEcB4CgAnPJMYPXafCVrU7rk2e3RTfrLfHv5TXqb/Jvw0hkAjgLAUQA4CgBntRKYDp7Oz2Zano+0YpNEU/V7/lz1RGqj3hkAjgLAUQA4CgCnLBGzyX19s8mv3WTQZlYCUyttp1a6K6nzojf9Wo7OAHAUAI4CwFEAOF8khmRW2jbPpjd8NyN480RouhmpK4FSoABwFACOAsBp1wnclFbZZO4+u5q3abmivyI3beU8ln4fzgBwFACOAsBRADjltXEVmzLKm0LJ3XfndNvLZCCfW74vlaTq7RNnADgKAEcB4CgAnIuVwG5wslndyhSfuW+1bLMtm04vyf8ezgBwFACOAsBRADhlYkh6UzTd3obNmNN93BeGnp/1TKD8oABwFACOAsC5SAwpH1ls2m4Kw5yf6PZxfnbTyqZszHyVM1NJ0RkAjwLAUQA4CgDnNa/cVzYTudjs3PJma3VTqbDbyu9vcFeYHSxHFACOAsBRADgXxaLP7MoUT0kHSpnC1WcyedZdvvk/OwPAUQA4CgBHAeC0i0Vv8nrPzLN0z8WTN7m+m5C4aiVTHDtdY9CVQPlBAeAoABwFgLMqFp0JmeZkztzdtyqZ2fCtesusGH7iDABHAeAoABwFgFOuBFZkavjNg6fzs913z0+kT+7NayWmz2P2g15nADgKAEcB4CgAnLJO4JtMGsW8vcztJedt43m/6RtNzi2fx9d91sQQOaIAcBQAjgLAubgxZBPObEKmagRVH5vL4u7b0t3cmvJE2PiJMwAcBYCjAHAUAM4XK4GbQGkTDm6qCOZX0E5svsc5iO6GnH2cAeAoABwFgKMAcNorgWcyBaQ3xVjmZPKd02kyTxfCcQaAowBwFACOAsC5SAzJlJLenATc3KCRae++6oDVE5szgfPPOQPgUQA4CgBHAeC07w6+78aQTLLI+XObltOlZOYjSOdUmxgiPygAHAWAowBwvrgxZFOwpPu5TStdMif85ucTn8UgUI4oABwFgKMAcG68Ozh9b8ZmLHPSwfG5lcxpyHkajzMAHgWAowBwFADORWJIl2dX6TY1C+ctPxH6ncmsvXomUAoUAI4CwFEAOBclYuacTxGm0zyqJ9J5vd+sr/We2NRATAWfzgBwFACOAsBRADhlYsh8TfC+os3n3uYhZ7ePcyuZcLDb25v0aq0zAB4FgKMAcBQAzkWJmHRIkimj3KW7+nZ+9sz8G82LxWSqDdY4A8BRADgKAEcB4FwEgWk2t368eSIn+Mx8q3Zz+dym0IzXxskRBYCjAHAUAM7DQeC83MrmMrvzExWb83/VmDNX081b6QepzgBwFACOAsBRADjtG0PmdFMcur3N79Ko3t3cCdylG0pmimNX/Z7b+8QZAI4CwFEAOAoAp10nsMsmyLovlSTTW2ZrOn0nSNVKf/PZGQCOAsBRADgKAKe8MUQ4OAPAUQA4CgBHAeAoAJz/AgAA//8vkGhnPTMq/AAAAABJRU5ErkJggg==", + "id": "totp_qr", + "width": 256, + "height": 256, + "node_type": "img" + }, + "messages": [], + "meta": { + "label": { + "id": 1050005, + "text": "Authenticator app QR code", + "type": "info" + } + } + }, + { + "type": "text", + "group": "totp", + "attributes": { + "text": { + "id": 1050006, + "text": "AH4EGV22CTLLZ57BJ4CAAICBB5Z3RQNB", + "type": "info", + "context": { + "secret": "AH4EGV22CTLLZ57BJ4CAAICBB5Z3RQNB" + } + }, + "id": "totp_secret_key", + "node_type": "text" + }, + "messages": [], + "meta": { + "label": { + "id": 1050017, + "text": "This is your authenticator app secret. Use it if you can not scan the QR code.", + "type": "info" + } + } + }, + { + "type": "input", + "group": "totp", + "attributes": { + "name": "totp_code", + "type": "text", + "required": true, + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070006, + "text": "Verify code", + "type": "info" + } + } + }, + { + "type": "input", + "group": "totp", + "attributes": { + "name": "method", + "type": "submit", + "value": "totp", + "disabled": false, + "node_type": "input" + }, + "messages": [], + "meta": { + "label": { + "id": 1070003, + "text": "Save", + "type": "info" + } + } + } + ] + }, + "identity": { + "id": "6ef63ac1-0f07-406f-87ef-ebbc87e5a3f9", + "schema_id": "preset://email", + "schema_url": "http://test.com/schemas/cHJlc2V0Oi8vZW1haWw", + "state": "active", + "state_changed_at": "2022-02-10T13:57:53.668318Z", + "traits": { + "email": "test@test.com" + }, + "verifiable_addresses": [ + { + "id": "3b0f2966-b5d7-4273-b8a0-b07b96c7591b", + "value": "test@test.com", + "verified": false, + "via": "email", + "status": "sent", + "created_at": "2022-02-10T13:57:53.705359Z", + "updated_at": "2022-02-10T13:57:53.705359Z" + } + ], + "recovery_addresses": [ + { + "id": "02b54483-8de9-4b7f-ba1d-ebf8a41e74b7", + "value": "test@test.com", + "via": "email", + "created_at": "2022-02-10T13:57:53.712317Z", + "updated_at": "2022-02-10T13:57:53.712317Z" + } + ], + "created_at": "2022-02-10T13:57:53.676513Z", + "updated_at": "2022-02-10T13:57:53.676513Z" + }, + "state": "show_form" +} diff --git a/src/stories/assets/fork.png b/src/stories/assets/fork.png deleted file mode 100644 index 2d16e98decf5aa8dd0320e7f7d6a346f781596f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3433 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 JPDHLkV1oOAt=|9u diff --git a/src/stories/assets/logo.png b/src/stories/assets/logo.png deleted file mode 100644 index b7763a3d331cdb11b481a027d9f11ec7ee176dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12287 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 + + + + + + + diff --git a/src/stories/assets/ory.png b/src/stories/assets/ory.png deleted file mode 100644 index 08298cc80e8845e280221d1065bba6da825ce7ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3011 zcmV;!3q16RP)@~0drDELIAGL9O(c600d`2O+f$vv5yP}QVwCUhdVAX^r`=Go@)&@s{&~7)Zs<2`yUjJ>m+ozun zH+vYmQ18_SM}p99C+z6st^{YU3M)%lp-CxU-&gTSqUJH1*7EAGxcUF_<_Ma(aE zH%^bmLlO+0Glam@(kS*av&G8e{`2ku{YW-_M= zLYq=F0;?{pEJ0|~Nk(A)g_R`;ZMqlH;> zinRT4eDS%CDZ|l+!8%4Ce}u9yhS!+yoQU&5m8{1Xyj$F5{GI+|qK)R0f4&C`$6KFX zNhvyc$0S}$=Xx+aX#r1a6+CUo7~41z7w^A!3WzS~EN}cIq+E4rzwc7;qmP50uR?;V z={0j(WS;`+rt=e#M!)KgGbUFiRu6_kTRSD#EMJ5E^}lNCSQ9Bk;Xs~lpR9vD+an5TS`G@$wg!L-rZ-Db3R_)BjA zCdAhdyN_p@(XUm-Mc_zW!O_|~-umB7^LEi1vp00B0!I?@s7jbz62p=YSufLd#i+m< z{huo^8udq;pZ4(SD)^<%MYM;b*!TNhgDyDZujX7#1Ox=ylX#gPxe9W6Ec1-)x}Z}#ivfZA`f zQU|BU@dFp{_z+`ZoU<3Y<5I*+_nvikbjQ`TWzn8)erfam@+j(27V#X%e{*TUP+V`o zgoK^uv3OXt;goBCN-#G`j6E2Q$cQfe(B2i^fkidZpM>y@+xl3NRyItRryxBO^{m55>e{YiI6 z#(3K?i>%Uw-}Z--K$sNW`Tw|Q7N|4nT$9LXKIU?(Cu_$#mzD2C{0pCJ_hk&VtQ~p@~}1AG&V62%d~QeIQkEQOa^5STcXJ|I3i+U8g#~Ma?T@dXU9VRA4+1jVmk7z7s2m9)G?gc_nEM^ znBY=zx5J-RW}uyaR1P_a4e-PnItK{QjldALK?hE{rof%QY*eFf;}jS)r#ey zvt9(pd*r_iCvJd8ERA>WAVtJGxK;0n(&*Q2=;1x!mqL{ z7*1k_+Z6~gfC{)-F}?L78WLEWLH^RnlOyq8@Qe`f8CBiMJ9ZW;v+rgx1zImnMwLgf z1D=tLCf8B!?GOcREyE#)3a@uN^Xnn#oh+R2^KA^745Wk>Dwpw=bly@RAdOy za`ublpiS0`Xy6REtvNQVrSgF>t$=baycKS!tr8dUXYfoTDdEWl<81fALgG-l77wrv zb|gKl;8sc@>As)hnXx31JW_izlz;^`ua>Lf)MJX~D zvso{~abZvlTP?4iOOO85*ltsuT$1;oEu< zN?@bWGSt2?z{=6q?sl0@qER*zMLpB%o-z#|hpe!rOuJoHWS5Iz4B}D&&YFU{$u5!F zPwx0!q2=3p5to71*fLtsb$RTvE-+2XQW>s!=~y-Em4a4m&0N%&h|FbOM`f{U=ndxP%4Tw}O(gwl#^=Ib8aS z;T(PFt)kmf6~1g6g0+}*|oYU7e+ z7J8%<*<+&YUFJ$IlBy^0RgTlf|iK^-m%E}KgsVL6KnKf_gARbUXmG))1j zc>8tCy;80vyD#g{rK}V*G$UWuxgY-g^5TlQQnVUMT=*F>$eNJ{L6(Qs zM}h;Xu;z}%1D6G_K1mk zfqmbD;wy#&bQL8b(LP(W)#VK5-U}Q9->eM#PWTS)rA&>HQf~a##?ux1z`ny+I`uj{N*yGq^dUqw~0#wbGX@C;mLOrwZR$Lcl?s9 zm1yd&}eBFt-iSlB`<-=QP{~VE3_c2 z>Bc#VP*i9^SOKDRm`W$KAgsVRmE)kP(A4H1L0Ewde*(S-2_3|>{|5j7002ovPDHLk FV1jV0qeK7z diff --git a/src/stories/assets/repo-forked.png b/src/stories/assets/repo-forked.png deleted file mode 100644 index 4baaeccca7fc5377fd2f419ce4a95694a8a840b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 847 zcmV-V1F-ywP)@~0drDELIAGL9O(c600d`2O+f$vv5yPa=lFcmeQimHash}$B9Q>{yvpwH%iE$TRz*=tJj$|Ms^e##=VJ(j+P^na%1>ok z-RMrecc_lupe;B;?O&6C2iRa$RdXrf!p1&H;BGh^PLd?~Z(~pGzsUeRsH%tSR_E42 z$R9#HPVi9Iu2dLneGzR{K-ZS;$^8d`&Xizv#$NOaUKGLLGroofSBzXcX&+*_+6jFSLoRPtM(j!G9Ak0g&ee1u`33Ww%hBn}7q<{x#mKK$@l#OixXAn9h$V{g~> z(I^dSgW7-01EA+b0ifrQ3lOqV!Li9fE`VCfrapn-J$Nq=6D)wuTJ0)=ZSXd2v!Hfy zrl#FnJZwZj8yjEPChQX*A;Q51uL%+1;Dgurh|p#5!T$@q1$I%Kt4hQ%HR=F0gw<8sDo$2c49oJ+1?cw5sof+jg1K0!IRGc zZK$`nT#5Su&~u^y&~u^y&~sP?z`8$^4O_L>2DUZV<;za>&F})h8w3Ve-T-{^t>8^{ ze;HPQ!ZEP-b$`@w*ZsLdJ_NYy{#@ah16b?+T#0!Aki%Q|=L)$1dtdiQ4R_t2D=e8H zXWgGGECOtP|1$@m{|SsMEUN$plBPpUd1oeDwBZWA6L4H_vcqMa@f9l^CP$I_Mk0}e Z;t6}`gQvhe7(M_1002ovPDHLkV1mOnh}!@F diff --git a/src/stories/assets/sign-out.png b/src/stories/assets/sign-out.png deleted file mode 100644 index ca360272171df7c5d917f705ed90a1b18bc3b3c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVp1P)@~0drDELIAGL9O(c600d`2O+f$vv5yPz4WUU80#@`Bkg;w_)aV6v z%S(1fbe><8#E~e8!#b^VNC~({rzC_;WQTiVqZHvBkbV7wzXyA(U1CfLNHcJ; z44$togF6?XyVqB#vyUi8UcDE=PH;W)Dj}D^#>lG#DPUXVRh$=~)_B#Nv5fq`&#&1e zMGZnqK&{BD1R+2t@+twG3U8m~tMEPn19q-`5?m(wW~dW@$ms+iaykKsoK65DrxSq4 zvEB diff --git a/src/theme/card.css.ts b/src/theme/card.css.ts index 499ca3015..8301ec6c3 100644 --- a/src/theme/card.css.ts +++ b/src/theme/card.css.ts @@ -32,6 +32,13 @@ export const cardTitleStyle = style({ textAlign: "center", }) +export const cardTitleImage = style({ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: pxToRem(42), +}) + // recipe for the card style // this ensures we have themeable variations for the card export const cardStyle = recipe({ diff --git a/tests/preact-spa/src/login.tsx b/tests/preact-spa/src/login.tsx index cb1c10136..5609d901a 100644 --- a/tests/preact-spa/src/login.tsx +++ b/tests/preact-spa/src/login.tsx @@ -33,7 +33,6 @@ export const Login = () => { handleFlow({ refresh: true, mfa: isMFA }) .then((flow) => setFlow(flow)) .catch((error) => { - console.dir({ error: error.response }) switch (error.response?.status) { case 400: setFlow(error.response.data) diff --git a/tests/react-spa/src/App.tsx b/tests/react-spa/src/App.tsx index cd8240fe4..3be93273b 100644 --- a/tests/react-spa/src/App.tsx +++ b/tests/react-spa/src/App.tsx @@ -23,7 +23,6 @@ const Dashboard = () => { setSession(session) }) .catch((error) => { - console.dir({ error }) if (error.response?.status === 403) { if (error.response?.data.error.id === "session_aal2_required") { return navigate("/login?aal2=true", { replace: true }) diff --git a/tests/react-spa/src/Login.tsx b/tests/react-spa/src/Login.tsx index 93f3dbef3..e97077d6d 100644 --- a/tests/react-spa/src/Login.tsx +++ b/tests/react-spa/src/Login.tsx @@ -31,7 +31,6 @@ export const Login = (): JSX.Element => { handleFlow({ refresh: true, mfa: isMFA }) .then((flow) => setFlow(flow)) .catch((error) => { - console.dir({ error: error.response }) switch (error.response?.status) { case 400: setFlow(error.response.data)