@ipulsehq/auth-ui 1.3.2
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 +35 -0
- package/dist/AuthError.d.ts +14 -0
- package/dist/AuthError.d.ts.map +1 -0
- package/dist/AuthError.js +92 -0
- package/dist/AuthError.js.map +1 -0
- package/dist/AuthLayout.d.ts +18 -0
- package/dist/AuthLayout.d.ts.map +1 -0
- package/dist/AuthLayout.js +72 -0
- package/dist/AuthLayout.js.map +1 -0
- package/dist/IPulseClientAuthError.d.ts +21 -0
- package/dist/IPulseClientAuthError.d.ts.map +1 -0
- package/dist/IPulseClientAuthError.js +48 -0
- package/dist/IPulseClientAuthError.js.map +1 -0
- package/dist/IPulseRedirectSignIn.d.ts +21 -0
- package/dist/IPulseRedirectSignIn.d.ts.map +1 -0
- package/dist/IPulseRedirectSignIn.js +65 -0
- package/dist/IPulseRedirectSignIn.js.map +1 -0
- package/dist/SignIn.d.ts +24 -0
- package/dist/SignIn.d.ts.map +1 -0
- package/dist/SignIn.js +132 -0
- package/dist/SignIn.js.map +1 -0
- package/dist/SignUp.d.ts +26 -0
- package/dist/SignUp.d.ts.map +1 -0
- package/dist/SignUp.js +96 -0
- package/dist/SignUp.js.map +1 -0
- package/dist/UserButton.d.ts +24 -0
- package/dist/UserButton.d.ts.map +1 -0
- package/dist/UserButton.js +141 -0
- package/dist/UserButton.js.map +1 -0
- package/dist/VerifyRequest.d.ts +11 -0
- package/dist/VerifyRequest.d.ts.map +1 -0
- package/dist/VerifyRequest.js +73 -0
- package/dist/VerifyRequest.js.map +1 -0
- package/dist/auth-config.d.ts +63 -0
- package/dist/auth-config.d.ts.map +1 -0
- package/dist/auth-config.js +234 -0
- package/dist/auth-config.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/shared/AuthAlert.d.ts +11 -0
- package/dist/shared/AuthAlert.d.ts.map +1 -0
- package/dist/shared/AuthAlert.js +34 -0
- package/dist/shared/AuthAlert.js.map +1 -0
- package/dist/shared/AuthButton.d.ts +20 -0
- package/dist/shared/AuthButton.d.ts.map +1 -0
- package/dist/shared/AuthButton.js +84 -0
- package/dist/shared/AuthButton.js.map +1 -0
- package/dist/shared/AuthCard.d.ts +12 -0
- package/dist/shared/AuthCard.d.ts.map +1 -0
- package/dist/shared/AuthCard.js +30 -0
- package/dist/shared/AuthCard.js.map +1 -0
- package/dist/shared/AuthDivider.d.ts +10 -0
- package/dist/shared/AuthDivider.d.ts.map +1 -0
- package/dist/shared/AuthDivider.js +17 -0
- package/dist/shared/AuthDivider.js.map +1 -0
- package/dist/shared/AuthEmailInput.d.ts +17 -0
- package/dist/shared/AuthEmailInput.d.ts.map +1 -0
- package/dist/shared/AuthEmailInput.js +81 -0
- package/dist/shared/AuthEmailInput.js.map +1 -0
- package/dist/shared/AuthFooter.d.ts +14 -0
- package/dist/shared/AuthFooter.d.ts.map +1 -0
- package/dist/shared/AuthFooter.js +21 -0
- package/dist/shared/AuthFooter.js.map +1 -0
- package/dist/shared/AuthHeader.d.ts +13 -0
- package/dist/shared/AuthHeader.d.ts.map +1 -0
- package/dist/shared/AuthHeader.js +38 -0
- package/dist/shared/AuthHeader.js.map +1 -0
- package/dist/shared/AuthTextInput.d.ts +19 -0
- package/dist/shared/AuthTextInput.d.ts.map +1 -0
- package/dist/shared/AuthTextInput.js +81 -0
- package/dist/shared/AuthTextInput.js.map +1 -0
- package/dist/shared/styles.d.ts +6 -0
- package/dist/shared/styles.d.ts.map +1 -0
- package/dist/shared/styles.js +21 -0
- package/dist/shared/styles.js.map +1 -0
- package/dist/types.d.ts +119 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +32 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +50 -0
- package/dist/utils.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# @iPulseHQ/auth-ui
|
|
2
|
+
|
|
3
|
+
iPulse auth: OAuth config, React componenten en utilities voor NextAuth.
|
|
4
|
+
|
|
5
|
+
Repository: https://github.com/iPulseHQ/iPulse
|
|
6
|
+
|
|
7
|
+
Publiceerd via GitHub Packages. Voeg `.npmrc` toe met `@iPulseHQ:registry=https://npm.pkg.github.com` en zorg dat je repo toegang heeft via Package settings.
|
|
8
|
+
|
|
9
|
+
## Installatie
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install @iPulseHQ/auth-ui
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Gebruik
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
// auth.ts
|
|
19
|
+
import NextAuth from 'next-auth'
|
|
20
|
+
import { createIPulseAuthConfig, getIPulseProvider } from '@iPulseHQ/auth-ui'
|
|
21
|
+
|
|
22
|
+
export const { handlers, auth, signIn, signOut } = NextAuth({
|
|
23
|
+
...createIPulseAuthConfig(),
|
|
24
|
+
providers: [getIPulseProvider()],
|
|
25
|
+
// cookies, etc.
|
|
26
|
+
})
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Publiceren
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
cd packages/ipulse-auth-ui
|
|
33
|
+
npm run build
|
|
34
|
+
npm publish
|
|
35
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AuthTranslations } from './types';
|
|
3
|
+
export interface AuthErrorProps {
|
|
4
|
+
error?: string | null;
|
|
5
|
+
errorCode?: string | null;
|
|
6
|
+
onBack?: () => void;
|
|
7
|
+
onRetry?: () => void;
|
|
8
|
+
signInUrl?: string;
|
|
9
|
+
translations?: AuthTranslations['authError'];
|
|
10
|
+
/** When true, render only the inner content (no AuthCard wrapper) for embedding in custom layouts */
|
|
11
|
+
embed?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const AuthError: React.FC<AuthErrorProps>;
|
|
14
|
+
//# sourceMappingURL=AuthError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthError.d.ts","sourceRoot":"","sources":["../src/AuthError.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAIhD,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC7C,qGAAqG;IACrG,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAoCD,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA8G9C,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthError = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const lucide_react_1 = require("lucide-react");
|
|
6
|
+
const AuthCard_1 = require("./shared/AuthCard");
|
|
7
|
+
const utils_1 = require("./utils");
|
|
8
|
+
const BUILT_IN_ERRORS = {
|
|
9
|
+
Configuration: {
|
|
10
|
+
title: 'Configuratiefout',
|
|
11
|
+
description: 'Er is een probleem met de authenticatie configuratie. Neem contact op met ondersteuning.',
|
|
12
|
+
},
|
|
13
|
+
AccessDenied: {
|
|
14
|
+
title: 'Toegang geweigerd',
|
|
15
|
+
description: 'Je hebt geen toegang tot deze applicatie.',
|
|
16
|
+
},
|
|
17
|
+
Verification: {
|
|
18
|
+
title: 'Deze inloglink is niet meer geldig',
|
|
19
|
+
description: 'De verificatielink uit je e-mail is verlopen of is al een keer gebruikt. Elke link kan maar één keer worden gebruikt en is 10 minuten geldig. Ga terug naar inloggen of registreren en vraag een nieuwe link aan.',
|
|
20
|
+
},
|
|
21
|
+
OAuthSignin: {
|
|
22
|
+
title: 'Inlogfout',
|
|
23
|
+
description: 'Er is een fout opgetreden tijdens het inloggen. Probeer het opnieuw.',
|
|
24
|
+
},
|
|
25
|
+
OAuthCallback: {
|
|
26
|
+
title: 'Callback fout',
|
|
27
|
+
description: 'Er is een fout opgetreden bij het verwerken van de inlogpoging.',
|
|
28
|
+
},
|
|
29
|
+
Default: {
|
|
30
|
+
title: 'Authenticatiefout',
|
|
31
|
+
description: 'Er is een onverwachte fout opgetreden. Probeer het opnieuw.',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const DEFAULTS = {
|
|
35
|
+
defaultTitle: BUILT_IN_ERRORS.Default.title,
|
|
36
|
+
defaultDescription: BUILT_IN_ERRORS.Default.description,
|
|
37
|
+
retry: 'Opnieuw proberen',
|
|
38
|
+
backToSignIn: 'Terug naar inloggen',
|
|
39
|
+
};
|
|
40
|
+
const AuthError = ({ error, errorCode, onBack, onRetry, signInUrl, translations: t, embed = false, }) => {
|
|
41
|
+
const labels = { ...DEFAULTS, ...t };
|
|
42
|
+
const errors = { ...BUILT_IN_ERRORS, ...t?.errors };
|
|
43
|
+
const key = errorCode || error || 'Default';
|
|
44
|
+
const info = errors[key] ?? { title: labels.defaultTitle, description: labels.defaultDescription };
|
|
45
|
+
const sharedButtonBase = {
|
|
46
|
+
padding: '0.625rem 1.25rem',
|
|
47
|
+
borderRadius: utils_1.cssVars.radius.md,
|
|
48
|
+
cursor: 'pointer',
|
|
49
|
+
fontSize: '0.875rem',
|
|
50
|
+
fontWeight: 500,
|
|
51
|
+
display: 'inline-flex',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
gap: '0.5rem',
|
|
54
|
+
textDecoration: 'none',
|
|
55
|
+
outline: 'none',
|
|
56
|
+
transition: 'opacity 0.15s, box-shadow 0.15s',
|
|
57
|
+
};
|
|
58
|
+
const content = ((0, jsx_runtime_1.jsxs)("div", { style: { textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
59
|
+
width: '72px',
|
|
60
|
+
height: '72px',
|
|
61
|
+
borderRadius: '50%',
|
|
62
|
+
background: 'color-mix(in oklch, var(--color-destructive, #ef4444) 10%, transparent)',
|
|
63
|
+
display: 'flex',
|
|
64
|
+
alignItems: 'center',
|
|
65
|
+
justifyContent: 'center',
|
|
66
|
+
margin: '0 auto 1.75rem auto',
|
|
67
|
+
animation: 'ipulse-fadein 0.3s ease-out',
|
|
68
|
+
}, children: (0, jsx_runtime_1.jsx)(lucide_react_1.AlertTriangle, { size: 32, style: { color: utils_1.cssVars.destructive } }) }), (0, jsx_runtime_1.jsx)("h1", { style: { fontSize: '1.5rem', fontWeight: 700, margin: '0 0 0.75rem 0', letterSpacing: '-0.025em' }, children: info.title }), (0, jsx_runtime_1.jsx)("p", { style: { margin: '0 0 2rem 0', color: utils_1.cssVars.mutedFg, fontSize: '0.9375rem', lineHeight: 1.6 }, children: info.description }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: '0.75rem', justifyContent: 'center', flexWrap: 'wrap' }, children: [onRetry && ((0, jsx_runtime_1.jsxs)("button", { type: "button", onClick: onRetry, tabIndex: 0, style: {
|
|
69
|
+
...sharedButtonBase,
|
|
70
|
+
backgroundColor: utils_1.cssVars.primary,
|
|
71
|
+
color: utils_1.cssVars.primaryFg,
|
|
72
|
+
border: 'none',
|
|
73
|
+
}, onMouseOver: (e) => (e.currentTarget.style.opacity = '0.88'), onMouseOut: (e) => (e.currentTarget.style.opacity = '1'), onFocus: (e) => {
|
|
74
|
+
e.currentTarget.style.boxShadow = `0 0 0 3px color-mix(in oklch, ${utils_1.cssVars.primary} 30%, transparent)`;
|
|
75
|
+
}, onBlur: (e) => {
|
|
76
|
+
e.currentTarget.style.boxShadow = 'none';
|
|
77
|
+
}, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCcw, { size: 14 }), labels.retry] })), (onBack || signInUrl) && ((0, jsx_runtime_1.jsxs)("a", { href: signInUrl || '#', tabIndex: 0, onClick: onBack ? (e) => { e.preventDefault(); onBack(); } : undefined, style: {
|
|
78
|
+
...sharedButtonBase,
|
|
79
|
+
border: `1.5px solid ${utils_1.cssVars.border}`,
|
|
80
|
+
backgroundColor: 'transparent',
|
|
81
|
+
color: utils_1.cssVars.fg,
|
|
82
|
+
}, onMouseOver: (e) => (e.currentTarget.style.backgroundColor = utils_1.cssVars.muted), onMouseOut: (e) => (e.currentTarget.style.backgroundColor = 'transparent'), onFocus: (e) => {
|
|
83
|
+
e.currentTarget.style.boxShadow = `0 0 0 3px color-mix(in oklch, ${utils_1.cssVars.primary} 15%, transparent)`;
|
|
84
|
+
}, onBlur: (e) => {
|
|
85
|
+
e.currentTarget.style.boxShadow = 'none';
|
|
86
|
+
}, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { size: 14 }), labels.backToSignIn] }))] })] }));
|
|
87
|
+
if (embed)
|
|
88
|
+
return content;
|
|
89
|
+
return (0, jsx_runtime_1.jsx)(AuthCard_1.AuthCard, { children: content });
|
|
90
|
+
};
|
|
91
|
+
exports.AuthError = AuthError;
|
|
92
|
+
//# sourceMappingURL=AuthError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthError.js","sourceRoot":"","sources":["../src/AuthError.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AuthBranding } from './types';
|
|
3
|
+
export interface AuthLayoutProps {
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
branding?: AuthBranding;
|
|
6
|
+
/** Feature list shown on the left panel (desktop only) */
|
|
7
|
+
features?: Array<{
|
|
8
|
+
icon: React.ReactNode;
|
|
9
|
+
title: string;
|
|
10
|
+
description: string;
|
|
11
|
+
}>;
|
|
12
|
+
/** Additional content top-right (e.g. language switcher, theme toggle) */
|
|
13
|
+
topRight?: React.ReactNode;
|
|
14
|
+
/** Additional content top-left (e.g. back button, home logo) */
|
|
15
|
+
topLeft?: React.ReactNode;
|
|
16
|
+
}
|
|
17
|
+
export declare const AuthLayout: React.FC<AuthLayoutProps>;
|
|
18
|
+
//# sourceMappingURL=AuthLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthLayout.d.ts","sourceRoot":"","sources":["../src/AuthLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,gEAAgE;IAChE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsKhD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthLayout = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
const styles_1 = require("./shared/styles");
|
|
7
|
+
const AuthLayout = ({ children, branding, features, topRight, topLeft, }) => {
|
|
8
|
+
const showLeftPanel = !!(features?.length || branding);
|
|
9
|
+
return ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
10
|
+
minHeight: '100vh',
|
|
11
|
+
backgroundColor: 'var(--color-background, #f9fafb)',
|
|
12
|
+
position: 'relative',
|
|
13
|
+
fontFamily: 'inherit',
|
|
14
|
+
}, children: [(topLeft || topRight) && ((0, jsx_runtime_1.jsxs)("div", { style: {
|
|
15
|
+
position: 'absolute',
|
|
16
|
+
top: '1rem',
|
|
17
|
+
left: '1.25rem',
|
|
18
|
+
right: '1.25rem',
|
|
19
|
+
display: 'flex',
|
|
20
|
+
justifyContent: 'space-between',
|
|
21
|
+
alignItems: 'center',
|
|
22
|
+
zIndex: 10,
|
|
23
|
+
}, children: [(0, jsx_runtime_1.jsx)("div", { children: topLeft }), (0, jsx_runtime_1.jsx)("div", { children: topRight })] })), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', minHeight: '100vh' }, children: [showLeftPanel && ((0, jsx_runtime_1.jsxs)("div", { className: "ipulse-auth-left-panel", style: {
|
|
24
|
+
display: 'none',
|
|
25
|
+
flex: '0 0 50%',
|
|
26
|
+
maxWidth: '50%',
|
|
27
|
+
flexDirection: 'column',
|
|
28
|
+
justifyContent: 'center',
|
|
29
|
+
padding: '4rem 3rem 4rem 4rem',
|
|
30
|
+
borderRight: `1px solid ${utils_1.cssVars.borderMuted}`,
|
|
31
|
+
background: 'var(--color-background, #ffffff)',
|
|
32
|
+
}, children: [branding && ((0, jsx_runtime_1.jsx)("div", { style: { marginBottom: '3rem' }, children: (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'center', gap: '0.875rem', marginBottom: '0.75rem' }, children: [branding.logoFallbackIcon && ((0, jsx_runtime_1.jsx)("div", { children: branding.logoFallbackIcon })), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h1", { style: {
|
|
33
|
+
fontSize: '1.75rem',
|
|
34
|
+
fontWeight: 700,
|
|
35
|
+
margin: 0,
|
|
36
|
+
letterSpacing: '-0.03em',
|
|
37
|
+
}, children: branding.appName }), branding.tagline && ((0, jsx_runtime_1.jsx)("p", { style: { margin: 0, fontSize: '0.875rem', color: utils_1.cssVars.mutedFg }, children: branding.tagline }))] })] }) })), features && features.length > 0 && ((0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: '1.75rem' }, children: features.map((feature, i) => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '1rem' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
38
|
+
width: '40px',
|
|
39
|
+
height: '40px',
|
|
40
|
+
borderRadius: utils_1.cssVars.radius.lg,
|
|
41
|
+
backgroundColor: `color-mix(in oklch, ${utils_1.cssVars.primary} 10%, transparent)`,
|
|
42
|
+
display: 'flex',
|
|
43
|
+
alignItems: 'center',
|
|
44
|
+
justifyContent: 'center',
|
|
45
|
+
flexShrink: 0,
|
|
46
|
+
color: utils_1.cssVars.primary,
|
|
47
|
+
}, children: feature.icon }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { style: {
|
|
48
|
+
margin: '0 0 0.25rem 0',
|
|
49
|
+
fontWeight: 600,
|
|
50
|
+
fontSize: '0.9375rem',
|
|
51
|
+
}, children: feature.title }), (0, jsx_runtime_1.jsx)("p", { style: {
|
|
52
|
+
margin: 0,
|
|
53
|
+
fontSize: '0.875rem',
|
|
54
|
+
color: utils_1.cssVars.mutedFg,
|
|
55
|
+
lineHeight: 1.6,
|
|
56
|
+
}, children: feature.description })] })] }, i))) })), branding?.poweredBy !== false && ((0, jsx_runtime_1.jsxs)("p", { style: { marginTop: '3rem', fontSize: '0.75rem', color: utils_1.cssVars.mutedFg }, children: ["Beveiligd door", ' ', (0, jsx_runtime_1.jsx)("a", { href: branding?.links?.home || 'https://ipulse.one', target: "_blank", rel: "noopener noreferrer", style: { color: 'inherit', fontWeight: 500, textDecoration: 'underline' }, children: "iPulse Auth" })] }))] })), (0, jsx_runtime_1.jsx)("div", { style: {
|
|
57
|
+
flex: 1,
|
|
58
|
+
display: 'flex',
|
|
59
|
+
alignItems: 'center',
|
|
60
|
+
justifyContent: 'center',
|
|
61
|
+
padding: '5rem 1.5rem 2rem',
|
|
62
|
+
}, children: (0, jsx_runtime_1.jsx)("div", { style: { width: '100%', maxWidth: '440px' }, children: children }) })] }), (0, jsx_runtime_1.jsx)("style", { children: `
|
|
63
|
+
${styles_1.AUTH_KEYFRAMES}
|
|
64
|
+
@media (min-width: 1024px) {
|
|
65
|
+
.ipulse-auth-left-panel {
|
|
66
|
+
display: flex !important;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
` })] }));
|
|
70
|
+
};
|
|
71
|
+
exports.AuthLayout = AuthLayout;
|
|
72
|
+
//# sourceMappingURL=AuthLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthLayout.js","sourceRoot":"","sources":["../src/AuthLayout.tsx"],"names":[],"mappings":";;;;AACA,mCAAkC;AAClC,4CAAiD;AAkB1C,MAAM,UAAU,GAA8B,CAAC,EAClD,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,GACV,EAAE,EAAE;IACD,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,QAAQ,CAAC,CAAC;IAEvD,OAAO,CACH,iCACI,KAAK,EAAE;YACH,SAAS,EAAE,OAAO;YAClB,eAAe,EAAE,kCAAkC;YACnD,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,SAAS;SACxB,aAEA,CAAC,OAAO,IAAI,QAAQ,CAAC,IAAI,CACtB,iCACI,KAAK,EAAE;oBACH,QAAQ,EAAE,UAAU;oBACpB,GAAG,EAAE,MAAM;oBACX,IAAI,EAAE,SAAS;oBACf,KAAK,EAAE,SAAS;oBAChB,OAAO,EAAE,MAAM;oBACf,cAAc,EAAE,eAAe;oBAC/B,UAAU,EAAE,QAAQ;oBACpB,MAAM,EAAE,EAAE;iBACb,aAED,0CAAM,OAAO,GAAO,EACpB,0CAAM,QAAQ,GAAO,IACnB,CACT,EAED,iCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,aAE9C,aAAa,IAAI,CACd,iCACI,SAAS,EAAC,wBAAwB,EAClC,KAAK,EAAE;4BACH,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,SAAS;4BACf,QAAQ,EAAE,KAAK;4BACf,aAAa,EAAE,QAAQ;4BACvB,cAAc,EAAE,QAAQ;4BACxB,OAAO,EAAE,qBAAqB;4BAC9B,WAAW,EAAE,aAAa,eAAO,CAAC,WAAW,EAAE;4BAC/C,UAAU,EAAE,kCAAkC;yBACjD,aAEA,QAAQ,IAAI,CACT,gCAAK,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAChC,iCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAC1F,QAAQ,CAAC,gBAAgB,IAAI,CAC1B,0CAAM,QAAQ,CAAC,gBAAgB,GAAO,CACzC,EACD,4CACI,+BACI,KAAK,EAAE;wDACH,QAAQ,EAAE,SAAS;wDACnB,UAAU,EAAE,GAAG;wDACf,MAAM,EAAE,CAAC;wDACT,aAAa,EAAE,SAAS;qDAC3B,YAEA,QAAQ,CAAC,OAAO,GAChB,EACJ,QAAQ,CAAC,OAAO,IAAI,CACjB,8BAAG,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,eAAO,CAAC,OAAO,EAAE,YAChE,QAAQ,CAAC,OAAO,GACjB,CACP,IACC,IACJ,GACJ,CACT,EAEA,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAChC,gCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,YACnE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1B,iCAAa,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,aAC1E,gCACI,KAAK,EAAE;gDACH,KAAK,EAAE,MAAM;gDACb,MAAM,EAAE,MAAM;gDACd,YAAY,EAAE,eAAO,CAAC,MAAM,CAAC,EAAE;gDAC/B,eAAe,EAAE,uBAAuB,eAAO,CAAC,OAAO,oBAAoB;gDAC3E,OAAO,EAAE,MAAM;gDACf,UAAU,EAAE,QAAQ;gDACpB,cAAc,EAAE,QAAQ;gDACxB,UAAU,EAAE,CAAC;gDACb,KAAK,EAAE,eAAO,CAAC,OAAO;6CACzB,YAEA,OAAO,CAAC,IAAI,GACX,EACN,4CACI,+BACI,KAAK,EAAE;wDACH,MAAM,EAAE,eAAe;wDACvB,UAAU,EAAE,GAAG;wDACf,QAAQ,EAAE,WAAW;qDACxB,YAEA,OAAO,CAAC,KAAK,GACb,EACL,8BACI,KAAK,EAAE;wDACH,MAAM,EAAE,CAAC;wDACT,QAAQ,EAAE,UAAU;wDACpB,KAAK,EAAE,eAAO,CAAC,OAAO;wDACtB,UAAU,EAAE,GAAG;qDAClB,YAEA,OAAO,CAAC,WAAW,GACpB,IACF,KApCA,CAAC,CAqCL,CACT,CAAC,GACA,CACT,EAEA,QAAQ,EAAE,SAAS,KAAK,KAAK,IAAI,CAC9B,+BAAG,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,eAAO,CAAC,OAAO,EAAE,+BACzD,GAAG,EAClB,8BACI,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,IAAI,oBAAoB,EACnD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,4BAGzE,IACJ,CACP,IACC,CACT,EAGD,gCACI,KAAK,EAAE;4BACH,IAAI,EAAE,CAAC;4BACP,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,QAAQ;4BACpB,cAAc,EAAE,QAAQ;4BACxB,OAAO,EAAE,kBAAkB;yBAC9B,YAED,gCAAK,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,YAC3C,QAAQ,GACP,GACJ,IACJ,EAEN,4CAAQ;kBACF,uBAAc;;;;;;aAMnB,GAAS,IACR,CACT,CAAC;AACN,CAAC,CAAC;AAtKW,QAAA,UAAU,cAsKrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface IPulseClientAuthErrorProps {
|
|
3
|
+
/** URL for retry/sign-in button */
|
|
4
|
+
signInUrl?: string;
|
|
5
|
+
/** URL for home button */
|
|
6
|
+
homeUrl?: string;
|
|
7
|
+
/** Title (default: "Authenticatiefout") */
|
|
8
|
+
title?: string;
|
|
9
|
+
/** Description (default: "Er is iets misgegaan bij het inloggen...") */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** Retry button label (default: "Opnieuw proberen") */
|
|
12
|
+
retryLabel?: string;
|
|
13
|
+
/** Home button label (default: "Terug naar home") */
|
|
14
|
+
homeLabel?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Simple auth error page for iPulse OAuth clients (PulseFiles, PulseSync).
|
|
18
|
+
* Use as auth-error page.
|
|
19
|
+
*/
|
|
20
|
+
export declare const IPulseClientAuthError: React.FC<IPulseClientAuthErrorProps>;
|
|
21
|
+
//# sourceMappingURL=IPulseClientAuthError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPulseClientAuthError.d.ts","sourceRoot":"","sources":["../src/IPulseClientAuthError.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,0BAA0B;IACzC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAsEtE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.IPulseClientAuthError = void 0;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const lucide_react_1 = require("lucide-react");
|
|
7
|
+
/**
|
|
8
|
+
* Simple auth error page for iPulse OAuth clients (PulseFiles, PulseSync).
|
|
9
|
+
* Use as auth-error page.
|
|
10
|
+
*/
|
|
11
|
+
const IPulseClientAuthError = ({ signInUrl = '/sign-in', homeUrl = '/', title = 'Authenticatiefout', description = "Er is iets misgegaan bij het inloggen. Probeer het opnieuw of neem contact op met support.", retryLabel = 'Opnieuw proberen', homeLabel = 'Terug naar home', }) => {
|
|
12
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
13
|
+
minHeight: '100vh',
|
|
14
|
+
display: 'flex',
|
|
15
|
+
flexDirection: 'column',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
justifyContent: 'center',
|
|
18
|
+
padding: '1rem',
|
|
19
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: { maxWidth: '28rem', width: '100%', textAlign: 'center' }, children: [(0, jsx_runtime_1.jsx)("div", { style: {
|
|
20
|
+
width: '4rem',
|
|
21
|
+
height: '4rem',
|
|
22
|
+
borderRadius: '50%',
|
|
23
|
+
background: 'color-mix(in oklch, var(--color-destructive, #ef4444) 10%, transparent)',
|
|
24
|
+
display: 'flex',
|
|
25
|
+
alignItems: 'center',
|
|
26
|
+
justifyContent: 'center',
|
|
27
|
+
margin: '0 auto 1.5rem auto',
|
|
28
|
+
}, children: (0, jsx_runtime_1.jsx)(lucide_react_1.AlertTriangle, { size: 32, style: { color: 'var(--color-destructive, #ef4444)' } }) }), (0, jsx_runtime_1.jsx)("h1", { style: { fontSize: '1.5rem', fontWeight: 700, margin: '0 0 0.5rem 0' }, children: title }), (0, jsx_runtime_1.jsx)("p", { style: { color: 'var(--color-muted-foreground)', margin: '0 0 1.5rem 0' }, children: description }), (0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', gap: '1rem', justifyContent: 'center', flexWrap: 'wrap' }, children: [(0, jsx_runtime_1.jsx)("a", { href: signInUrl, style: {
|
|
29
|
+
padding: '0.5rem 1.25rem',
|
|
30
|
+
borderRadius: '0.375rem',
|
|
31
|
+
backgroundColor: 'var(--color-primary)',
|
|
32
|
+
color: 'var(--color-primary-foreground, white)',
|
|
33
|
+
fontWeight: 500,
|
|
34
|
+
textDecoration: 'none',
|
|
35
|
+
fontSize: '0.875rem',
|
|
36
|
+
}, children: retryLabel }), (0, jsx_runtime_1.jsx)("a", { href: homeUrl, style: {
|
|
37
|
+
padding: '0.5rem 1.25rem',
|
|
38
|
+
borderRadius: '0.375rem',
|
|
39
|
+
border: '1px solid var(--color-border)',
|
|
40
|
+
backgroundColor: 'transparent',
|
|
41
|
+
color: 'inherit',
|
|
42
|
+
fontWeight: 500,
|
|
43
|
+
textDecoration: 'none',
|
|
44
|
+
fontSize: '0.875rem',
|
|
45
|
+
}, children: homeLabel })] })] }) }));
|
|
46
|
+
};
|
|
47
|
+
exports.IPulseClientAuthError = IPulseClientAuthError;
|
|
48
|
+
//# sourceMappingURL=IPulseClientAuthError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPulseClientAuthError.js","sourceRoot":"","sources":["../src/IPulseClientAuthError.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;AAGb,+CAA6C;AAiB7C;;;GAGG;AACI,MAAM,qBAAqB,GAAyC,CAAC,EAC1E,SAAS,GAAG,UAAU,EACtB,OAAO,GAAG,GAAG,EACb,KAAK,GAAG,mBAAmB,EAC3B,WAAW,GAAG,4FAA4F,EAC1G,UAAU,GAAG,kBAAkB,EAC/B,SAAS,GAAG,iBAAiB,GAC9B,EAAE,EAAE;IACH,OAAO,CACL,gCACE,KAAK,EAAE;YACL,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,OAAO,EAAE,MAAM;SAChB,YAED,iCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,aACnE,gCACE,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,YAAY,EAAE,KAAK;wBACnB,UAAU,EAAE,yEAAyE;wBACrF,OAAO,EAAE,MAAM;wBACf,UAAU,EAAE,QAAQ;wBACpB,cAAc,EAAE,QAAQ;wBACxB,MAAM,EAAE,oBAAoB;qBAC7B,YAED,uBAAC,4BAAa,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,mCAAmC,EAAE,GAAI,GAC9E,EACN,+BAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,YAAG,KAAK,GAAM,EACxF,8BAAG,KAAK,EAAE,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,cAAc,EAAE,YAAG,WAAW,GAAK,EAC/F,iCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aACtF,8BACE,IAAI,EAAE,SAAS,EACf,KAAK,EAAE;gCACL,OAAO,EAAE,gBAAgB;gCACzB,YAAY,EAAE,UAAU;gCACxB,eAAe,EAAE,sBAAsB;gCACvC,KAAK,EAAE,wCAAwC;gCAC/C,UAAU,EAAE,GAAG;gCACf,cAAc,EAAE,MAAM;gCACtB,QAAQ,EAAE,UAAU;6BACrB,YAEA,UAAU,GACT,EACJ,8BACE,IAAI,EAAE,OAAO,EACb,KAAK,EAAE;gCACL,OAAO,EAAE,gBAAgB;gCACzB,YAAY,EAAE,UAAU;gCACxB,MAAM,EAAE,+BAA+B;gCACvC,eAAe,EAAE,aAAa;gCAC9B,KAAK,EAAE,SAAS;gCAChB,UAAU,EAAE,GAAG;gCACf,cAAc,EAAE,MAAM;gCACtB,QAAQ,EAAE,UAAU;6BACrB,YAEA,SAAS,GACR,IACA,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AAtEW,QAAA,qBAAqB,yBAsEhC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { LucideIcon } from 'lucide-react';
|
|
3
|
+
export interface IPulseRedirectSignInFeature {
|
|
4
|
+
icon: LucideIcon;
|
|
5
|
+
title: string;
|
|
6
|
+
description: string;
|
|
7
|
+
}
|
|
8
|
+
export interface IPulseRedirectSignInProps {
|
|
9
|
+
/** Callback URL after sign-in */
|
|
10
|
+
callbackUrl?: string;
|
|
11
|
+
/** Features to show while redirecting */
|
|
12
|
+
features: IPulseRedirectSignInFeature[];
|
|
13
|
+
/** Loading text (default: "Doorverwijzen naar iPulse om in te loggen...") */
|
|
14
|
+
loadingText?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sign-in page for iPulse OAuth clients. Redirects to iPulse login.
|
|
18
|
+
* Use in PulseFiles, PulseSync, etc.
|
|
19
|
+
*/
|
|
20
|
+
export declare const IPulseRedirectSignIn: React.FC<IPulseRedirectSignInProps>;
|
|
21
|
+
//# sourceMappingURL=IPulseRedirectSignIn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPulseRedirectSignIn.d.ts","sourceRoot":"","sources":["../src/IPulseRedirectSignIn.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,yBAAyB;IACxC,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,EAAE,2BAA2B,EAAE,CAAC;IACxC,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAqDpE,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.IPulseRedirectSignIn = void 0;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const React = __importStar(require("react"));
|
|
40
|
+
const react_1 = require("next-auth/react");
|
|
41
|
+
/**
|
|
42
|
+
* Sign-in page for iPulse OAuth clients. Redirects to iPulse login.
|
|
43
|
+
* Use in PulseFiles, PulseSync, etc.
|
|
44
|
+
*/
|
|
45
|
+
const IPulseRedirectSignIn = ({ callbackUrl = '/', features, loadingText = 'Doorverwijzen naar iPulse om in te loggen...', }) => {
|
|
46
|
+
React.useEffect(() => {
|
|
47
|
+
(0, react_1.signIn)('ipulse', { callbackUrl });
|
|
48
|
+
}, [callbackUrl]);
|
|
49
|
+
return ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
50
|
+
minHeight: '100vh',
|
|
51
|
+
display: 'flex',
|
|
52
|
+
alignItems: 'center',
|
|
53
|
+
justifyContent: 'center',
|
|
54
|
+
padding: '1rem',
|
|
55
|
+
}, children: (0, jsx_runtime_1.jsxs)("div", { style: { textAlign: 'center', maxWidth: '28rem', padding: '0 1rem' }, children: [(0, jsx_runtime_1.jsx)("div", { className: "animate-spin", style: {
|
|
56
|
+
width: '3rem',
|
|
57
|
+
height: '3rem',
|
|
58
|
+
border: '2px solid var(--color-primary, oklch(0.52 0.19 238.36))',
|
|
59
|
+
borderTopColor: 'transparent',
|
|
60
|
+
borderRadius: '50%',
|
|
61
|
+
margin: '0 auto 1.5rem auto',
|
|
62
|
+
} }), (0, jsx_runtime_1.jsx)("p", { style: { color: 'var(--color-muted-foreground, #71717a)', marginBottom: '2rem' }, children: loadingText }), (0, jsx_runtime_1.jsx)("div", { style: { display: 'flex', flexDirection: 'column', gap: '1rem', textAlign: 'left' }, children: features.map((feature, i) => ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', alignItems: 'flex-start', gap: '0.75rem' }, children: [(0, jsx_runtime_1.jsx)(feature.icon, { size: 20, style: { color: 'var(--color-primary)', flexShrink: 0, marginTop: 2 } }), (0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("h3", { style: { fontWeight: 500, margin: 0 }, children: feature.title }), (0, jsx_runtime_1.jsx)("p", { style: { fontSize: '0.875rem', color: 'var(--color-muted-foreground)', margin: '0.25rem 0 0 0' }, children: feature.description })] })] }, i))) })] }) }));
|
|
63
|
+
};
|
|
64
|
+
exports.IPulseRedirectSignIn = IPulseRedirectSignIn;
|
|
65
|
+
//# sourceMappingURL=IPulseRedirectSignIn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IPulseRedirectSignIn.js","sourceRoot":"","sources":["../src/IPulseRedirectSignIn.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEb,6CAA+B;AAC/B,2CAAyC;AAkBzC;;;GAGG;AACI,MAAM,oBAAoB,GAAwC,CAAC,EACxE,WAAW,GAAG,GAAG,EACjB,QAAQ,EACR,WAAW,GAAG,8CAA8C,GAC7D,EAAE,EAAE;IACH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAA,cAAM,EAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,gCACE,KAAK,EAAE;YACL,SAAS,EAAE,OAAO;YAClB,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ;YACxB,OAAO,EAAE,MAAM;SAChB,YAED,iCAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,aACvE,gCACE,SAAS,EAAC,cAAc,EACxB,KAAK,EAAE;wBACL,KAAK,EAAE,MAAM;wBACb,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,yDAAyD;wBACjE,cAAc,EAAE,aAAa;wBAC7B,YAAY,EAAE,KAAK;wBACnB,MAAM,EAAE,oBAAoB;qBAC7B,GACD,EACF,8BAAG,KAAK,EAAE,EAAE,KAAK,EAAE,wCAAwC,EAAE,YAAY,EAAE,MAAM,EAAE,YAChF,WAAW,GACV,EACJ,gCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YACrF,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAC5B,iCAAa,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,aAC/E,uBAAC,OAAO,CAAC,IAAI,IACX,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,GACrE,EACF,4CACE,+BAAI,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,YAAG,OAAO,CAAC,KAAK,GAAM,EAC/D,8BAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,+BAA+B,EAAE,MAAM,EAAE,eAAe,EAAE,YAChG,OAAO,CAAC,WAAW,GAClB,IACA,KAVE,CAAC,CAWL,CACP,CAAC,GACE,IACF,GACF,CACP,CAAC;AACJ,CAAC,CAAC;AArDW,QAAA,oBAAoB,wBAqD/B"}
|
package/dist/SignIn.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AuthBranding, AuthTranslations } from './types';
|
|
3
|
+
export interface SignInProps {
|
|
4
|
+
/** Called with email when user clicks "Send magic link" */
|
|
5
|
+
onEmailSubmit?: (email: string) => void | Promise<void>;
|
|
6
|
+
/** Called when user clicks passkey button (after entering email) */
|
|
7
|
+
onPasskeyClick?: () => void | Promise<void>;
|
|
8
|
+
/** Called when user clicks Google sign-in */
|
|
9
|
+
onGoogleClick?: () => void | Promise<void>;
|
|
10
|
+
/** Whether auth is in progress */
|
|
11
|
+
isLoading?: boolean;
|
|
12
|
+
/** Custom branding */
|
|
13
|
+
branding?: AuthBranding;
|
|
14
|
+
/** Custom translations / labels */
|
|
15
|
+
translations?: AuthTranslations['signIn'];
|
|
16
|
+
/** Show sign-up link */
|
|
17
|
+
signUpUrl?: string;
|
|
18
|
+
/** Error message to display */
|
|
19
|
+
error?: string | null;
|
|
20
|
+
/** Success message (e.g. after email sent) */
|
|
21
|
+
success?: string | null;
|
|
22
|
+
}
|
|
23
|
+
export declare const SignIn: React.FC<SignInProps>;
|
|
24
|
+
//# sourceMappingURL=SignIn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../src/SignIn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAU9D,MAAM,WAAW,WAAW;IACxB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,mCAAmC;IACnC,YAAY,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAyBD,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAoMxC,CAAC"}
|
package/dist/SignIn.js
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SignIn = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const lucide_react_1 = require("lucide-react");
|
|
40
|
+
const AuthCard_1 = require("./shared/AuthCard");
|
|
41
|
+
const AuthAlert_1 = require("./shared/AuthAlert");
|
|
42
|
+
const AuthHeader_1 = require("./shared/AuthHeader");
|
|
43
|
+
const AuthFooter_1 = require("./shared/AuthFooter");
|
|
44
|
+
const AuthEmailInput_1 = require("./shared/AuthEmailInput");
|
|
45
|
+
const AuthDivider_1 = require("./shared/AuthDivider");
|
|
46
|
+
const AuthButton_1 = require("./shared/AuthButton");
|
|
47
|
+
const utils_1 = require("./utils");
|
|
48
|
+
const DEFAULTS = {
|
|
49
|
+
title: 'Inloggen',
|
|
50
|
+
subtitle: 'Log in bij iPulse of registreer om verder te gaan',
|
|
51
|
+
emailLabel: 'E-mailadres',
|
|
52
|
+
emailPlaceholder: 'naam@bedrijf.nl',
|
|
53
|
+
emailButton: 'Verder',
|
|
54
|
+
passkeyButton: 'Doorgaan met passkey',
|
|
55
|
+
magicLinkButton: 'Stuur magische link',
|
|
56
|
+
googleButton: 'Doorgaan met Google',
|
|
57
|
+
methodTitle: 'Hoe wil je inloggen?',
|
|
58
|
+
methodSubtitle: 'Kies een methode voor',
|
|
59
|
+
backButton: 'Terug',
|
|
60
|
+
orDivider: 'of',
|
|
61
|
+
loadingText: 'Bezig...',
|
|
62
|
+
footer: 'Gegarandeerd beveiligd door iPulse Auth',
|
|
63
|
+
noAccount: 'Geen account?',
|
|
64
|
+
signUpLink: 'Registreer gratis',
|
|
65
|
+
termsLabel: 'Voorwaarden',
|
|
66
|
+
privacyLabel: 'Privacy',
|
|
67
|
+
};
|
|
68
|
+
const SignIn = ({ onEmailSubmit, onPasskeyClick, onGoogleClick, isLoading = false, branding, translations: t, signUpUrl, error, success, }) => {
|
|
69
|
+
const [email, setEmail] = React.useState('');
|
|
70
|
+
const [step, setStep] = React.useState('email');
|
|
71
|
+
const labels = { ...DEFAULTS, ...t };
|
|
72
|
+
const title = branding?.appName
|
|
73
|
+
? `Inloggen bij ${branding.appName}`
|
|
74
|
+
: labels.title;
|
|
75
|
+
const handleEmailNext = (e) => {
|
|
76
|
+
e.preventDefault();
|
|
77
|
+
if (email.trim() && !isLoading) {
|
|
78
|
+
setStep('method');
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
const handleKeyDown = (e) => {
|
|
82
|
+
if (e.key === 'Enter') {
|
|
83
|
+
e.preventDefault();
|
|
84
|
+
if (email.trim() && !isLoading) {
|
|
85
|
+
setStep('method');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const handleMagicLink = async () => {
|
|
90
|
+
if (onEmailSubmit && email.trim() && !isLoading) {
|
|
91
|
+
await onEmailSubmit(email.trim());
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const handlePasskey = async () => {
|
|
95
|
+
if (onPasskeyClick && !isLoading) {
|
|
96
|
+
await onPasskeyClick();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const handleGoogle = async () => {
|
|
100
|
+
if (onGoogleClick && !isLoading) {
|
|
101
|
+
await onGoogleClick();
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const handleBack = () => {
|
|
105
|
+
setStep('email');
|
|
106
|
+
};
|
|
107
|
+
const def = DEFAULTS;
|
|
108
|
+
return ((0, jsx_runtime_1.jsxs)(AuthCard_1.AuthCard, { children: [(0, jsx_runtime_1.jsx)(AuthHeader_1.AuthHeader, { branding: branding, title: title, subtitle: labels.subtitle }), error && (0, jsx_runtime_1.jsx)(AuthAlert_1.AuthAlert, { type: "error", message: error }), success && (0, jsx_runtime_1.jsx)(AuthAlert_1.AuthAlert, { type: "success", message: success }), step === 'email' && ((0, jsx_runtime_1.jsxs)("form", { onSubmit: handleEmailNext, noValidate: true, style: { display: 'flex', flexDirection: 'column', gap: '1.25rem' }, children: [(0, jsx_runtime_1.jsx)(AuthEmailInput_1.AuthEmailInput, { id: "ipulse-signin-email", value: email, onChange: setEmail, placeholder: labels.emailPlaceholder ?? def.emailPlaceholder, label: labels.emailLabel ?? def.emailLabel, disabled: isLoading, autoFocus: true, onKeyDown: handleKeyDown }), (0, jsx_runtime_1.jsxs)(AuthButton_1.AuthPrimaryButton, { type: "submit", disabled: !email.trim(), loading: isLoading, loadingText: labels.loadingText ?? def.loadingText, tabIndex: 0, children: [labels.emailButton ?? def.emailButton, (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowRight, { size: 16, style: { flexShrink: 0 } })] }), onGoogleClick && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(AuthDivider_1.AuthDivider, { label: labels.orDivider ?? def.orDivider }), (0, jsx_runtime_1.jsxs)(AuthButton_1.AuthOutlineButton, { type: "button", onClick: handleGoogle, disabled: isLoading, tabIndex: 0, children: [(0, jsx_runtime_1.jsx)(GoogleIcon, {}), labels.googleButton ?? def.googleButton] })] }))] })), step === 'method' && ((0, jsx_runtime_1.jsxs)("div", { style: { display: 'flex', flexDirection: 'column', gap: '1.25rem' }, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
|
|
109
|
+
display: 'flex',
|
|
110
|
+
alignItems: 'center',
|
|
111
|
+
gap: '0.5rem',
|
|
112
|
+
padding: '0.625rem 0.875rem',
|
|
113
|
+
borderRadius: '0.5rem',
|
|
114
|
+
background: utils_1.cssVars.muted,
|
|
115
|
+
border: `1px solid ${utils_1.cssVars.border}`,
|
|
116
|
+
fontSize: '0.875rem',
|
|
117
|
+
color: utils_1.cssVars.mutedFg,
|
|
118
|
+
}, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Mail, { size: 14, style: { flexShrink: 0 } }), (0, jsx_runtime_1.jsx)("span", { style: { flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }, children: email }), (0, jsx_runtime_1.jsx)("button", { type: "button", onClick: handleBack, style: {
|
|
119
|
+
background: 'none',
|
|
120
|
+
border: 'none',
|
|
121
|
+
cursor: 'pointer',
|
|
122
|
+
color: utils_1.cssVars.primary,
|
|
123
|
+
fontSize: '0.75rem',
|
|
124
|
+
fontWeight: 500,
|
|
125
|
+
padding: '0',
|
|
126
|
+
flexShrink: 0,
|
|
127
|
+
}, children: labels.backButton ?? def.backButton })] }), (0, jsx_runtime_1.jsxs)(AuthButton_1.AuthPrimaryButton, { type: "button", onClick: handleMagicLink, loading: isLoading, loadingText: labels.loadingText ?? def.loadingText, tabIndex: 0, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Mail, { size: 16, style: { flexShrink: 0 } }), labels.magicLinkButton ?? def.magicLinkButton] }), onPasskeyClick && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(AuthDivider_1.AuthDivider, { label: labels.orDivider ?? def.orDivider }), (0, jsx_runtime_1.jsxs)(AuthButton_1.AuthOutlineButton, { type: "button", onClick: handlePasskey, disabled: isLoading, tabIndex: 0, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Fingerprint, { size: 18, style: { flexShrink: 0 } }), labels.passkeyButton ?? def.passkeyButton] })] }))] })), signUpUrl && ((0, jsx_runtime_1.jsxs)("p", { style: { textAlign: 'center', marginTop: '1.5rem', fontSize: '0.875rem', color: utils_1.cssVars.mutedFg }, children: [labels.noAccount ?? def.noAccount, ' ', (0, jsx_runtime_1.jsx)("a", { href: signUpUrl, tabIndex: 0, style: { color: utils_1.cssVars.primary, fontWeight: 500, textDecoration: 'none' }, onMouseOver: (e) => (e.currentTarget.style.textDecoration = 'underline'), onMouseOut: (e) => (e.currentTarget.style.textDecoration = 'none'), children: labels.signUpLink ?? def.signUpLink })] })), (0, jsx_runtime_1.jsx)(AuthFooter_1.AuthFooter, { branding: branding, text: labels.footer ?? def.footer, termsLabel: labels.termsLabel ?? def.termsLabel, privacyLabel: labels.privacyLabel ?? def.privacyLabel })] }));
|
|
128
|
+
};
|
|
129
|
+
exports.SignIn = SignIn;
|
|
130
|
+
// Inline SVG Google logo to avoid extra dependencies
|
|
131
|
+
const GoogleIcon = () => ((0, jsx_runtime_1.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", "aria-hidden": "true", style: { flexShrink: 0 }, children: [(0, jsx_runtime_1.jsx)("path", { d: "M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z", fill: "#4285F4" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z", fill: "#34A853" }), (0, jsx_runtime_1.jsx)("path", { d: "M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l3.66-2.84z", fill: "#FBBC05" }), (0, jsx_runtime_1.jsx)("path", { d: "M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z", fill: "#EA4335" })] }));
|
|
132
|
+
//# sourceMappingURL=SignIn.js.map
|