@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
@@ -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"}
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -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
+ }