@nibssplc/cams-sdk-react 0.0.1-beta.78 → 0.0.1-beta.79
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 +295 -0
- package/dist/components/ADLoginModal.d.ts +7 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/hooks/useCAMSAuth.d.ts +2 -0
- package/dist/index.cjs.js +137 -29
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +137 -30
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -6,13 +6,13 @@ import { MsalProvider, useMsal, useAccount } from '@azure/msal-react';
|
|
|
6
6
|
import { PublicClientApplication, InteractionStatus } from '@azure/msal-browser';
|
|
7
7
|
import z$1, { z } from 'zod';
|
|
8
8
|
import { OTPInput, OTPInputContext, REGEXP_ONLY_DIGITS } from 'input-otp';
|
|
9
|
-
import { RectangleEllipsis, XIcon, CheckCircle, Mail, Shield, ShieldCheck, ShieldClose } from 'lucide-react';
|
|
9
|
+
import { RectangleEllipsis, XIcon, CheckCircle, Mail, Shield, ShieldCheck, ShieldClose, KeyIcon, Loader2 } from 'lucide-react';
|
|
10
10
|
import { appendErrors, FormProvider, Controller, useFormContext, useFormState, useForm } from 'react-hook-form';
|
|
11
11
|
import { validateFieldsNatively, toNestErrors } from '@hookform/resolvers';
|
|
12
12
|
import { clsx } from 'clsx';
|
|
13
13
|
import { twMerge } from 'tailwind-merge';
|
|
14
14
|
import { Slot } from '@radix-ui/react-slot';
|
|
15
|
-
import '@radix-ui/react-label';
|
|
15
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
16
16
|
import { cva } from 'class-variance-authority';
|
|
17
17
|
import * as DialogPrimitive from '@radix-ui/react-dialog';
|
|
18
18
|
import { toast } from 'sonner';
|
|
@@ -114,15 +114,17 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
|
|
|
114
114
|
|
|
115
115
|
function useCAMSAuth(options) {
|
|
116
116
|
var _this = this;
|
|
117
|
+
var _a;
|
|
117
118
|
if (options === void 0) { options = {
|
|
118
119
|
appCode: "",
|
|
120
|
+
loginExpiry: 1,
|
|
119
121
|
storageKey: "CAMS-AUTH-SDK",
|
|
120
122
|
}; }
|
|
121
|
-
var
|
|
122
|
-
var
|
|
123
|
-
var
|
|
124
|
-
var
|
|
125
|
-
var
|
|
123
|
+
var _b = useState(false), isAuthenticated = _b[0], setIsAuthenticated = _b[1];
|
|
124
|
+
var _c = useState(false), isLoading = _c[0], setIsLoading = _c[1];
|
|
125
|
+
var _d = useState(null), error = _d[0], setError = _d[1];
|
|
126
|
+
var _e = useState(""), token = _e[0], setToken = _e[1];
|
|
127
|
+
var _f = useState(null), profile = _f[0], setProfile = _f[1];
|
|
126
128
|
var sessionManagerRef = useRef(null);
|
|
127
129
|
useEffect(function () {
|
|
128
130
|
var _a, _b;
|
|
@@ -133,7 +135,7 @@ function useCAMSAuth(options) {
|
|
|
133
135
|
if (isPopupWindow()) {
|
|
134
136
|
initializePopupAuth();
|
|
135
137
|
}
|
|
136
|
-
(_a = sessionManagerRef.current) !== null && _a !== void 0 ? _a : (sessionManagerRef.current = new CAMSSessionManager(localStorage, options.storageKey || "CAMS-SDK", {
|
|
138
|
+
(_a = sessionManagerRef.current) !== null && _a !== void 0 ? _a : (sessionManagerRef.current = new CAMSSessionManager(localStorage, options.storageKey || "CAMS-AUTH-SDK", {
|
|
137
139
|
onAuthSuccess: function (res) {
|
|
138
140
|
var _a;
|
|
139
141
|
setToken(res.userProfile.tokens.Bearer);
|
|
@@ -169,40 +171,53 @@ function useCAMSAuth(options) {
|
|
|
169
171
|
}
|
|
170
172
|
}, [options.storageKey]);
|
|
171
173
|
var login = useCallback(function (config) { return __awaiter(_this, void 0, void 0, function () {
|
|
172
|
-
var loginConfig, userProfile, err_1;
|
|
173
|
-
var _a;
|
|
174
|
-
return __generator(this, function (
|
|
175
|
-
switch (
|
|
174
|
+
var loginConfig, userProfile, err_1, e, isPopupClosedError, restoredToken, userProfile;
|
|
175
|
+
var _a, _b, _c;
|
|
176
|
+
return __generator(this, function (_d) {
|
|
177
|
+
switch (_d.label) {
|
|
176
178
|
case 0:
|
|
177
179
|
if (!sessionManagerRef.current)
|
|
178
180
|
return [2 /*return*/];
|
|
179
181
|
setIsLoading(true);
|
|
180
182
|
setError(null);
|
|
181
|
-
|
|
183
|
+
_d.label = 1;
|
|
182
184
|
case 1:
|
|
183
|
-
|
|
184
|
-
loginConfig = __assign(__assign({}, config), {
|
|
185
|
-
// autoClose: options.autoClose ?? config.autoClose,
|
|
186
|
-
idleTimeout: (_a = options.idleTimeout) !== null && _a !== void 0 ? _a : config.idleTimeout });
|
|
185
|
+
_d.trys.push([1, 4, 8, 9]);
|
|
186
|
+
loginConfig = __assign(__assign({}, config), { idleTimeout: options.idleTimeout });
|
|
187
187
|
return [4 /*yield*/, sessionManagerRef.current.login(loginConfig)];
|
|
188
188
|
case 2:
|
|
189
|
-
|
|
189
|
+
_d.sent();
|
|
190
190
|
return [4 /*yield*/, sessionManagerRef.current.getProfile()];
|
|
191
191
|
case 3:
|
|
192
|
-
userProfile =
|
|
192
|
+
userProfile = _d.sent();
|
|
193
193
|
setProfile(userProfile);
|
|
194
|
-
return [3 /*break*/,
|
|
194
|
+
return [3 /*break*/, 9];
|
|
195
195
|
case 4:
|
|
196
|
-
err_1 =
|
|
196
|
+
err_1 = _d.sent();
|
|
197
|
+
e = err_1;
|
|
198
|
+
isPopupClosedError = ((_a = e === null || e === void 0 ? void 0 : e.message) === null || _a === void 0 ? void 0 : _a.includes("Authentication window was closed")) ||
|
|
199
|
+
(e === null || e === void 0 ? void 0 : e.error) === "Authentication window was closed";
|
|
200
|
+
if (!(isPopupClosedError && sessionManagerRef.current.isAuthenticated())) return [3 /*break*/, 6];
|
|
201
|
+
restoredToken = (_b = sessionManagerRef.current.getAccessToken()) !== null && _b !== void 0 ? _b : "";
|
|
202
|
+
setToken(restoredToken);
|
|
203
|
+
setIsAuthenticated(true);
|
|
204
|
+
return [4 /*yield*/, sessionManagerRef.current.getProfile()];
|
|
205
|
+
case 5:
|
|
206
|
+
userProfile = _d.sent();
|
|
207
|
+
setProfile(userProfile);
|
|
208
|
+
(_c = options.onAuthSuccess) === null || _c === void 0 ? void 0 : _c.call(options, restoredToken);
|
|
209
|
+
return [3 /*break*/, 7];
|
|
210
|
+
case 6:
|
|
197
211
|
setError(err_1);
|
|
198
212
|
setIsAuthenticated(false);
|
|
199
213
|
setToken("");
|
|
200
214
|
setProfile(null);
|
|
201
|
-
|
|
202
|
-
case
|
|
215
|
+
_d.label = 7;
|
|
216
|
+
case 7: return [3 /*break*/, 9];
|
|
217
|
+
case 8:
|
|
203
218
|
setIsLoading(false);
|
|
204
219
|
return [7 /*endfinally*/];
|
|
205
|
-
case
|
|
220
|
+
case 9: return [2 /*return*/];
|
|
206
221
|
}
|
|
207
222
|
});
|
|
208
223
|
}); }, [options.idleTimeout]);
|
|
@@ -231,8 +246,9 @@ function useCAMSAuth(options) {
|
|
|
231
246
|
error: error,
|
|
232
247
|
token: token,
|
|
233
248
|
profile: profile,
|
|
249
|
+
loginExpiry: (_a = options.loginExpiry) !== null && _a !== void 0 ? _a : 1,
|
|
234
250
|
appCode: options.appCode,
|
|
235
|
-
storageKey: options.storageKey || "CAMS-SDK",
|
|
251
|
+
storageKey: options.storageKey || "CAMS-AUTH-SDK",
|
|
236
252
|
};
|
|
237
253
|
}
|
|
238
254
|
|
|
@@ -1398,6 +1414,11 @@ function InputOTPSlot(_a) {
|
|
|
1398
1414
|
return (jsxRuntimeExports.jsxs("div", __assign({ "data-slot": "input-otp-slot", "data-active": isActive, className: cn("data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive dark:bg-input/30 border-input relative flex h-12 w-12 items-center justify-center border-y border-r text-lg font-semibold shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:z-10 data-[active=true]:ring-[3px]", className) }, props, { children: [char, hasFakeCaret && (jsxRuntimeExports.jsx("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: jsxRuntimeExports.jsx("div", { className: "animate-caret-blink bg-foreground h-4 w-px duration-1000" }) }))] })));
|
|
1399
1415
|
}
|
|
1400
1416
|
|
|
1417
|
+
function Label(_a) {
|
|
1418
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
1419
|
+
return (jsxRuntimeExports.jsx(LabelPrimitive.Root, __assign({ "data-slot": "label", className: cn("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className) }, props)));
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1401
1422
|
var Form = FormProvider;
|
|
1402
1423
|
var FormFieldContext = React.createContext({});
|
|
1403
1424
|
var FormField = function (_a) {
|
|
@@ -1422,6 +1443,11 @@ function FormItem(_a) {
|
|
|
1422
1443
|
var id = React.useId();
|
|
1423
1444
|
return (jsxRuntimeExports.jsx(FormItemContext.Provider, { value: { id: id }, children: jsxRuntimeExports.jsx("div", __assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props)) }));
|
|
1424
1445
|
}
|
|
1446
|
+
function FormLabel(_a) {
|
|
1447
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
1448
|
+
var _b = useFormField(), error = _b.error, formItemId = _b.formItemId;
|
|
1449
|
+
return (jsxRuntimeExports.jsx(Label, __assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive", className), htmlFor: formItemId }, props)));
|
|
1450
|
+
}
|
|
1425
1451
|
function FormControl(_a) {
|
|
1426
1452
|
var props = __rest(_a, []);
|
|
1427
1453
|
var _b = useFormField(), error = _b.error, formItemId = _b.formItemId, formDescriptionId = _b.formDescriptionId, formMessageId = _b.formMessageId;
|
|
@@ -1841,9 +1867,80 @@ var AuthLogo = "data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2
|
|
|
1841
1867
|
|
|
1842
1868
|
var MicrosoftLogo = "data:image/svg+xml,%3Csvg%20width%3D%2225%22%20height%3D%2225%22%20viewBox%3D%220%200%2025%2025%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cg%20id%3D%22microsoft_svgrepo.com%22%3E%3Cpath%20id%3D%22Vector%22%20d%3D%22M20.75%2013.25H13.25V20.75H20.75V13.25Z%22%20fill%3D%22%23FEBA08%22%2F%3E%3Cpath%20id%3D%22Vector_2%22%20d%3D%22M11.75%2013.25H4.25V20.75H11.75V13.25Z%22%20fill%3D%22%2305A6F0%22%2F%3E%3Cpath%20id%3D%22Vector_3%22%20d%3D%22M20.75%204.25H13.25V11.75H20.75V4.25Z%22%20fill%3D%22%2380BC06%22%2F%3E%3Cpath%20id%3D%22Vector_4%22%20d%3D%22M11.75%204.25H4.25V11.75H11.75V4.25Z%22%20fill%3D%22%23F25325%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E";
|
|
1843
1869
|
|
|
1870
|
+
var Input = React.forwardRef(function (_a, ref) {
|
|
1871
|
+
var className = _a.className, type = _a.type, props = __rest(_a, ["className", "type"]);
|
|
1872
|
+
return (jsxRuntimeExports.jsx("input", __assign({ type: type, className: cn("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className), ref: ref }, props)));
|
|
1873
|
+
});
|
|
1874
|
+
Input.displayName = "Input";
|
|
1875
|
+
|
|
1876
|
+
var credentialsSchema = z.object({
|
|
1877
|
+
username: z.string().min(1, "Username is required"),
|
|
1878
|
+
password: z.string().min(1, "Password is required"),
|
|
1879
|
+
});
|
|
1880
|
+
var ADLoginModal = function (_a) {
|
|
1881
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, onLogin = _a.onLogin;
|
|
1882
|
+
var _b = useState("credentials"), step = _b[0], setStep = _b[1];
|
|
1883
|
+
var _c = useState({ username: "", password: "" }), credentials = _c[0], setCredentials = _c[1];
|
|
1884
|
+
var _d = useState(""), mfaCode = _d[0], setMfaCode = _d[1];
|
|
1885
|
+
var _e = useState(false), isLoading = _e[0], setIsLoading = _e[1];
|
|
1886
|
+
var form = useForm({
|
|
1887
|
+
resolver: a$1(credentialsSchema),
|
|
1888
|
+
defaultValues: { username: "", password: "" },
|
|
1889
|
+
});
|
|
1890
|
+
var handleCredentialsSubmit = function (values) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1891
|
+
return __generator(this, function (_a) {
|
|
1892
|
+
setCredentials(values);
|
|
1893
|
+
setStep("mfa");
|
|
1894
|
+
return [2 /*return*/];
|
|
1895
|
+
});
|
|
1896
|
+
}); };
|
|
1897
|
+
var handleMFASubmit = function (code) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1898
|
+
var error_1;
|
|
1899
|
+
return __generator(this, function (_a) {
|
|
1900
|
+
switch (_a.label) {
|
|
1901
|
+
case 0:
|
|
1902
|
+
setIsLoading(true);
|
|
1903
|
+
_a.label = 1;
|
|
1904
|
+
case 1:
|
|
1905
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
1906
|
+
return [4 /*yield*/, onLogin(credentials.username, credentials.password, code)];
|
|
1907
|
+
case 2:
|
|
1908
|
+
_a.sent();
|
|
1909
|
+
onOpenChange(false);
|
|
1910
|
+
setStep("credentials");
|
|
1911
|
+
form.reset();
|
|
1912
|
+
setMfaCode("");
|
|
1913
|
+
return [3 /*break*/, 5];
|
|
1914
|
+
case 3:
|
|
1915
|
+
error_1 = _a.sent();
|
|
1916
|
+
console.error("AD login failed:", error_1);
|
|
1917
|
+
return [3 /*break*/, 5];
|
|
1918
|
+
case 4:
|
|
1919
|
+
setIsLoading(false);
|
|
1920
|
+
return [7 /*endfinally*/];
|
|
1921
|
+
case 5: return [2 /*return*/];
|
|
1922
|
+
}
|
|
1923
|
+
});
|
|
1924
|
+
}); };
|
|
1925
|
+
var handleClose = function () {
|
|
1926
|
+
onOpenChange(false);
|
|
1927
|
+
setStep("credentials");
|
|
1928
|
+
form.reset();
|
|
1929
|
+
setMfaCode("");
|
|
1930
|
+
};
|
|
1931
|
+
return (jsxRuntimeExports.jsx(Dialog, { open: open, onOpenChange: handleClose, children: jsxRuntimeExports.jsxs(DialogContent, { className: "sm:max-w-md", children: [jsxRuntimeExports.jsx(DialogHeader, { children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(KeyIcon, { className: "w-5 h-5 text-[#506f4a]" }), jsxRuntimeExports.jsx(DialogTitle, { children: "Sign in with AD" })] }) }), step === "credentials" ? (jsxRuntimeExports.jsx(Form, __assign({}, form, { children: jsxRuntimeExports.jsxs("form", { onSubmit: form.handleSubmit(handleCredentialsSubmit), className: "space-y-4", children: [jsxRuntimeExports.jsx(FormField, { control: form.control, name: "username", render: function (_a) {
|
|
1932
|
+
var field = _a.field;
|
|
1933
|
+
return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Username" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ placeholder: "Enter your username" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
|
|
1934
|
+
} }), jsxRuntimeExports.jsx(FormField, { control: form.control, name: "password", render: function (_a) {
|
|
1935
|
+
var field = _a.field;
|
|
1936
|
+
return (jsxRuntimeExports.jsxs(FormItem, { children: [jsxRuntimeExports.jsx(FormLabel, { children: "Password" }), jsxRuntimeExports.jsx(FormControl, { children: jsxRuntimeExports.jsx(Input, __assign({ type: "password", placeholder: "Enter your password" }, field)) }), jsxRuntimeExports.jsx(FormMessage, {})] }));
|
|
1937
|
+
} }), jsxRuntimeExports.jsx(Button, { type: "submit", className: "w-full bg-[#506f4a] hover:bg-[#506f4a]/90", children: "Continue" })] }) }))) : (jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsx(GenericOTPVerifier, { value: mfaCode, setValue: setMfaCode, setLoading: setIsLoading, isDisabled: isLoading, onChangeOTP: handleMFASubmit, fieldName: "AuthenticatorCode" }), isLoading && (jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-center gap-2 text-sm text-muted-foreground", children: [jsxRuntimeExports.jsx(Loader2, { className: "w-4 h-4 animate-spin" }), jsxRuntimeExports.jsx("span", { children: "Verifying..." })] }))] }))] }) }));
|
|
1938
|
+
};
|
|
1939
|
+
|
|
1844
1940
|
var DefaultLoginPage = function () {
|
|
1845
1941
|
var context = useCAMSContext$1();
|
|
1846
1942
|
var login = context.login, isLoading = context.isLoading, authMode = context.authMode;
|
|
1943
|
+
var _a = useState(false), showADModal = _a[0], setShowADModal = _a[1];
|
|
1847
1944
|
var handleLogin = function () {
|
|
1848
1945
|
if (authMode === "MSAL") {
|
|
1849
1946
|
login();
|
|
@@ -1863,11 +1960,21 @@ var DefaultLoginPage = function () {
|
|
|
1863
1960
|
},
|
|
1864
1961
|
exit: { opacity: 0, scale: 0.8, y: -50, transition: { duration: 0.3 } },
|
|
1865
1962
|
};
|
|
1866
|
-
return (jsxRuntimeExports.
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1963
|
+
return (jsxRuntimeExports.jsxs("main", { className: "min-h-screen bg-gray-50", children: [jsxRuntimeExports.jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, exit: { opacity: 0 }, transition: { duration: 0.5 }, children: jsxRuntimeExports.jsx("div", { className: "flex h-screen items-center justify-center", children: jsxRuntimeExports.jsxs(motion.div, { variants: cardVariants, initial: "hidden", animate: "visible", exit: "exit", className: "w-full max-w-md p-6 space-y-4 bg-gray-50 rounded-2xl shadow-2xl --dark:bg-gray-800", children: [jsxRuntimeExports.jsxs(CardHeader, { className: "text-center space-y-3", children: [jsxRuntimeExports.jsx("div", { className: "w-full flex items-center justify-center", children: jsxRuntimeExports.jsx("img", { src: NIBSSLogo, alt: "NIBSS Logo", width: 265, height: 265 }) }), jsxRuntimeExports.jsx(CardTitle, { className: "text-3xl font-bold --text-gray-900 --dark:text-white", children: "NIBSS CAMS" }), jsxRuntimeExports.jsx(CardTitle, { className: "text-gray-500 dark:text-gray-400 font-bold text-lg", children: "Centralized Authentication" })] }), jsxRuntimeExports.jsxs(CardAction, { className: "w-full flex flex-col items-center justify-center text-center text-gray-500 dark:text-gray-400 mb-4", children: [jsxRuntimeExports.jsx("img", { src: AuthLogo, alt: "Auth Logo", width: 365, height: 365 }), "Kindly use the below identity providers to authenticate"] }), jsxRuntimeExports.jsxs("div", { className: "space-y-4", children: [jsxRuntimeExports.jsxs(Button
|
|
1964
|
+
// variant="outline"
|
|
1965
|
+
, {
|
|
1966
|
+
// variant="outline"
|
|
1967
|
+
className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: handleLogin, disabled: isLoading, children: [jsxRuntimeExports.jsx("img", { src: MicrosoftLogo, alt: "Microsoft Logo", width: 35, height: 35 }), jsxRuntimeExports.jsx("span", { children: isLoading ? "Logging in..." : "Sign in with Microsoft" })] }), jsxRuntimeExports.jsxs(Button
|
|
1968
|
+
// variant="outline"
|
|
1969
|
+
, {
|
|
1970
|
+
// variant="outline"
|
|
1971
|
+
className: "w-full flex items-center justify-center cursor-pointer bg-[#506f4a] hover:bg-[#506f4a] rounded-lg border border-transparent px-5 py-8 text-base font-medium transition-colors duration-250", onClick: function () { return setShowADModal(true); }, disabled: isLoading, children: [jsxRuntimeExports.jsx(KeyIcon, {}), jsxRuntimeExports.jsx("span", { children: isLoading ? "Logging in..." : "Sign in with AD" })] })] }), jsxRuntimeExports.jsxs(CardFooter, { className: "flex items-center justify-center mt-6 space-x-2 text-gray-400 text-sm", children: [jsxRuntimeExports.jsx(ShieldCheck, { className: "w-4 h-4 text-[#506f4a] pulse-glow" }), jsxRuntimeExports.jsx("span", { children: "Powered By NIBSS" })] })] }) }) }, "landing"), jsxRuntimeExports.jsx(ADLoginModal, { open: showADModal, onOpenChange: setShowADModal, onLogin: function (username, password, mfaCode) { return __awaiter(void 0, void 0, void 0, function () {
|
|
1972
|
+
return __generator(this, function (_a) {
|
|
1973
|
+
// Implement your AD login logic here
|
|
1974
|
+
console.log("AD Login:", { username: username, password: password, mfaCode: mfaCode });
|
|
1975
|
+
return [2 /*return*/];
|
|
1976
|
+
});
|
|
1977
|
+
}); } })] }));
|
|
1871
1978
|
};
|
|
1872
1979
|
|
|
1873
1980
|
var ErrorFallback = function (_a) {
|