@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.
Files changed (86) hide show
  1. package/README.md +35 -0
  2. package/dist/AuthError.d.ts +14 -0
  3. package/dist/AuthError.d.ts.map +1 -0
  4. package/dist/AuthError.js +92 -0
  5. package/dist/AuthError.js.map +1 -0
  6. package/dist/AuthLayout.d.ts +18 -0
  7. package/dist/AuthLayout.d.ts.map +1 -0
  8. package/dist/AuthLayout.js +72 -0
  9. package/dist/AuthLayout.js.map +1 -0
  10. package/dist/IPulseClientAuthError.d.ts +21 -0
  11. package/dist/IPulseClientAuthError.d.ts.map +1 -0
  12. package/dist/IPulseClientAuthError.js +48 -0
  13. package/dist/IPulseClientAuthError.js.map +1 -0
  14. package/dist/IPulseRedirectSignIn.d.ts +21 -0
  15. package/dist/IPulseRedirectSignIn.d.ts.map +1 -0
  16. package/dist/IPulseRedirectSignIn.js +65 -0
  17. package/dist/IPulseRedirectSignIn.js.map +1 -0
  18. package/dist/SignIn.d.ts +24 -0
  19. package/dist/SignIn.d.ts.map +1 -0
  20. package/dist/SignIn.js +132 -0
  21. package/dist/SignIn.js.map +1 -0
  22. package/dist/SignUp.d.ts +26 -0
  23. package/dist/SignUp.d.ts.map +1 -0
  24. package/dist/SignUp.js +96 -0
  25. package/dist/SignUp.js.map +1 -0
  26. package/dist/UserButton.d.ts +24 -0
  27. package/dist/UserButton.d.ts.map +1 -0
  28. package/dist/UserButton.js +141 -0
  29. package/dist/UserButton.js.map +1 -0
  30. package/dist/VerifyRequest.d.ts +11 -0
  31. package/dist/VerifyRequest.d.ts.map +1 -0
  32. package/dist/VerifyRequest.js +73 -0
  33. package/dist/VerifyRequest.js.map +1 -0
  34. package/dist/auth-config.d.ts +63 -0
  35. package/dist/auth-config.d.ts.map +1 -0
  36. package/dist/auth-config.js +234 -0
  37. package/dist/auth-config.js.map +1 -0
  38. package/dist/index.d.ts +20 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +45 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/shared/AuthAlert.d.ts +11 -0
  43. package/dist/shared/AuthAlert.d.ts.map +1 -0
  44. package/dist/shared/AuthAlert.js +34 -0
  45. package/dist/shared/AuthAlert.js.map +1 -0
  46. package/dist/shared/AuthButton.d.ts +20 -0
  47. package/dist/shared/AuthButton.d.ts.map +1 -0
  48. package/dist/shared/AuthButton.js +84 -0
  49. package/dist/shared/AuthButton.js.map +1 -0
  50. package/dist/shared/AuthCard.d.ts +12 -0
  51. package/dist/shared/AuthCard.d.ts.map +1 -0
  52. package/dist/shared/AuthCard.js +30 -0
  53. package/dist/shared/AuthCard.js.map +1 -0
  54. package/dist/shared/AuthDivider.d.ts +10 -0
  55. package/dist/shared/AuthDivider.d.ts.map +1 -0
  56. package/dist/shared/AuthDivider.js +17 -0
  57. package/dist/shared/AuthDivider.js.map +1 -0
  58. package/dist/shared/AuthEmailInput.d.ts +17 -0
  59. package/dist/shared/AuthEmailInput.d.ts.map +1 -0
  60. package/dist/shared/AuthEmailInput.js +81 -0
  61. package/dist/shared/AuthEmailInput.js.map +1 -0
  62. package/dist/shared/AuthFooter.d.ts +14 -0
  63. package/dist/shared/AuthFooter.d.ts.map +1 -0
  64. package/dist/shared/AuthFooter.js +21 -0
  65. package/dist/shared/AuthFooter.js.map +1 -0
  66. package/dist/shared/AuthHeader.d.ts +13 -0
  67. package/dist/shared/AuthHeader.d.ts.map +1 -0
  68. package/dist/shared/AuthHeader.js +38 -0
  69. package/dist/shared/AuthHeader.js.map +1 -0
  70. package/dist/shared/AuthTextInput.d.ts +19 -0
  71. package/dist/shared/AuthTextInput.d.ts.map +1 -0
  72. package/dist/shared/AuthTextInput.js +81 -0
  73. package/dist/shared/AuthTextInput.js.map +1 -0
  74. package/dist/shared/styles.d.ts +6 -0
  75. package/dist/shared/styles.d.ts.map +1 -0
  76. package/dist/shared/styles.js +21 -0
  77. package/dist/shared/styles.js.map +1 -0
  78. package/dist/types.d.ts +119 -0
  79. package/dist/types.d.ts.map +1 -0
  80. package/dist/types.js +3 -0
  81. package/dist/types.js.map +1 -0
  82. package/dist/utils.d.ts +32 -0
  83. package/dist/utils.d.ts.map +1 -0
  84. package/dist/utils.js +50 -0
  85. package/dist/utils.js.map +1 -0
  86. 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":";;;;AACA,+CAAoE;AAEpE,gDAA6C;AAC7C,mCAAkC;AAalC,MAAM,eAAe,GAA2D;IAC5E,aAAa,EAAE;QACX,KAAK,EAAE,kBAAkB;QACzB,WAAW,EAAE,0FAA0F;KAC1G;IACD,YAAY,EAAE;QACV,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,2CAA2C;KAC3D;IACD,YAAY,EAAE;QACV,KAAK,EAAE,oCAAoC;QAC3C,WAAW,EAAE,mNAAmN;KACnO;IACD,WAAW,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,sEAAsE;KACtF;IACD,aAAa,EAAE;QACX,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,iEAAiE;KACjF;IACD,OAAO,EAAE;QACL,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,6DAA6D;KAC7E;CACJ,CAAC;AAEF,MAAM,QAAQ,GAAG;IACb,YAAY,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK;IAC3C,kBAAkB,EAAE,eAAe,CAAC,OAAO,CAAC,WAAW;IACvD,KAAK,EAAE,kBAAkB;IACzB,YAAY,EAAE,qBAAqB;CAC7B,CAAC;AAEJ,MAAM,SAAS,GAA6B,CAAC,EAChD,KAAK,EACL,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,YAAY,EAAE,CAAC,EACf,KAAK,GAAG,KAAK,GAChB,EAAE,EAAE;IACD,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;IACrC,MAAM,MAAM,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IAEpD,MAAM,GAAG,GAAG,SAAS,IAAI,KAAK,IAAI,SAAS,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,CAAC,kBAAkB,EAAE,CAAC;IAEnG,MAAM,gBAAgB,GAAwB;QAC1C,OAAO,EAAE,kBAAkB;QAC3B,YAAY,EAAE,eAAO,CAAC,MAAM,CAAC,EAAE;QAC/B,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,aAAa;QACtB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,QAAQ;QACb,cAAc,EAAE,MAAM;QACtB,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,iCAAiC;KAChD,CAAC;IAEF,MAAM,OAAO,GAAG,CACZ,iCAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAC3B,gCACI,KAAK,EAAE;oBACH,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,yEAAyE;oBACrF,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;oBACxB,MAAM,EAAE,qBAAqB;oBAC7B,SAAS,EAAE,6BAA6B;iBAC3C,YAED,uBAAC,4BAAa,IAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAO,CAAC,WAAW,EAAE,GAAI,GAChE,EAEN,+BAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,YACjG,IAAI,CAAC,KAAK,GACV,EACL,8BAAG,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,eAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE,YAC7F,IAAI,CAAC,WAAW,GACjB,EAEJ,iCAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,aACtF,OAAO,IAAI,CACR,oCACI,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE;4BACH,GAAG,gBAAgB;4BACnB,eAAe,EAAE,eAAO,CAAC,OAAO;4BAChC,KAAK,EAAE,eAAO,CAAC,SAAS;4BACxB,MAAM,EAAE,MAAM;yBACjB,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,EAC5D,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,EACxD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACX,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,iCAAiC,eAAO,CAAC,OAAO,oBAAoB,CAAC;wBAC3G,CAAC,EACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;4BACV,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;wBAC7C,CAAC,aAED,uBAAC,yBAAU,IAAC,IAAI,EAAE,EAAE,GAAI,EACvB,MAAM,CAAC,KAAK,IACR,CACZ,EAEA,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CACtB,+BACI,IAAI,EAAE,SAAS,IAAI,GAAG,EACtB,QAAQ,EAAE,CAAC,EACX,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EACtE,KAAK,EAAE;4BACH,GAAG,gBAAgB;4BACnB,MAAM,EAAE,eAAe,eAAO,CAAC,MAAM,EAAE;4BACvC,eAAe,EAAE,aAAa;4BAC9B,KAAK,EAAE,eAAO,CAAC,EAAE;yBACpB,EACD,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,eAAO,CAAC,KAAK,CAAC,EAC3E,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa,CAAC,EAC1E,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;4BACX,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,iCAAiC,eAAO,CAAC,OAAO,oBAAoB,CAAC;wBAC3G,CAAC,EACD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE;4BACV,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;wBAC7C,CAAC,aAED,uBAAC,wBAAS,IAAC,IAAI,EAAE,EAAE,GAAI,EACtB,MAAM,CAAC,YAAY,IACpB,CACP,IACC,IACJ,CACb,CAAC;IAEF,IAAI,KAAK;QAAE,OAAO,OAAO,CAAC;IAC1B,OAAO,uBAAC,mBAAQ,cAAE,OAAO,GAAY,CAAC;AAC1C,CAAC,CAAC;AA9GW,QAAA,SAAS,aA8GpB"}
@@ -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":"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"}
@@ -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"}
@@ -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