@insforge/react 0.4.0 → 0.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -11
- package/dist/atoms.cjs +158 -139
- package/dist/atoms.cjs.map +1 -1
- package/dist/atoms.d.cts +72 -41
- package/dist/atoms.d.ts +72 -41
- package/dist/atoms.js +159 -141
- package/dist/atoms.js.map +1 -1
- package/dist/components.cjs +544 -798
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +64 -94
- package/dist/components.d.ts +64 -94
- package/dist/components.js +544 -798
- package/dist/components.js.map +1 -1
- package/dist/forms.cjs +217 -310
- package/dist/forms.cjs.map +1 -1
- package/dist/forms.d.cts +10 -13
- package/dist/forms.d.ts +10 -13
- package/dist/forms.js +218 -311
- package/dist/forms.js.map +1 -1
- package/dist/hooks.cjs.map +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.cjs +581 -794
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -16
- package/dist/index.d.ts +31 -16
- package/dist/index.js +581 -794
- package/dist/index.js.map +1 -1
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts +0 -11
- package/dist/router.d.ts +0 -11
- package/dist/router.js.map +1 -1
- package/dist/styles.css +212 -3
- package/dist/types.d.cts +11 -613
- package/dist/types.d.ts +11 -613
- package/package.json +7 -2
package/dist/router.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":["useEffect","jsx"],"mappings":";;;;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,cAAA,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAChD,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;
|
|
1
|
+
{"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":["useEffect","jsx"],"mappings":";;;;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,cAAA,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAChD,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,GAAc,MAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AAEpD,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,UAAA;AAAA,IACT,MAAA,GAAS,UAAA;AAAA,IACT,WAAA,GAAc,eAAA;AAAA,IACd,cAAA,GAAiB,kBAAA;AAAA,IACjB,aAAA,GAAgB;AAAA,GAClB,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAASC,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,oBAAA,EAAqB;AAAA,OACvE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA,OAC1E;AAAA,MACA;AAAA,QACE,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,kBAASA,cAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,sBAAA,EAAuB;AAAA;AACzE,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.cjs","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * verifyEmail: '/verify-email',\n * forgotPassword: '/forgot-password',\n * resetPassword: '/reset-password'\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n verifyEmail?: string;\n forgotPassword?: string;\n resetPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({ baseUrl, path }: { baseUrl: string; path: string }) {\n useEffect(() => {\n const callbackUrl = `${window.location.origin}/auth/callback`;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', callbackUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {} } = config;\n\n const {\n signIn = '/sign-in',\n signUp = '/sign-up',\n verifyEmail = '/verify-email',\n forgotPassword = '/forgot-password',\n resetPassword = '/reset-password',\n } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" />,\n },\n {\n path: signUp,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" />,\n },\n {\n path: verifyEmail,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/verify-email\" />,\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n },\n {\n path: resetPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/reset-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
|
package/dist/router.d.cts
CHANGED
|
@@ -35,9 +35,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
35
35
|
*
|
|
36
36
|
* Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.
|
|
37
37
|
*
|
|
38
|
-
* ⚠️ **Important**: You must manually create the `/auth/callback` route in your router
|
|
39
|
-
* to handle authentication callbacks. See documentation for details.
|
|
40
|
-
*
|
|
41
38
|
* @param config - Configuration for Insforge routes
|
|
42
39
|
* @returns Array of RouteObject for React Router (redirect routes only)
|
|
43
40
|
*
|
|
@@ -45,7 +42,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
45
42
|
* ```tsx
|
|
46
43
|
* import { createBrowserRouter } from 'react-router-dom';
|
|
47
44
|
* import { getInsforgeRoutes } from '@insforge/react/router';
|
|
48
|
-
* import { InsforgeCallback } from '@insforge/react';
|
|
49
45
|
*
|
|
50
46
|
* const router = createBrowserRouter([
|
|
51
47
|
* {
|
|
@@ -53,8 +49,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
53
49
|
* element: <Layout />,
|
|
54
50
|
* children: [
|
|
55
51
|
* { index: true, element: <Home /> },
|
|
56
|
-
* // ✅ Required: Manually create callback route
|
|
57
|
-
* { path: 'auth/callback', element: <AuthCallback /> },
|
|
58
52
|
* { path: 'dashboard', element: <Dashboard /> }
|
|
59
53
|
* ]
|
|
60
54
|
* },
|
|
@@ -64,11 +58,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
64
58
|
* builtInAuth: true
|
|
65
59
|
* })
|
|
66
60
|
* ]);
|
|
67
|
-
*
|
|
68
|
-
* // src/pages/AuthCallback.tsx
|
|
69
|
-
* function AuthCallback() {
|
|
70
|
-
* return <InsforgeCallback redirectTo="/dashboard" />;
|
|
71
|
-
* }
|
|
72
61
|
* ```
|
|
73
62
|
*
|
|
74
63
|
* @example
|
package/dist/router.d.ts
CHANGED
|
@@ -35,9 +35,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
35
35
|
*
|
|
36
36
|
* Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.
|
|
37
37
|
*
|
|
38
|
-
* ⚠️ **Important**: You must manually create the `/auth/callback` route in your router
|
|
39
|
-
* to handle authentication callbacks. See documentation for details.
|
|
40
|
-
*
|
|
41
38
|
* @param config - Configuration for Insforge routes
|
|
42
39
|
* @returns Array of RouteObject for React Router (redirect routes only)
|
|
43
40
|
*
|
|
@@ -45,7 +42,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
45
42
|
* ```tsx
|
|
46
43
|
* import { createBrowserRouter } from 'react-router-dom';
|
|
47
44
|
* import { getInsforgeRoutes } from '@insforge/react/router';
|
|
48
|
-
* import { InsforgeCallback } from '@insforge/react';
|
|
49
45
|
*
|
|
50
46
|
* const router = createBrowserRouter([
|
|
51
47
|
* {
|
|
@@ -53,8 +49,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
53
49
|
* element: <Layout />,
|
|
54
50
|
* children: [
|
|
55
51
|
* { index: true, element: <Home /> },
|
|
56
|
-
* // ✅ Required: Manually create callback route
|
|
57
|
-
* { path: 'auth/callback', element: <AuthCallback /> },
|
|
58
52
|
* { path: 'dashboard', element: <Dashboard /> }
|
|
59
53
|
* ]
|
|
60
54
|
* },
|
|
@@ -64,11 +58,6 @@ interface GetInsforgeRoutesConfig {
|
|
|
64
58
|
* builtInAuth: true
|
|
65
59
|
* })
|
|
66
60
|
* ]);
|
|
67
|
-
*
|
|
68
|
-
* // src/pages/AuthCallback.tsx
|
|
69
|
-
* function AuthCallback() {
|
|
70
|
-
* return <InsforgeCallback redirectTo="/dashboard" />;
|
|
71
|
-
* }
|
|
72
61
|
* ```
|
|
73
62
|
*
|
|
74
63
|
* @example
|
package/dist/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":[],"mappings":";;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,cAAA,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAChD,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;
|
|
1
|
+
{"version":3,"sources":["../src/router/getInsforgeRoutes.tsx"],"names":[],"mappings":";;;AAyCA,SAAS,cAAA,CAAe,EAAE,OAAA,EAAS,IAAA,EAAK,EAAsC;AAC5E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,cAAA,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AACrC,IAAA,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,UAAA,EAAY,WAAW,CAAA;AAChD,IAAA,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,CAAA;AAAA,EAC5C,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,IAAA;AACT;AA6CO,SAAS,kBAAkB,MAAA,EAAgD;AAChF,EAAA,MAAM,EAAE,OAAA,EAAS,WAAA,GAAc,MAAM,KAAA,GAAQ,IAAG,GAAI,MAAA;AAEpD,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,UAAA;AAAA,IACT,MAAA,GAAS,UAAA;AAAA,IACT,WAAA,GAAc,eAAA;AAAA,IACd,cAAA,GAAiB,kBAAA;AAAA,IACjB,aAAA,GAAgB;AAAA,GAClB,GAAI,KAAA;AAEJ,EAAA,MAAM,SAAwB,EAAC;AAG/B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,IAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,eAAA,EAAgB;AAAA,OAClE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,oBAAA,EAAqB;AAAA,OACvE;AAAA,MACA;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,uBAAA,EAAwB;AAAA,OAC1E;AAAA,MACA;AAAA,QACE,IAAA,EAAM,aAAA;AAAA,QACN,OAAA,kBAAS,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAkB,MAAK,sBAAA,EAAuB;AAAA;AACzE,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT","file":"router.js","sourcesContent":["'use client';\n\nimport { useEffect } from 'react';\nimport type { RouteObject } from 'react-router-dom';\n\ninterface GetInsforgeRoutesConfig {\n /**\n * Base URL of your Insforge backend\n */\n baseUrl: string;\n\n /**\n * Whether to use built-in auth (deployed Insforge Auth)\n * When true: redirects to baseUrl/auth/* pages\n * When false: no redirect routes are added (use your own components)\n * @default true\n */\n builtInAuth?: boolean;\n\n /**\n * Custom paths for auth redirect routes\n * @default {\n * signIn: '/sign-in',\n * signUp: '/sign-up',\n * verifyEmail: '/verify-email',\n * forgotPassword: '/forgot-password',\n * resetPassword: '/reset-password'\n * }\n */\n paths?: {\n signIn?: string;\n signUp?: string;\n verifyEmail?: string;\n forgotPassword?: string;\n resetPassword?: string;\n };\n}\n\n/**\n * Helper component for redirecting to external auth\n */\nfunction RedirectToAuth({ baseUrl, path }: { baseUrl: string; path: string }) {\n useEffect(() => {\n const callbackUrl = `${window.location.origin}/auth/callback`;\n const authUrl = new URL(path, baseUrl);\n authUrl.searchParams.set('redirect', callbackUrl);\n window.location.replace(authUrl.toString());\n }, [baseUrl, path]);\n\n return null;\n}\n\n/**\n * Generates Insforge authentication redirect routes for React Router.\n *\n * Returns redirect routes for sign-in, sign-up, etc. that redirect to your deployed Insforge auth pages.\n *\n * @param config - Configuration for Insforge routes\n * @returns Array of RouteObject for React Router (redirect routes only)\n *\n * @example\n * ```tsx\n * import { createBrowserRouter } from 'react-router-dom';\n * import { getInsforgeRoutes } from '@insforge/react/router';\n *\n * const router = createBrowserRouter([\n * {\n * path: '/',\n * element: <Layout />,\n * children: [\n * { index: true, element: <Home /> },\n * { path: 'dashboard', element: <Dashboard /> }\n * ]\n * },\n * // Add redirect routes (sign-in, sign-up, etc.)\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true\n * })\n * ]);\n * ```\n *\n * @example\n * ```tsx\n * // Custom paths for redirect routes\n * ...getInsforgeRoutes({\n * baseUrl: 'https://your-backend.com',\n * builtInAuth: true,\n * paths: {\n * signIn: '/login',\n * signUp: '/register'\n * }\n * })\n * ```\n */\nexport function getInsforgeRoutes(config: GetInsforgeRoutesConfig): RouteObject[] {\n const { baseUrl, builtInAuth = true, paths = {} } = config;\n\n const {\n signIn = '/sign-in',\n signUp = '/sign-up',\n verifyEmail = '/verify-email',\n forgotPassword = '/forgot-password',\n resetPassword = '/reset-password',\n } = paths;\n\n const routes: RouteObject[] = [];\n\n // Only add redirect routes if using built-in auth\n if (builtInAuth) {\n routes.push(\n {\n path: signIn,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-in\" />,\n },\n {\n path: signUp,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/sign-up\" />,\n },\n {\n path: verifyEmail,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/verify-email\" />,\n },\n {\n path: forgotPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/forgot-password\" />,\n },\n {\n path: resetPassword,\n element: <RedirectToAuth baseUrl={baseUrl} path=\"/auth/reset-password\" />,\n }\n );\n }\n\n return routes;\n}\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -424,6 +424,19 @@
|
|
|
424
424
|
border: 1px solid var(--if-color-error);
|
|
425
425
|
}
|
|
426
426
|
|
|
427
|
+
.if-errorBanner-content {
|
|
428
|
+
display: flex;
|
|
429
|
+
align-items: center;
|
|
430
|
+
gap: var(--if-space-2);
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.if-errorBanner-icon {
|
|
434
|
+
width: 1.5rem;
|
|
435
|
+
height: 1.5rem;
|
|
436
|
+
flex-shrink: 0;
|
|
437
|
+
color: var(--if-color-error);
|
|
438
|
+
}
|
|
439
|
+
|
|
427
440
|
.if-errorBanner-text {
|
|
428
441
|
font-size: var(--if-font-size-sm);
|
|
429
442
|
color: var(--if-color-error);
|
|
@@ -497,6 +510,78 @@
|
|
|
497
510
|
border-color: var(--if-color-border-focus);
|
|
498
511
|
}
|
|
499
512
|
|
|
513
|
+
/* ============================================
|
|
514
|
+
VERIFICATION STEP
|
|
515
|
+
============================================ */
|
|
516
|
+
.if-verificationStep {
|
|
517
|
+
display: flex;
|
|
518
|
+
flex-direction: column;
|
|
519
|
+
gap: var(--if-space-6);
|
|
520
|
+
align-items: stretch;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
.if-verificationStep-description {
|
|
524
|
+
font-size: var(--if-font-size-sm);
|
|
525
|
+
color: var(--if-color-text-secondary);
|
|
526
|
+
text-align: center;
|
|
527
|
+
margin: 0;
|
|
528
|
+
font-family: var(--if-font-family);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
.if-verificationStep-codeContainer {
|
|
532
|
+
width: 100%;
|
|
533
|
+
background-color: #f5f5f5;
|
|
534
|
+
border-radius: var(--if-radius-lg);
|
|
535
|
+
padding: var(--if-space-4) var(--if-space-4) var(--if-space-6);
|
|
536
|
+
display: flex;
|
|
537
|
+
flex-direction: column;
|
|
538
|
+
gap: var(--if-space-4);
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
.if-verificationStep-codeInputWrapper {
|
|
542
|
+
display: flex;
|
|
543
|
+
flex-direction: column;
|
|
544
|
+
gap: var(--if-space-3);
|
|
545
|
+
margin-top: var(--if-space-2);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.if-verificationStep-verifyingText {
|
|
549
|
+
font-size: var(--if-font-size-sm);
|
|
550
|
+
color: var(--if-color-text-secondary);
|
|
551
|
+
text-align: center;
|
|
552
|
+
font-family: var(--if-font-family);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.if-verificationStep-resendContainer {
|
|
556
|
+
width: 100%;
|
|
557
|
+
font-size: var(--if-font-size-sm);
|
|
558
|
+
text-align: center;
|
|
559
|
+
color: var(--if-color-text-secondary);
|
|
560
|
+
font-family: var(--if-font-family);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.if-verificationStep-resendButton {
|
|
564
|
+
color: var(--if-color-text);
|
|
565
|
+
font-weight: 500;
|
|
566
|
+
transition: all var(--if-transition-base);
|
|
567
|
+
background: none;
|
|
568
|
+
border: none;
|
|
569
|
+
padding: 0;
|
|
570
|
+
font-family: var(--if-font-family);
|
|
571
|
+
font-size: var(--if-font-size-sm);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.if-verificationStep-resendButton:not(:disabled) {
|
|
575
|
+
cursor: pointer;
|
|
576
|
+
text-decoration: underline;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
.if-verificationStep-resendButton:disabled {
|
|
580
|
+
cursor: not-allowed;
|
|
581
|
+
text-decoration: none;
|
|
582
|
+
opacity: 0.5;
|
|
583
|
+
}
|
|
584
|
+
|
|
500
585
|
/* ============================================
|
|
501
586
|
PASSWORD STRENGTH INDICATOR
|
|
502
587
|
============================================ */
|
|
@@ -576,20 +661,38 @@
|
|
|
576
661
|
/* ============================================
|
|
577
662
|
USER BUTTON
|
|
578
663
|
============================================ */
|
|
664
|
+
.if-userButton-container {
|
|
665
|
+
position: relative;
|
|
666
|
+
display: inline-block;
|
|
667
|
+
}
|
|
668
|
+
|
|
579
669
|
.if-userButton {
|
|
580
|
-
display:
|
|
670
|
+
display: flex;
|
|
581
671
|
align-items: center;
|
|
582
672
|
justify-content: center;
|
|
673
|
+
gap: var(--if-space-2);
|
|
583
674
|
padding: var(--if-space-2);
|
|
584
675
|
border-radius: 9999px;
|
|
585
|
-
background-color:
|
|
586
|
-
border:
|
|
676
|
+
background-color: transparent;
|
|
677
|
+
border: none;
|
|
587
678
|
cursor: pointer;
|
|
588
679
|
transition: all var(--if-transition-base);
|
|
589
680
|
}
|
|
590
681
|
|
|
591
682
|
.if-userButton:hover {
|
|
683
|
+
opacity: 0.8;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.if-userButton-detailed {
|
|
687
|
+
background-color: var(--if-color-bg-white);
|
|
688
|
+
border: 1px solid var(--if-color-border);
|
|
689
|
+
border-radius: var(--if-radius-sm);
|
|
690
|
+
padding: var(--if-space-2);
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
.if-userButton-detailed:hover {
|
|
592
694
|
background-color: var(--if-color-bg-light);
|
|
695
|
+
opacity: 1;
|
|
593
696
|
}
|
|
594
697
|
|
|
595
698
|
.if-userButton-avatar {
|
|
@@ -604,6 +707,44 @@
|
|
|
604
707
|
font-weight: 600;
|
|
605
708
|
font-size: var(--if-font-size-sm);
|
|
606
709
|
font-family: var(--if-font-family);
|
|
710
|
+
overflow: hidden;
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
.if-userButton-avatarImage {
|
|
714
|
+
border-radius: 9999px;
|
|
715
|
+
object-fit: cover;
|
|
716
|
+
width: 100%;
|
|
717
|
+
height: 100%;
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
.if-userButton-avatarInitials {
|
|
721
|
+
color: var(--if-color-bg-white);
|
|
722
|
+
font-weight: 600;
|
|
723
|
+
font-size: var(--if-font-size-sm);
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
.if-userButton-info {
|
|
727
|
+
display: flex;
|
|
728
|
+
flex-direction: column;
|
|
729
|
+
align-items: flex-start;
|
|
730
|
+
gap: 0.125rem;
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.if-userButton-name {
|
|
734
|
+
font-size: var(--if-font-size-sm);
|
|
735
|
+
font-weight: 600;
|
|
736
|
+
color: var(--if-color-text);
|
|
737
|
+
line-height: 1.25rem;
|
|
738
|
+
text-align: left;
|
|
739
|
+
font-family: var(--if-font-family);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
.if-userButton-email {
|
|
743
|
+
font-size: var(--if-font-size-xs);
|
|
744
|
+
color: var(--if-color-text-secondary);
|
|
745
|
+
line-height: 1rem;
|
|
746
|
+
text-align: left;
|
|
747
|
+
font-family: var(--if-font-family);
|
|
607
748
|
}
|
|
608
749
|
|
|
609
750
|
.if-userButton-menu {
|
|
@@ -629,12 +770,80 @@
|
|
|
629
770
|
font-size: var(--if-font-size-sm);
|
|
630
771
|
color: var(--if-color-text);
|
|
631
772
|
font-family: var(--if-font-family);
|
|
773
|
+
background: none;
|
|
774
|
+
border: none;
|
|
775
|
+
width: 100%;
|
|
776
|
+
text-align: left;
|
|
632
777
|
}
|
|
633
778
|
|
|
634
779
|
.if-userButton-menuItem:hover {
|
|
635
780
|
background-color: var(--if-color-bg-light);
|
|
636
781
|
}
|
|
637
782
|
|
|
783
|
+
.if-userButton-menuItem-signout {
|
|
784
|
+
color: var(--if-color-error);
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
.if-userButton-menuItem-icon {
|
|
788
|
+
width: 1.25rem;
|
|
789
|
+
height: 1.25rem;
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
/* ============================================
|
|
793
|
+
EMAIL VERIFICATION STATUS
|
|
794
|
+
============================================ */
|
|
795
|
+
.if-verifyStatus-container {
|
|
796
|
+
width: 100%;
|
|
797
|
+
display: flex;
|
|
798
|
+
flex-direction: column;
|
|
799
|
+
align-items: center;
|
|
800
|
+
justify-content: center;
|
|
801
|
+
gap: var(--if-space-6);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
.if-verifyStatus-container-stretch {
|
|
805
|
+
width: 100%;
|
|
806
|
+
display: flex;
|
|
807
|
+
flex-direction: column;
|
|
808
|
+
align-items: stretch;
|
|
809
|
+
justify-content: center;
|
|
810
|
+
gap: var(--if-space-6);
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
.if-verifyStatus-spinner {
|
|
814
|
+
border-radius: 9999px;
|
|
815
|
+
height: 3rem;
|
|
816
|
+
width: 3rem;
|
|
817
|
+
border-bottom: 2px solid var(--if-color-primary);
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.if-verifyStatus-successContent {
|
|
821
|
+
display: flex;
|
|
822
|
+
flex-direction: column;
|
|
823
|
+
align-items: center;
|
|
824
|
+
gap: var(--if-space-4);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
.if-verifyStatus-successIcon {
|
|
828
|
+
width: 4rem;
|
|
829
|
+
height: 4rem;
|
|
830
|
+
border-radius: 9999px;
|
|
831
|
+
background-color: #d1fae5;
|
|
832
|
+
display: flex;
|
|
833
|
+
align-items: center;
|
|
834
|
+
justify-content: center;
|
|
835
|
+
}
|
|
836
|
+
|
|
837
|
+
.if-verifyStatus-successIconSvg {
|
|
838
|
+
width: 2rem;
|
|
839
|
+
height: 2rem;
|
|
840
|
+
color: #059669;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
.if-verifyStatus-textCenter {
|
|
844
|
+
text-align: center;
|
|
845
|
+
}
|
|
846
|
+
|
|
638
847
|
/* ============================================
|
|
639
848
|
UTILITY CLASSES
|
|
640
849
|
============================================ */
|