@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
|
@@ -0,0 +1,81 @@
|
|
|
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.AuthEmailInput = 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 utils_1 = require("../utils");
|
|
41
|
+
/**
|
|
42
|
+
* Shared email input with animated icon, focus ring, and label.
|
|
43
|
+
* Fully keyboard-accessible: autoFocus, Tab, Enter support.
|
|
44
|
+
*/
|
|
45
|
+
const AuthEmailInput = ({ id = 'ipulse-auth-email', value, onChange, placeholder = 'naam@bedrijf.nl', label, disabled = false, autoFocus = false, onKeyDown, }) => {
|
|
46
|
+
const [focused, setFocused] = React.useState(false);
|
|
47
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [label && ((0, jsx_runtime_1.jsx)("label", { htmlFor: id, style: {
|
|
48
|
+
display: 'block',
|
|
49
|
+
fontSize: '0.875rem',
|
|
50
|
+
fontWeight: 500,
|
|
51
|
+
marginBottom: '0.5rem',
|
|
52
|
+
color: utils_1.cssVars.fg,
|
|
53
|
+
}, children: label })), (0, jsx_runtime_1.jsxs)("div", { style: { position: 'relative' }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Mail, { style: {
|
|
54
|
+
position: 'absolute',
|
|
55
|
+
left: '0.75rem',
|
|
56
|
+
top: '50%',
|
|
57
|
+
transform: 'translateY(-50%)',
|
|
58
|
+
color: focused ? utils_1.cssVars.primary : utils_1.cssVars.mutedFg,
|
|
59
|
+
width: '16px',
|
|
60
|
+
height: '16px',
|
|
61
|
+
pointerEvents: 'none',
|
|
62
|
+
transition: 'color 0.15s',
|
|
63
|
+
} }), (0, jsx_runtime_1.jsx)("input", { id: id, type: "email", inputMode: "email", enterKeyHint: "done", autoComplete: "email", placeholder: placeholder, value: value, onChange: (e) => onChange(e.target.value), onFocus: () => setFocused(true), onBlur: () => setFocused(false), onKeyDown: onKeyDown, required: true, disabled: disabled, autoFocus: autoFocus, tabIndex: 0, style: {
|
|
64
|
+
width: '100%',
|
|
65
|
+
padding: '0.6875rem 1rem 0.6875rem 2.5rem',
|
|
66
|
+
borderRadius: utils_1.cssVars.radius.md,
|
|
67
|
+
border: `1.5px solid ${focused ? utils_1.cssVars.primary : utils_1.cssVars.border}`,
|
|
68
|
+
backgroundColor: 'transparent',
|
|
69
|
+
color: 'inherit',
|
|
70
|
+
outline: 'none',
|
|
71
|
+
fontSize: '0.9375rem',
|
|
72
|
+
transition: 'border-color 0.15s, box-shadow 0.15s',
|
|
73
|
+
boxSizing: 'border-box',
|
|
74
|
+
boxShadow: focused
|
|
75
|
+
? `0 0 0 3px color-mix(in oklch, ${utils_1.cssVars.primary} 15%, transparent)`
|
|
76
|
+
: 'none',
|
|
77
|
+
opacity: disabled ? 0.6 : 1,
|
|
78
|
+
} })] })] }));
|
|
79
|
+
};
|
|
80
|
+
exports.AuthEmailInput = AuthEmailInput;
|
|
81
|
+
//# sourceMappingURL=AuthEmailInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthEmailInput.js","sourceRoot":"","sources":["../../src/shared/AuthEmailInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,+CAAoC;AACpC,oCAAmC;AAanC;;;GAGG;AACI,MAAM,cAAc,GAAkC,CAAC,EAC1D,EAAE,GAAG,mBAAmB,EACxB,KAAK,EACL,QAAQ,EACR,WAAW,GAAG,iBAAiB,EAC/B,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,CACH,4CACK,KAAK,IAAI,CACN,kCACI,OAAO,EAAE,EAAE,EACX,KAAK,EAAE;oBACH,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,GAAG;oBACf,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,eAAO,CAAC,EAAE;iBACpB,YAEA,KAAK,GACF,CACX,EACD,iCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAChC,uBAAC,mBAAI,IACD,KAAK,EAAE;4BACH,QAAQ,EAAE,UAAU;4BACpB,IAAI,EAAE,SAAS;4BACf,GAAG,EAAE,KAAK;4BACV,SAAS,EAAE,kBAAkB;4BAC7B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO;4BAClD,KAAK,EAAE,MAAM;4BACb,MAAM,EAAE,MAAM;4BACd,aAAa,EAAE,MAAM;4BACrB,UAAU,EAAE,aAAa;yBAC5B,GACH,EACF,kCACI,EAAE,EAAE,EAAE,EACN,IAAI,EAAC,OAAO,EACZ,SAAS,EAAC,OAAO,EACjB,YAAY,EAAC,MAAM,EACnB,YAAY,EAAC,OAAO,EACpB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAC/B,SAAS,EAAE,SAAS,EACpB,QAAQ,QACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE;4BACH,KAAK,EAAE,MAAM;4BACb,OAAO,EAAE,iCAAiC;4BAC1C,YAAY,EAAE,eAAO,CAAC,MAAM,CAAC,EAAE;4BAC/B,MAAM,EAAE,eAAe,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,MAAM,EAAE;4BACnE,eAAe,EAAE,aAAa;4BAC9B,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,MAAM;4BACf,QAAQ,EAAE,WAAW;4BACrB,UAAU,EAAE,sCAAsC;4BAClD,SAAS,EAAE,YAAY;4BACvB,SAAS,EAAE,OAAO;gCACd,CAAC,CAAC,iCAAiC,eAAO,CAAC,OAAO,oBAAoB;gCACtE,CAAC,CAAC,MAAM;4BACZ,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBAC9B,GACH,IACA,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AA9EW,QAAA,cAAc,kBA8EzB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AuthBranding } from '../types';
|
|
3
|
+
interface AuthFooterProps {
|
|
4
|
+
branding?: AuthBranding;
|
|
5
|
+
text?: string;
|
|
6
|
+
termsLabel?: string;
|
|
7
|
+
privacyLabel?: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Shared footer shown below auth forms with "Secured by" text and optional links.
|
|
11
|
+
*/
|
|
12
|
+
export declare const AuthFooter: React.FC<AuthFooterProps>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=AuthFooter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthFooter.d.ts","sourceRoot":"","sources":["../../src/shared/AuthFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,UAAU,eAAe;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA+ChD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthFooter = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
/**
|
|
7
|
+
* Shared footer shown below auth forms with "Secured by" text and optional links.
|
|
8
|
+
*/
|
|
9
|
+
const AuthFooter = ({ branding, text = 'Gegarandeerd beveiligd door iPulse Auth', termsLabel = 'Voorwaarden', privacyLabel = 'Privacy', }) => {
|
|
10
|
+
if (branding?.poweredBy === false)
|
|
11
|
+
return null;
|
|
12
|
+
return ((0, jsx_runtime_1.jsxs)("p", { style: {
|
|
13
|
+
textAlign: 'center',
|
|
14
|
+
marginTop: '1.75rem',
|
|
15
|
+
fontSize: '0.6875rem',
|
|
16
|
+
color: utils_1.cssVars.mutedFg,
|
|
17
|
+
lineHeight: 1.6,
|
|
18
|
+
}, children: [text, branding?.links?.terms && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [' · ', (0, jsx_runtime_1.jsx)("a", { href: branding.links.terms, style: { color: 'inherit', textDecoration: 'underline' }, target: "_blank", rel: "noopener noreferrer", children: termsLabel })] })), branding?.links?.privacy && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [' · ', (0, jsx_runtime_1.jsx)("a", { href: branding.links.privacy, style: { color: 'inherit', textDecoration: 'underline' }, target: "_blank", rel: "noopener noreferrer", children: privacyLabel })] }))] }));
|
|
19
|
+
};
|
|
20
|
+
exports.AuthFooter = AuthFooter;
|
|
21
|
+
//# sourceMappingURL=AuthFooter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthFooter.js","sourceRoot":"","sources":["../../src/shared/AuthFooter.tsx"],"names":[],"mappings":";;;;AACA,oCAAmC;AAUnC;;GAEG;AACI,MAAM,UAAU,GAA8B,CAAC,EAClD,QAAQ,EACR,IAAI,GAAG,yCAAyC,EAChD,UAAU,GAAG,aAAa,EAC1B,YAAY,GAAG,SAAS,GAC3B,EAAE,EAAE;IACD,IAAI,QAAQ,EAAE,SAAS,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAE/C,OAAO,CACH,+BACI,KAAK,EAAE;YACH,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,WAAW;YACrB,KAAK,EAAE,eAAO,CAAC,OAAO;YACtB,UAAU,EAAE,GAAG;SAClB,aAEA,IAAI,EACJ,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,CACvB,6DACK,KAAK,EACN,8BACI,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAC1B,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,EACxD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,YAExB,UAAU,GACX,IACL,CACN,EACA,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,CACzB,6DACK,KAAK,EACN,8BACI,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,EAC5B,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,EACxD,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,YAExB,YAAY,GACb,IACL,CACN,IACD,CACP,CAAC;AACN,CAAC,CAAC;AA/CW,QAAA,UAAU,cA+CrB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { AuthBranding } from '../types';
|
|
3
|
+
interface AuthHeaderProps {
|
|
4
|
+
branding?: AuthBranding;
|
|
5
|
+
title: string;
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Shared header block with optional logo / initials avatar, title, and subtitle.
|
|
10
|
+
*/
|
|
11
|
+
export declare const AuthHeader: React.FC<AuthHeaderProps>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=AuthHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthHeader.d.ts","sourceRoot":"","sources":["../../src/shared/AuthHeader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,UAAU,eAAe;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAyDhD,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthHeader = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
/**
|
|
7
|
+
* Shared header block with optional logo / initials avatar, title, and subtitle.
|
|
8
|
+
*/
|
|
9
|
+
const AuthHeader = ({ branding, title, subtitle }) => ((0, jsx_runtime_1.jsxs)("div", { style: { textAlign: 'center', marginBottom: '2rem' }, children: [branding && ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
10
|
+
display: 'flex',
|
|
11
|
+
justifyContent: 'center',
|
|
12
|
+
marginBottom: '1.125rem',
|
|
13
|
+
}, children: branding.logoFallbackIcon ? ((0, jsx_runtime_1.jsx)("div", { style: { width: 48, height: 48 }, children: branding.logoFallbackIcon })) : ((0, jsx_runtime_1.jsx)("div", { style: {
|
|
14
|
+
width: '52px',
|
|
15
|
+
height: '52px',
|
|
16
|
+
borderRadius: utils_1.cssVars.radius.lg,
|
|
17
|
+
background: utils_1.cssVars.primary,
|
|
18
|
+
color: utils_1.cssVars.primaryFg,
|
|
19
|
+
display: 'flex',
|
|
20
|
+
alignItems: 'center',
|
|
21
|
+
justifyContent: 'center',
|
|
22
|
+
fontWeight: 700,
|
|
23
|
+
fontSize: '1.125rem',
|
|
24
|
+
letterSpacing: '-0.02em',
|
|
25
|
+
}, children: (0, utils_1.getInitials)(branding.appName) })) })), (0, jsx_runtime_1.jsx)("h1", { style: {
|
|
26
|
+
fontSize: '1.5rem',
|
|
27
|
+
fontWeight: 700,
|
|
28
|
+
margin: '0 0 0.375rem 0',
|
|
29
|
+
letterSpacing: '-0.025em',
|
|
30
|
+
lineHeight: 1.2,
|
|
31
|
+
}, children: title }), subtitle && ((0, jsx_runtime_1.jsx)("p", { style: {
|
|
32
|
+
margin: 0,
|
|
33
|
+
fontSize: '0.9375rem',
|
|
34
|
+
color: utils_1.cssVars.mutedFg,
|
|
35
|
+
lineHeight: 1.55,
|
|
36
|
+
}, children: subtitle }))] }));
|
|
37
|
+
exports.AuthHeader = AuthHeader;
|
|
38
|
+
//# sourceMappingURL=AuthHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthHeader.js","sourceRoot":"","sources":["../../src/shared/AuthHeader.tsx"],"names":[],"mappings":";;;;AACA,oCAAgD;AAShD;;GAEG;AACI,MAAM,UAAU,GAA8B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CACpF,iCAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,aACpD,QAAQ,IAAI,CACT,gCACI,KAAK,EAAE;gBACH,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,QAAQ;gBACxB,YAAY,EAAE,UAAU;aAC3B,YAEA,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACzB,gCAAK,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAG,QAAQ,CAAC,gBAAgB,GAAO,CAC3E,CAAC,CAAC,CAAC,CACA,gCACI,KAAK,EAAE;oBACH,KAAK,EAAE,MAAM;oBACb,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,eAAO,CAAC,MAAM,CAAC,EAAE;oBAC/B,UAAU,EAAE,eAAO,CAAC,OAAO;oBAC3B,KAAK,EAAE,eAAO,CAAC,SAAS;oBACxB,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;oBACxB,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE,UAAU;oBACpB,aAAa,EAAE,SAAS;iBAC3B,YAEA,IAAA,mBAAW,EAAC,QAAQ,CAAC,OAAO,CAAC,GAC5B,CACT,GACC,CACT,EACD,+BACI,KAAK,EAAE;gBACH,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,GAAG;gBACf,MAAM,EAAE,gBAAgB;gBACxB,aAAa,EAAE,UAAU;gBACzB,UAAU,EAAE,GAAG;aAClB,YAEA,KAAK,GACL,EACJ,QAAQ,IAAI,CACT,8BACI,KAAK,EAAE;gBACH,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,WAAW;gBACrB,KAAK,EAAE,eAAO,CAAC,OAAO;gBACtB,UAAU,EAAE,IAAI;aACnB,YAEA,QAAQ,GACT,CACP,IACC,CACT,CAAC;AAzDW,QAAA,UAAU,cAyDrB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface AuthTextInputProps {
|
|
3
|
+
id?: string;
|
|
4
|
+
type?: string;
|
|
5
|
+
value: string;
|
|
6
|
+
onChange: (value: string) => void;
|
|
7
|
+
placeholder?: string;
|
|
8
|
+
label?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
autoFocus?: boolean;
|
|
11
|
+
autoComplete?: string;
|
|
12
|
+
icon?: React.ReactNode;
|
|
13
|
+
onKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generic text input with optional icon, label, and focus ring.
|
|
17
|
+
*/
|
|
18
|
+
export declare const AuthTextInput: React.FC<AuthTextInputProps>;
|
|
19
|
+
//# sourceMappingURL=AuthTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthTextInput.d.ts","sourceRoot":"","sources":["../../src/shared/AuthTextInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,kBAAkB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,SAAS,CAAC,EAAE,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;CAC5D;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoFtD,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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.AuthTextInput = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const utils_1 = require("../utils");
|
|
40
|
+
/**
|
|
41
|
+
* Generic text input with optional icon, label, and focus ring.
|
|
42
|
+
*/
|
|
43
|
+
const AuthTextInput = ({ id, type = 'text', value, onChange, placeholder, label, disabled = false, autoFocus = false, autoComplete, icon, onKeyDown, }) => {
|
|
44
|
+
const [focused, setFocused] = React.useState(false);
|
|
45
|
+
return ((0, jsx_runtime_1.jsxs)("div", { children: [label && ((0, jsx_runtime_1.jsx)("label", { htmlFor: id, style: {
|
|
46
|
+
display: 'block',
|
|
47
|
+
fontSize: '0.875rem',
|
|
48
|
+
fontWeight: 500,
|
|
49
|
+
marginBottom: '0.5rem',
|
|
50
|
+
color: utils_1.cssVars.fg,
|
|
51
|
+
}, children: label })), (0, jsx_runtime_1.jsxs)("div", { style: { position: 'relative' }, children: [icon && ((0, jsx_runtime_1.jsx)("span", { style: {
|
|
52
|
+
position: 'absolute',
|
|
53
|
+
left: '0.75rem',
|
|
54
|
+
top: '50%',
|
|
55
|
+
transform: 'translateY(-50%)',
|
|
56
|
+
color: focused ? utils_1.cssVars.primary : utils_1.cssVars.mutedFg,
|
|
57
|
+
pointerEvents: 'none',
|
|
58
|
+
transition: 'color 0.15s',
|
|
59
|
+
display: 'flex',
|
|
60
|
+
alignItems: 'center',
|
|
61
|
+
}, children: icon })), (0, jsx_runtime_1.jsx)("input", { id: id, type: type, autoComplete: autoComplete, placeholder: placeholder, value: value, onChange: (e) => onChange(e.target.value), onFocus: () => setFocused(true), onBlur: () => setFocused(false), onKeyDown: onKeyDown, disabled: disabled, autoFocus: autoFocus, tabIndex: 0, style: {
|
|
62
|
+
width: '100%',
|
|
63
|
+
padding: icon
|
|
64
|
+
? '0.6875rem 1rem 0.6875rem 2.5rem'
|
|
65
|
+
: '0.6875rem 1rem',
|
|
66
|
+
borderRadius: utils_1.cssVars.radius.md,
|
|
67
|
+
border: `1.5px solid ${focused ? utils_1.cssVars.primary : utils_1.cssVars.border}`,
|
|
68
|
+
backgroundColor: 'transparent',
|
|
69
|
+
color: 'inherit',
|
|
70
|
+
outline: 'none',
|
|
71
|
+
fontSize: '0.9375rem',
|
|
72
|
+
transition: 'border-color 0.15s, box-shadow 0.15s',
|
|
73
|
+
boxSizing: 'border-box',
|
|
74
|
+
boxShadow: focused
|
|
75
|
+
? `0 0 0 3px color-mix(in oklch, ${utils_1.cssVars.primary} 15%, transparent)`
|
|
76
|
+
: 'none',
|
|
77
|
+
opacity: disabled ? 0.6 : 1,
|
|
78
|
+
} })] })] }));
|
|
79
|
+
};
|
|
80
|
+
exports.AuthTextInput = AuthTextInput;
|
|
81
|
+
//# sourceMappingURL=AuthTextInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthTextInput.js","sourceRoot":"","sources":["../../src/shared/AuthTextInput.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAC/B,oCAAmC;AAgBnC;;GAEG;AACI,MAAM,aAAa,GAAiC,CAAC,EACxD,EAAE,EACF,IAAI,GAAG,MAAM,EACb,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,YAAY,EACZ,IAAI,EACJ,SAAS,GACZ,EAAE,EAAE;IACD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,OAAO,CACH,4CACK,KAAK,IAAI,CACN,kCACI,OAAO,EAAE,EAAE,EACX,KAAK,EAAE;oBACH,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,GAAG;oBACf,YAAY,EAAE,QAAQ;oBACtB,KAAK,EAAE,eAAO,CAAC,EAAE;iBACpB,YAEA,KAAK,GACF,CACX,EACD,iCAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,aAC/B,IAAI,IAAI,CACL,iCACI,KAAK,EAAE;4BACH,QAAQ,EAAE,UAAU;4BACpB,IAAI,EAAE,SAAS;4BACf,GAAG,EAAE,KAAK;4BACV,SAAS,EAAE,kBAAkB;4BAC7B,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO;4BAClD,aAAa,EAAE,MAAM;4BACrB,UAAU,EAAE,aAAa;4BACzB,OAAO,EAAE,MAAM;4BACf,UAAU,EAAE,QAAQ;yBACvB,YAEA,IAAI,GACF,CACV,EACD,kCACI,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAC/B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE;4BACH,KAAK,EAAE,MAAM;4BACb,OAAO,EAAE,IAAI;gCACT,CAAC,CAAC,iCAAiC;gCACnC,CAAC,CAAC,gBAAgB;4BACtB,YAAY,EAAE,eAAO,CAAC,MAAM,CAAC,EAAE;4BAC/B,MAAM,EAAE,eAAe,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAO,CAAC,MAAM,EAAE;4BACnE,eAAe,EAAE,aAAa;4BAC9B,KAAK,EAAE,SAAS;4BAChB,OAAO,EAAE,MAAM;4BACf,QAAQ,EAAE,WAAW;4BACrB,UAAU,EAAE,sCAAsC;4BAClD,SAAS,EAAE,YAAY;4BACvB,SAAS,EAAE,OAAO;gCACd,CAAC,CAAC,iCAAiC,eAAO,CAAC,OAAO,oBAAoB;gCACtE,CAAC,CAAC,MAAM;4BACZ,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;yBAC9B,GACH,IACA,IACJ,CACT,CAAC;AACN,CAAC,CAAC;AApFW,QAAA,aAAa,iBAoFxB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared CSS keyframes injected once per component tree.
|
|
3
|
+
* Import and render <AuthStyles /> once at the root of any auth component.
|
|
4
|
+
*/
|
|
5
|
+
export declare const AUTH_KEYFRAMES = "\n @keyframes ipulse-spin {\n to { transform: rotate(360deg); }\n }\n @keyframes ipulse-fadein {\n from { opacity: 0; transform: translateY(-6px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes ipulse-slidein {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n";
|
|
6
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/shared/styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,cAAc,kYAY1B,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AUTH_KEYFRAMES = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Shared CSS keyframes injected once per component tree.
|
|
6
|
+
* Import and render <AuthStyles /> once at the root of any auth component.
|
|
7
|
+
*/
|
|
8
|
+
exports.AUTH_KEYFRAMES = `
|
|
9
|
+
@keyframes ipulse-spin {
|
|
10
|
+
to { transform: rotate(360deg); }
|
|
11
|
+
}
|
|
12
|
+
@keyframes ipulse-fadein {
|
|
13
|
+
from { opacity: 0; transform: translateY(-6px) scale(0.98); }
|
|
14
|
+
to { opacity: 1; transform: translateY(0) scale(1); }
|
|
15
|
+
}
|
|
16
|
+
@keyframes ipulse-slidein {
|
|
17
|
+
from { opacity: 0; transform: translateY(8px); }
|
|
18
|
+
to { opacity: 1; transform: translateY(0); }
|
|
19
|
+
}
|
|
20
|
+
`;
|
|
21
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/shared/styles.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,cAAc,GAAG;;;;;;;;;;;;CAY7B,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface IPulseUser {
|
|
3
|
+
id?: string;
|
|
4
|
+
name?: string | null;
|
|
5
|
+
email?: string | null;
|
|
6
|
+
image?: string | null;
|
|
7
|
+
role?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface IPulseSession {
|
|
10
|
+
user?: IPulseUser;
|
|
11
|
+
expires: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AuthBranding {
|
|
14
|
+
appName: string;
|
|
15
|
+
logoLight?: string;
|
|
16
|
+
logoDark?: string;
|
|
17
|
+
logoFallbackIcon?: React.ReactNode;
|
|
18
|
+
tagline?: string;
|
|
19
|
+
/** Set to false to hide "Secured by iPulse Auth" footer. Defaults to true. */
|
|
20
|
+
poweredBy?: boolean;
|
|
21
|
+
links?: {
|
|
22
|
+
home?: string;
|
|
23
|
+
terms?: string;
|
|
24
|
+
privacy?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface AuthTranslations {
|
|
28
|
+
signIn?: {
|
|
29
|
+
title?: string;
|
|
30
|
+
subtitle?: string;
|
|
31
|
+
emailLabel?: string;
|
|
32
|
+
emailPlaceholder?: string;
|
|
33
|
+
emailButton?: string;
|
|
34
|
+
passkeyButton?: string;
|
|
35
|
+
/** "Send magic link" button label (step 2) */
|
|
36
|
+
magicLinkButton?: string;
|
|
37
|
+
/** "Continue with Google" button label */
|
|
38
|
+
googleButton?: string;
|
|
39
|
+
/** Title shown on step 2 method selection */
|
|
40
|
+
methodTitle?: string;
|
|
41
|
+
/** Subtitle shown on step 2, before the email address */
|
|
42
|
+
methodSubtitle?: string;
|
|
43
|
+
/** "Back" button label on step 2 */
|
|
44
|
+
backButton?: string;
|
|
45
|
+
orDivider?: string;
|
|
46
|
+
loadingText?: string;
|
|
47
|
+
footer?: string;
|
|
48
|
+
/** "No account?" text before sign-up link */
|
|
49
|
+
noAccount?: string;
|
|
50
|
+
/** "Sign up" link label */
|
|
51
|
+
signUpLink?: string;
|
|
52
|
+
/** Terms link label in footer */
|
|
53
|
+
termsLabel?: string;
|
|
54
|
+
/** Privacy link label in footer */
|
|
55
|
+
privacyLabel?: string;
|
|
56
|
+
};
|
|
57
|
+
signUp?: {
|
|
58
|
+
title?: string;
|
|
59
|
+
subtitle?: string;
|
|
60
|
+
nameLabel?: string;
|
|
61
|
+
namePlaceholder?: string;
|
|
62
|
+
emailLabel?: string;
|
|
63
|
+
emailPlaceholder?: string;
|
|
64
|
+
emailButton?: string;
|
|
65
|
+
passkeyButton?: string;
|
|
66
|
+
orDivider?: string;
|
|
67
|
+
loadingText?: string;
|
|
68
|
+
footer?: string;
|
|
69
|
+
/** "Already have an account?" text */
|
|
70
|
+
haveAccount?: string;
|
|
71
|
+
/** "Sign in" link label */
|
|
72
|
+
signInLink?: string;
|
|
73
|
+
/** "Back" link label when navigating back to sign-in */
|
|
74
|
+
backLink?: string;
|
|
75
|
+
/** Terms link label in footer */
|
|
76
|
+
termsLabel?: string;
|
|
77
|
+
/** Privacy link label in footer */
|
|
78
|
+
privacyLabel?: string;
|
|
79
|
+
};
|
|
80
|
+
verifyRequest?: {
|
|
81
|
+
title?: string;
|
|
82
|
+
description?: string;
|
|
83
|
+
checkInbox?: string;
|
|
84
|
+
didNotReceive?: string;
|
|
85
|
+
resendButton?: string;
|
|
86
|
+
/** "Back to sign in" button label */
|
|
87
|
+
backToSignIn?: string;
|
|
88
|
+
};
|
|
89
|
+
authError?: {
|
|
90
|
+
/** Fallback title when error code is unknown */
|
|
91
|
+
defaultTitle?: string;
|
|
92
|
+
/** Fallback description when error code is unknown */
|
|
93
|
+
defaultDescription?: string;
|
|
94
|
+
/** "Try again" button label */
|
|
95
|
+
retry?: string;
|
|
96
|
+
/** "Back to sign in" button / link label */
|
|
97
|
+
backToSignIn?: string;
|
|
98
|
+
/** Per-error-code overrides */
|
|
99
|
+
errors?: Record<string, {
|
|
100
|
+
title: string;
|
|
101
|
+
description: string;
|
|
102
|
+
}>;
|
|
103
|
+
};
|
|
104
|
+
userButton?: {
|
|
105
|
+
manageAccount?: string;
|
|
106
|
+
signOut?: string;
|
|
107
|
+
/** Default display name when user has no name */
|
|
108
|
+
anonymous?: string;
|
|
109
|
+
};
|
|
110
|
+
common?: {
|
|
111
|
+
/** "Secured by iPulse Auth" footer text */
|
|
112
|
+
securedBy?: string;
|
|
113
|
+
/** The "or" divider label */
|
|
114
|
+
or?: string;
|
|
115
|
+
/** Generic loading text */
|
|
116
|
+
loading?: string;
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Merge class names (lightweight, no dependencies needed)
|
|
3
|
+
*/
|
|
4
|
+
export declare function cn(...classes: (string | undefined | null | false)[]): string;
|
|
5
|
+
/**
|
|
6
|
+
* Get initials from name or email
|
|
7
|
+
*/
|
|
8
|
+
export declare function getInitials(name?: string | null, email?: string | null): string;
|
|
9
|
+
/**
|
|
10
|
+
* CSS variable-based style helpers for theme compatibility
|
|
11
|
+
*/
|
|
12
|
+
export declare const cssVars: {
|
|
13
|
+
readonly bg: "var(--color-background, #ffffff)";
|
|
14
|
+
readonly card: "var(--color-card, #ffffff)";
|
|
15
|
+
readonly cardFg: "var(--color-card-foreground, #0a0a0a)";
|
|
16
|
+
readonly border: "var(--color-border, #e5e7eb)";
|
|
17
|
+
readonly borderMuted: "color-mix(in oklch, var(--color-border, #e5e7eb) 60%, transparent)";
|
|
18
|
+
readonly muted: "var(--color-muted, #f3f4f6)";
|
|
19
|
+
readonly mutedFg: "var(--color-muted-foreground, #6b7280)";
|
|
20
|
+
readonly primary: "var(--color-primary, #0a0a0a)";
|
|
21
|
+
readonly primaryFg: "var(--color-primary-foreground, #fafafa)";
|
|
22
|
+
readonly destructive: "var(--color-destructive, #ef4444)";
|
|
23
|
+
readonly fg: "var(--color-foreground, #0a0a0a)";
|
|
24
|
+
readonly radius: {
|
|
25
|
+
readonly sm: "var(--radius-sm, 0.375rem)";
|
|
26
|
+
readonly md: "var(--radius-md, 0.5rem)";
|
|
27
|
+
readonly lg: "var(--radius-lg, 0.75rem)";
|
|
28
|
+
readonly xl: "var(--radius-xl, 1rem)";
|
|
29
|
+
readonly full: "9999px";
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,MAAM,CAE5E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAU/E;AAED;;GAEG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;CAmBV,CAAC"}
|
package/dist/utils.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cssVars = void 0;
|
|
4
|
+
exports.cn = cn;
|
|
5
|
+
exports.getInitials = getInitials;
|
|
6
|
+
/**
|
|
7
|
+
* Merge class names (lightweight, no dependencies needed)
|
|
8
|
+
*/
|
|
9
|
+
function cn(...classes) {
|
|
10
|
+
return classes.filter(Boolean).join(' ');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Get initials from name or email
|
|
14
|
+
*/
|
|
15
|
+
function getInitials(name, email) {
|
|
16
|
+
if (name) {
|
|
17
|
+
const parts = name.trim().split(/\s+/);
|
|
18
|
+
if (parts.length >= 2) {
|
|
19
|
+
return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
|
|
20
|
+
}
|
|
21
|
+
return name[0].toUpperCase();
|
|
22
|
+
}
|
|
23
|
+
if (email)
|
|
24
|
+
return email[0].toUpperCase();
|
|
25
|
+
return 'U';
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* CSS variable-based style helpers for theme compatibility
|
|
29
|
+
*/
|
|
30
|
+
exports.cssVars = {
|
|
31
|
+
bg: 'var(--color-background, #ffffff)',
|
|
32
|
+
card: 'var(--color-card, #ffffff)',
|
|
33
|
+
cardFg: 'var(--color-card-foreground, #0a0a0a)',
|
|
34
|
+
border: 'var(--color-border, #e5e7eb)',
|
|
35
|
+
borderMuted: 'color-mix(in oklch, var(--color-border, #e5e7eb) 60%, transparent)',
|
|
36
|
+
muted: 'var(--color-muted, #f3f4f6)',
|
|
37
|
+
mutedFg: 'var(--color-muted-foreground, #6b7280)',
|
|
38
|
+
primary: 'var(--color-primary, #0a0a0a)',
|
|
39
|
+
primaryFg: 'var(--color-primary-foreground, #fafafa)',
|
|
40
|
+
destructive: 'var(--color-destructive, #ef4444)',
|
|
41
|
+
fg: 'var(--color-foreground, #0a0a0a)',
|
|
42
|
+
radius: {
|
|
43
|
+
sm: 'var(--radius-sm, 0.375rem)',
|
|
44
|
+
md: 'var(--radius-md, 0.5rem)',
|
|
45
|
+
lg: 'var(--radius-lg, 0.75rem)',
|
|
46
|
+
xl: 'var(--radius-xl, 1rem)',
|
|
47
|
+
full: '9999px',
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAGA,gBAEC;AAKD,kCAUC;AApBD;;GAEG;AACH,SAAgB,EAAE,CAAC,GAAG,OAA8C;IAChE,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,IAAoB,EAAE,KAAqB;IACnE,IAAI,IAAI,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;IACD,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;GAEG;AACU,QAAA,OAAO,GAAG;IACnB,EAAE,EAAE,kCAAkC;IACtC,IAAI,EAAE,4BAA4B;IAClC,MAAM,EAAE,uCAAuC;IAC/C,MAAM,EAAE,8BAA8B;IACtC,WAAW,EAAE,oEAAoE;IACjF,KAAK,EAAE,6BAA6B;IACpC,OAAO,EAAE,wCAAwC;IACjD,OAAO,EAAE,+BAA+B;IACxC,SAAS,EAAE,0CAA0C;IACrD,WAAW,EAAE,mCAAmC;IAChD,EAAE,EAAE,kCAAkC;IACtC,MAAM,EAAE;QACJ,EAAE,EAAE,4BAA4B;QAChC,EAAE,EAAE,0BAA0B;QAC9B,EAAE,EAAE,2BAA2B;QAC/B,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,QAAQ;KACjB;CACK,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ipulsehq/auth-ui",
|
|
3
|
+
"version": "1.3.2",
|
|
4
|
+
"description": "iPulse auth: OAuth config, components en utilities voor NextAuth",
|
|
5
|
+
"repository": "https://github.com/iPulseHQ/iPulse",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public",
|
|
8
|
+
"registry": "https://registry.npmjs.org"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"require": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./auth-config": {
|
|
22
|
+
"import": "./dist/auth-config.js",
|
|
23
|
+
"require": "./dist/auth-config.js",
|
|
24
|
+
"types": "./dist/auth-config.d.ts"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "tsc --build"
|
|
29
|
+
},
|
|
30
|
+
"peerDependencies": {
|
|
31
|
+
"lucide-react": ">=0.400.0",
|
|
32
|
+
"next-auth": ">=5.0.0-beta.0",
|
|
33
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
34
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/react": "^19.0.0",
|
|
38
|
+
"lucide-react": "^0.460.0",
|
|
39
|
+
"react": "^19.0.0",
|
|
40
|
+
"typescript": "^5.0.0"
|
|
41
|
+
}
|
|
42
|
+
}
|