@cundi/refine-xaf 1.0.0 → 1.0.1

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/dist/index.js CHANGED
@@ -35,11 +35,13 @@ __export(index_exports, {
35
35
  ApplicationUserCreate: () => ApplicationUserCreate,
36
36
  ApplicationUserEdit: () => ApplicationUserEdit,
37
37
  ApplicationUserList: () => ApplicationUserList,
38
+ AuthCallback: () => AuthCallback,
38
39
  Base64Upload: () => Base64Upload,
39
40
  ColorModeContext: () => ColorModeContext,
40
41
  ColorModeContextProvider: () => ColorModeContextProvider,
41
42
  Header: () => Header,
42
43
  HttpError: () => HttpError,
44
+ KeycloakLoginPage: () => KeycloakLoginPage,
43
45
  LoginPage: () => LoginPage,
44
46
  RelatedList: () => RelatedList,
45
47
  RoleCreate: () => RoleCreate,
@@ -53,17 +55,22 @@ __export(index_exports, {
53
55
  authProvider: () => authProvider,
54
56
  authService: () => authService,
55
57
  dataProvider: () => dataProvider,
58
+ generatePassword: () => generatePassword,
56
59
  getBaseUrl: () => getBaseUrl,
57
60
  httpClient: () => httpClient,
61
+ keycloakService: () => keycloakService,
58
62
  parseJwt: () => parseJwt,
59
63
  useColorMode: () => useColorMode,
60
- useModelTypes: () => useModelTypes
64
+ useModelTypes: () => useModelTypes,
65
+ validatePasswordStrength: () => validatePasswordStrength
61
66
  });
62
67
  module.exports = __toCommonJS(index_exports);
63
68
 
64
69
  // src/utils/httpClient.ts
65
70
  var import_meta = {};
66
71
  var TOKEN_KEY = "refine-auth";
72
+ var MAX_RETRIES = 3;
73
+ var BASE_RETRY_DELAY = 1e3;
67
74
  var HttpError = class _HttpError extends Error {
68
75
  constructor(statusCode, message2, body) {
69
76
  super(message2);
@@ -79,8 +86,15 @@ var HttpError = class _HttpError extends Error {
79
86
  var getBaseUrl = () => {
80
87
  return import_meta.env?.VITE_API_URL || "";
81
88
  };
82
- var httpClient = async (endpoint, options = {}) => {
83
- const { skipAuth, headers, ...restOptions } = options;
89
+ var delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
90
+ var isRetryableError = (error) => {
91
+ if (error instanceof HttpError) {
92
+ return error.statusCode >= 500;
93
+ }
94
+ return true;
95
+ };
96
+ var httpClient = async (endpoint, options = {}, retryCount = 0) => {
97
+ const { skipAuth, noRetry, headers, ...restOptions } = options;
84
98
  const baseUrl = getBaseUrl();
85
99
  const url = endpoint.startsWith("http") ? endpoint : `${baseUrl}${endpoint.startsWith("/") ? "" : "/"}${endpoint}`;
86
100
  const defaultHeaders = {
@@ -109,7 +123,14 @@ var httpClient = async (endpoint, options = {}) => {
109
123
  } catch {
110
124
  parsedError = errorBody;
111
125
  }
112
- throw new HttpError(response.status, response.statusText, parsedError);
126
+ const error = new HttpError(response.status, response.statusText, parsedError);
127
+ if (!noRetry && retryCount < MAX_RETRIES && isRetryableError(error)) {
128
+ const retryDelay = BASE_RETRY_DELAY * Math.pow(2, retryCount);
129
+ console.warn(`Request failed with ${response.status}, retrying in ${retryDelay}ms... (${retryCount + 1}/${MAX_RETRIES})`);
130
+ await delay(retryDelay);
131
+ return httpClient(endpoint, options, retryCount + 1);
132
+ }
133
+ throw error;
113
134
  }
114
135
  if (response.status === 204) {
115
136
  return null;
@@ -119,6 +140,12 @@ var httpClient = async (endpoint, options = {}) => {
119
140
  if (error instanceof HttpError) {
120
141
  throw error;
121
142
  }
143
+ if (!noRetry && retryCount < MAX_RETRIES && isRetryableError(error)) {
144
+ const retryDelay = BASE_RETRY_DELAY * Math.pow(2, retryCount);
145
+ console.warn(`Network error, retrying in ${retryDelay}ms... (${retryCount + 1}/${MAX_RETRIES})`);
146
+ await delay(retryDelay);
147
+ return httpClient(endpoint, options, retryCount + 1);
148
+ }
122
149
  throw new HttpError(500, "Network Error", error);
123
150
  }
124
151
  };
@@ -176,22 +203,208 @@ var authService = {
176
203
  }
177
204
  };
178
205
 
206
+ // src/utils/pkceUtils.ts
207
+ var STORAGE_KEY_CODE_VERIFIER = "pkce_code_verifier";
208
+ var STORAGE_KEY_STATE = "pkce_state";
209
+ function generateRandomString(length) {
210
+ const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~";
211
+ const randomValues = new Uint8Array(length);
212
+ crypto.getRandomValues(randomValues);
213
+ let result = "";
214
+ for (let i = 0; i < length; i++) {
215
+ result += charset[randomValues[i] % charset.length];
216
+ }
217
+ return result;
218
+ }
219
+ async function sha256(plain) {
220
+ const encoder = new TextEncoder();
221
+ const data = encoder.encode(plain);
222
+ const hash = await crypto.subtle.digest("SHA-256", data);
223
+ const base64 = btoa(String.fromCharCode(...new Uint8Array(hash)));
224
+ return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
225
+ }
226
+ function generateCodeVerifier() {
227
+ return generateRandomString(128);
228
+ }
229
+ async function generateCodeChallenge(verifier) {
230
+ return await sha256(verifier);
231
+ }
232
+ function generateState() {
233
+ return generateRandomString(32);
234
+ }
235
+ function saveCodeVerifier(verifier) {
236
+ sessionStorage.setItem(STORAGE_KEY_CODE_VERIFIER, verifier);
237
+ }
238
+ function getCodeVerifier() {
239
+ return sessionStorage.getItem(STORAGE_KEY_CODE_VERIFIER);
240
+ }
241
+ function clearCodeVerifier() {
242
+ sessionStorage.removeItem(STORAGE_KEY_CODE_VERIFIER);
243
+ }
244
+ function saveState(state) {
245
+ sessionStorage.setItem(STORAGE_KEY_STATE, state);
246
+ }
247
+ function getState() {
248
+ return sessionStorage.getItem(STORAGE_KEY_STATE);
249
+ }
250
+ function clearState() {
251
+ sessionStorage.removeItem(STORAGE_KEY_STATE);
252
+ }
253
+ function clearPKCEData() {
254
+ clearCodeVerifier();
255
+ clearState();
256
+ }
257
+
258
+ // src/services/keycloakService.ts
259
+ var import_meta2 = {};
260
+ function getEnvConfig() {
261
+ const env = import_meta2.env;
262
+ const config = {
263
+ keycloakUrl: env.VITE_KEYCLOAK_URL || "http://localhost:8080",
264
+ realm: env.VITE_KEYCLOAK_REALM || "cundi",
265
+ clientId: env.VITE_KEYCLOAK_CLIENT_ID || "cundi-web",
266
+ redirectUri: env.VITE_REDIRECT_URI || `${window.location.origin}/auth/callback`
267
+ };
268
+ const missingVars = [];
269
+ if (!env.VITE_KEYCLOAK_URL) missingVars.push("VITE_KEYCLOAK_URL");
270
+ if (!env.VITE_KEYCLOAK_REALM) missingVars.push("VITE_KEYCLOAK_REALM");
271
+ if (!env.VITE_KEYCLOAK_CLIENT_ID) missingVars.push("VITE_KEYCLOAK_CLIENT_ID");
272
+ if (missingVars.length > 0) {
273
+ console.warn(
274
+ `[Keycloak] Missing environment variables: ${missingVars.join(", ")}. Using default values. Please configure these in your .env file for production.`
275
+ );
276
+ }
277
+ return config;
278
+ }
279
+ var keycloakService = {
280
+ /**
281
+ * Start Authorization Code Flow with PKCE
282
+ * Redirects user to Keycloak login page
283
+ */
284
+ startAuthorizationFlow: async () => {
285
+ const { keycloakUrl, realm, clientId, redirectUri } = getEnvConfig();
286
+ const codeVerifier = generateCodeVerifier();
287
+ const codeChallenge = await generateCodeChallenge(codeVerifier);
288
+ const state = generateState();
289
+ saveCodeVerifier(codeVerifier);
290
+ saveState(state);
291
+ const authUrl = new URL(`${keycloakUrl}/realms/${realm}/protocol/openid-connect/auth`);
292
+ authUrl.searchParams.append("client_id", clientId);
293
+ authUrl.searchParams.append("redirect_uri", redirectUri);
294
+ authUrl.searchParams.append("response_type", "code");
295
+ authUrl.searchParams.append("scope", "openid profile email");
296
+ authUrl.searchParams.append("code_challenge", codeChallenge);
297
+ authUrl.searchParams.append("code_challenge_method", "S256");
298
+ authUrl.searchParams.append("state", state);
299
+ window.location.href = authUrl.toString();
300
+ },
301
+ /**
302
+ * Handle callback from Keycloak
303
+ * Exchange authorization code for access token
304
+ */
305
+ handleCallback: async (code, state) => {
306
+ const { keycloakUrl, realm, clientId, redirectUri } = getEnvConfig();
307
+ const savedState = getState();
308
+ if (!savedState || savedState !== state) {
309
+ clearPKCEData();
310
+ throw new Error("Invalid state parameter - possible CSRF attack");
311
+ }
312
+ const codeVerifier = getCodeVerifier();
313
+ if (!codeVerifier) {
314
+ throw new Error("Code verifier not found - session may have expired");
315
+ }
316
+ const tokenUrl = `${keycloakUrl}/realms/${realm}/protocol/openid-connect/token`;
317
+ const formData = new URLSearchParams();
318
+ formData.append("grant_type", "authorization_code");
319
+ formData.append("client_id", clientId);
320
+ formData.append("code", code);
321
+ formData.append("redirect_uri", redirectUri);
322
+ formData.append("code_verifier", codeVerifier);
323
+ const response = await fetch(tokenUrl, {
324
+ method: "POST",
325
+ headers: {
326
+ "Content-Type": "application/x-www-form-urlencoded"
327
+ },
328
+ body: formData.toString()
329
+ });
330
+ clearPKCEData();
331
+ if (!response.ok) {
332
+ const error = await response.text();
333
+ throw new Error(`Token exchange failed: ${error}`);
334
+ }
335
+ const data = await response.json();
336
+ return {
337
+ accessToken: data.access_token,
338
+ idToken: data.id_token || data.access_token
339
+ // Fallback to access token if no id_token
340
+ };
341
+ },
342
+ /**
343
+ * Logout from Keycloak
344
+ * Redirects to Keycloak logout endpoint to properly clear the session
345
+ */
346
+ logout: (idToken) => {
347
+ const { keycloakUrl, realm } = getEnvConfig();
348
+ clearPKCEData();
349
+ const logoutUrl = new URL(`${keycloakUrl}/realms/${realm}/protocol/openid-connect/logout`);
350
+ const appBaseUrl = window.location.origin;
351
+ logoutUrl.searchParams.append("post_logout_redirect_uri", `${appBaseUrl}/login`);
352
+ if (idToken) {
353
+ logoutUrl.searchParams.append("id_token_hint", idToken);
354
+ }
355
+ window.location.href = logoutUrl.toString();
356
+ }
357
+ };
358
+
179
359
  // src/authProvider.ts
180
360
  var authProvider = {
181
- login: async ({ username, password }) => {
361
+ login: async ({ username, password, provider, code, state }) => {
182
362
  try {
183
- const token = await authService.login({ username, password });
363
+ let token;
364
+ let idToken;
365
+ if (provider === "keycloak") {
366
+ if (code && state) {
367
+ const result = await keycloakService.handleCallback(code, state);
368
+ token = result.accessToken;
369
+ idToken = result.idToken;
370
+ } else {
371
+ await keycloakService.startAuthorizationFlow();
372
+ return {
373
+ success: false,
374
+ error: {
375
+ message: "Redirecting to Keycloak...",
376
+ name: "Redirect"
377
+ }
378
+ };
379
+ }
380
+ } else {
381
+ token = await authService.login({ username, password });
382
+ }
184
383
  if (token) {
185
384
  localStorage.setItem(TOKEN_KEY, token);
385
+ if (idToken) {
386
+ localStorage.setItem("id_token", idToken);
387
+ }
186
388
  const claims = parseJwt(token);
187
389
  const userId = claims["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"] || claims.sub || claims.id || claims.Oid;
188
- const claimName = claims["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] || claims.unique_name || claims.name || username;
390
+ const claimName = claims["http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] || claims.unique_name || claims.preferred_username || claims.name || username;
189
391
  try {
190
392
  let user = null;
191
- if (userId) {
192
- user = await authService.getUserById(userId);
193
- } else {
194
- user = await authService.getUserByUsername(username);
393
+ let retries = provider === "keycloak" ? 3 : 1;
394
+ for (let i = 0; i < retries; i++) {
395
+ if (i > 0) {
396
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
397
+ }
398
+ if (provider === "keycloak") {
399
+ user = await authService.getUserByUsername(claimName || username);
400
+ } else if (userId) {
401
+ user = await authService.getUserById(userId);
402
+ } else {
403
+ user = await authService.getUserByUsername(claimName || username);
404
+ }
405
+ if (user && user.Roles && user.Roles.length > 0) {
406
+ break;
407
+ }
195
408
  }
196
409
  if (user) {
197
410
  if (user.Photo) {
@@ -208,6 +421,7 @@ var authProvider = {
208
421
  isAdmin = user.Roles.some((r) => r.IsAdministrative);
209
422
  }
210
423
  localStorage.setItem("user_is_admin", isAdmin ? "true" : "false");
424
+ localStorage.setItem("auth_provider", provider || "local");
211
425
  }
212
426
  } catch (error) {
213
427
  console.error("Failed to fetch user details", error);
@@ -235,12 +449,22 @@ var authProvider = {
235
449
  }
236
450
  },
237
451
  logout: async () => {
452
+ const authProvider2 = localStorage.getItem("auth_provider");
453
+ const idToken = localStorage.getItem("id_token");
238
454
  localStorage.removeItem(TOKEN_KEY);
455
+ localStorage.removeItem("id_token");
239
456
  localStorage.removeItem("user_photo");
240
457
  localStorage.removeItem("user_name");
241
458
  localStorage.removeItem("user_id");
242
459
  localStorage.removeItem("user_roles");
243
460
  localStorage.removeItem("user_is_admin");
461
+ localStorage.removeItem("auth_provider");
462
+ if (authProvider2 === "keycloak") {
463
+ keycloakService.logout(idToken || void 0);
464
+ return {
465
+ success: true
466
+ };
467
+ }
244
468
  return {
245
469
  success: true,
246
470
  redirectTo: "/login"
@@ -352,7 +576,6 @@ var mapOperator = (operator) => {
352
576
  return "ge";
353
577
  case "in":
354
578
  return "in";
355
- // OData v4.01 usually, or handled manually
356
579
  case "contains":
357
580
  return "contains";
358
581
  case "startswith":
@@ -535,6 +758,33 @@ var SecurityPermissionState = /* @__PURE__ */ ((SecurityPermissionState2) => {
535
758
  return SecurityPermissionState2;
536
759
  })(SecurityPermissionState || {});
537
760
 
761
+ // src/utils/passwordUtils.ts
762
+ var generatePassword = (length = 12) => {
763
+ const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
764
+ const array = new Uint32Array(length);
765
+ crypto.getRandomValues(array);
766
+ return Array.from(array, (num) => charset[num % charset.length]).join("");
767
+ };
768
+ var validatePasswordStrength = (password) => {
769
+ if (password.length < 8) {
770
+ return { isValid: false, message: "Password must be at least 8 characters long" };
771
+ }
772
+ const hasUpperCase = /[A-Z]/.test(password);
773
+ const hasLowerCase = /[a-z]/.test(password);
774
+ const hasNumbers = /\d/.test(password);
775
+ const hasSpecialChar = /[!@#$%^&*()_+]/.test(password);
776
+ if (!hasUpperCase || !hasLowerCase) {
777
+ return { isValid: false, message: "Password must contain both uppercase and lowercase letters" };
778
+ }
779
+ if (!hasNumbers) {
780
+ return { isValid: false, message: "Password must contain at least one number" };
781
+ }
782
+ if (!hasSpecialChar) {
783
+ return { isValid: false, message: "Password must contain at least one special character" };
784
+ }
785
+ return { isValid: true, message: "Password is strong" };
786
+ };
787
+
538
788
  // src/components/Header.tsx
539
789
  var import_react3 = __toESM(require("react"));
540
790
  var import_core = require("@refinedev/core");
@@ -624,6 +874,7 @@ var Base64Upload = ({ value, onChange }) => {
624
874
  };
625
875
 
626
876
  // src/components/Header.tsx
877
+ var import_meta3 = {};
627
878
  var { Text } = import_lib3.Typography;
628
879
  var { useToken } = import_lib3.theme;
629
880
  var Header = () => {
@@ -633,6 +884,12 @@ var Header = () => {
633
884
  const { mode, setMode } = useColorMode();
634
885
  const { token } = useToken();
635
886
  const invalidate = (0, import_core.useInvalidate)();
887
+ const [authProvider2, setAuthProvider] = (0, import_react3.useState)(null);
888
+ (0, import_react3.useEffect)(() => {
889
+ if (user) {
890
+ setAuthProvider(localStorage.getItem("auth_provider"));
891
+ }
892
+ }, [user]);
636
893
  const [isPhotoModalOpen, setIsPhotoModalOpen] = (0, import_react3.useState)(false);
637
894
  const [isPhotoLoading, setIsPhotoLoading] = (0, import_react3.useState)(false);
638
895
  const [photoForm] = import_lib3.Form.useForm();
@@ -662,14 +919,8 @@ var Header = () => {
662
919
  setIsPhotoModalOpen(false);
663
920
  }
664
921
  };
665
- const generatePassword = () => {
666
- const length = 12;
667
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
668
- let retVal = "";
669
- for (let i = 0, n = charset.length; i < length; ++i) {
670
- retVal += charset.charAt(Math.floor(Math.random() * n));
671
- }
672
- passwordForm.setFieldsValue({ password: retVal });
922
+ const handleGeneratePassword = () => {
923
+ passwordForm.setFieldsValue({ password: generatePassword() });
673
924
  };
674
925
  const handlePasswordSubmit = async (values) => {
675
926
  setIsPasswordLoading(true);
@@ -712,11 +963,18 @@ var Header = () => {
712
963
  },
713
964
  {
714
965
  key: "change-password",
715
- label: "Change Password",
966
+ label: authProvider2 === "keycloak" ? "Manage Account in Keycloak" : "Change Password",
716
967
  icon: /* @__PURE__ */ import_react3.default.createElement(import_icons.LockOutlined, null),
717
968
  onClick: () => {
718
- passwordForm.resetFields();
719
- setIsPasswordModalOpen(true);
969
+ if (authProvider2 === "keycloak") {
970
+ const env = import_meta3.env;
971
+ const keycloakUrl = env?.VITE_KEYCLOAK_URL || "http://localhost:8080";
972
+ const realm = env?.VITE_KEYCLOAK_REALM || "cundi";
973
+ window.open(`${keycloakUrl}/realms/${realm}/account`, "_blank");
974
+ } else {
975
+ passwordForm.resetFields();
976
+ setIsPasswordModalOpen(true);
977
+ }
720
978
  }
721
979
  },
722
980
  {
@@ -780,7 +1038,7 @@ var Header = () => {
780
1038
  rules: [{ required: true, message: "Please input the new password!" }]
781
1039
  },
782
1040
  /* @__PURE__ */ import_react3.default.createElement(import_lib3.Input.Password, { placeholder: "Enter new password" })
783
- ), /* @__PURE__ */ import_react3.default.createElement(import_lib3.Button, { icon: /* @__PURE__ */ import_react3.default.createElement(import_icons.ThunderboltOutlined, null), onClick: generatePassword })))
1041
+ ), /* @__PURE__ */ import_react3.default.createElement(import_lib3.Button, { icon: /* @__PURE__ */ import_react3.default.createElement(import_icons.ThunderboltOutlined, null), onClick: handleGeneratePassword })))
784
1042
  )
785
1043
  );
786
1044
  };
@@ -795,7 +1053,7 @@ var SmartList = ({
795
1053
  resource,
796
1054
  searchFields
797
1055
  }) => {
798
- const { tableProps, searchFormProps, tableQueryResult, queryResult, setFilters } = (0, import_antd2.useTable)({
1056
+ const { tableProps, searchFormProps, tableQuery, setFilters } = (0, import_antd2.useTable)({
799
1057
  resource,
800
1058
  syncWithLocation: true,
801
1059
  onSearch: (params) => {
@@ -814,17 +1072,25 @@ var SmartList = ({
814
1072
  return filters;
815
1073
  }
816
1074
  });
817
- const columns = import_react4.default.Children.toArray(children).map((child) => {
818
- return {
819
- key: child.props.dataIndex || child.props.title || "unknown",
820
- title: child.props.title,
821
- dataIndex: child.props.dataIndex,
822
- defaultVisible: child.props.defaultVisible
823
- };
824
- });
1075
+ const columns = (0, import_react4.useMemo)(
1076
+ () => import_react4.default.Children.toArray(children).map((child) => {
1077
+ const props = child.props || {};
1078
+ return {
1079
+ key: String(props.dataIndex || props.title || "unknown"),
1080
+ title: props.title,
1081
+ dataIndex: props.dataIndex,
1082
+ defaultVisible: props.defaultVisible
1083
+ };
1084
+ }),
1085
+ [children]
1086
+ );
825
1087
  const [visibleColumns, setVisibleColumns] = (0, import_react4.useState)([]);
1088
+ const columnKeysString = (0, import_react4.useMemo)(
1089
+ () => columns.map((c) => c.key).join(","),
1090
+ [columns]
1091
+ );
826
1092
  (0, import_react4.useEffect)(() => {
827
- const allKeys = columns.map((c) => c.key?.toString());
1093
+ const allKeys = columns.map((c) => c.key);
828
1094
  const storageKey = `table-columns-${resource}`;
829
1095
  const saved = localStorage.getItem(storageKey);
830
1096
  if (saved) {
@@ -839,9 +1105,9 @@ var SmartList = ({
839
1105
  console.error("Failed to parse saved columns", e);
840
1106
  }
841
1107
  }
842
- const defaultVisible = columns.filter((c) => c.defaultVisible || c.dataIndex === "actions").map((c) => c.key?.toString());
1108
+ const defaultVisible = columns.filter((c) => c.defaultVisible || c.dataIndex === "actions").map((c) => c.key);
843
1109
  setVisibleColumns(defaultVisible);
844
- }, [children, resource]);
1110
+ }, [columnKeysString, resource, columns]);
845
1111
  const handleColumnChange = (key, checked) => {
846
1112
  let newVisible;
847
1113
  if (checked) {
@@ -907,7 +1173,7 @@ var SmartList = ({
907
1173
  }
908
1174
  }
909
1175
  }
910
- ))), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Space, null, /* @__PURE__ */ import_react4.default.createElement(import_lib4.Button, { icon: /* @__PURE__ */ import_react4.default.createElement(import_icons2.ReloadOutlined, null), onClick: () => (tableQueryResult || queryResult)?.refetch() }, "Refresh"), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Popover, { content, title: "Columns", trigger: "click", placement: "bottomRight" }, /* @__PURE__ */ import_react4.default.createElement(import_lib4.Button, { icon: /* @__PURE__ */ import_react4.default.createElement(import_icons2.SettingOutlined, null) }, "Columns")))), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Table, { ...tableProps, rowKey: "Oid" }, filteredChildren));
1176
+ ))), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Space, null, /* @__PURE__ */ import_react4.default.createElement(import_lib4.Button, { icon: /* @__PURE__ */ import_react4.default.createElement(import_icons2.ReloadOutlined, null), onClick: () => tableQuery?.refetch() }, "Refresh"), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Popover, { content, title: "Columns", trigger: "click", placement: "bottomRight" }, /* @__PURE__ */ import_react4.default.createElement(import_lib4.Button, { icon: /* @__PURE__ */ import_react4.default.createElement(import_icons2.SettingOutlined, null) }, "Columns")))), /* @__PURE__ */ import_react4.default.createElement(import_lib4.Table, { ...tableProps, rowKey: "Oid" }, filteredChildren));
911
1177
  };
912
1178
 
913
1179
  // src/components/RelatedList.tsx
@@ -10548,10 +10814,10 @@ editHandlers.compositionend = (view, event) => {
10548
10814
  scheduleComposeEnd(view, 20);
10549
10815
  }
10550
10816
  };
10551
- function scheduleComposeEnd(view, delay) {
10817
+ function scheduleComposeEnd(view, delay2) {
10552
10818
  clearTimeout(view.input.composingTimeout);
10553
- if (delay > -1)
10554
- view.input.composingTimeout = setTimeout(() => endComposition(view), delay);
10819
+ if (delay2 > -1)
10820
+ view.input.composingTimeout = setTimeout(() => endComposition(view), delay2);
10555
10821
  }
10556
10822
  function clearComposition(view) {
10557
10823
  if (view.composing) {
@@ -18622,87 +18888,12 @@ var TiptapEditor = ({ value, onChange, disabled }) => {
18622
18888
  }
18623
18889
  ))),
18624
18890
  /* @__PURE__ */ import_react6.default.createElement("style", null, `
18625
- .ProseMirror pre {
18626
- background: ${token.colorFillTertiary};
18627
- color: ${token.colorText};
18628
- font-family: 'JetBrainsMono', 'Courier New', monospace;
18629
- padding: 0.75rem 1rem;
18630
- border-radius: 0.5rem;
18631
- }
18632
- .ProseMirror pre code {
18633
- color: inherit;
18634
- padding: 0;
18635
- background: none;
18636
- font-size: 0.8rem;
18637
- }
18638
- .ProseMirror p {
18639
- margin-bottom: 0px;
18640
- }
18641
- .ProseMirror:focus {
18642
- outline: none;
18643
- }
18644
- .ProseMirror table {
18645
- border-collapse: collapse;
18646
- table-layout: fixed;
18647
- width: 100%;
18648
- margin: 0;
18649
- overflow: hidden;
18650
- }
18651
- .ProseMirror td, .ProseMirror th {
18652
- min-width: 1em;
18653
- border: 2px solid ${token.colorBorder};
18654
- padding: 3px 5px;
18655
- vertical-align: top;
18656
- box-sizing: border-box;
18657
- position: relative;
18658
- }
18659
- .ProseMirror th {
18660
- font-weight: bold;
18661
- text-align: left;
18662
- background-color: ${token.colorFillQuaternary};
18663
- }
18664
- .ProseMirror .selectedCell:after {
18665
- z-index: 2;
18666
- position: absolute;
18667
- content: "";
18668
- left: 0; right: 0; top: 0; bottom: 0;
18669
- background: rgba(200, 200, 255, 0.4);
18670
- pointer-events: none;
18671
- }
18672
- .ProseMirror .column-resize-handle {
18673
- position: absolute;
18674
- right: -2px;
18675
- top: 0;
18676
- bottom: -2px;
18677
- width: 4px;
18678
- background-color: #adf;
18679
- pointer-events: none;
18680
- }
18681
- ul[data-type="taskList"] {
18682
- list-style: none;
18683
- padding: 0;
18684
- }
18685
- ul[data-type="taskList"] li {
18686
- display: flex;
18687
- align-items: center;
18688
- }
18689
- ul[data-type="taskList"] li > label {
18690
- flex: 0 0 auto;
18691
- margin-right: 0.5rem;
18692
- user-select: none;
18693
- }
18694
- ul[data-type="taskList"] li > div {
18695
- flex: 1 1 auto;
18696
- }
18697
- ul[data-type="taskList"] input[type="checkbox"] {
18698
- cursor: pointer;
18699
- }
18700
- .ProseMirror p.is-editor-empty:first-child::before {
18701
- color: ${token.colorTextPlaceholder};
18702
- content: attr(data-placeholder);
18703
- float: left;
18704
- height: 0;
18705
- pointer-events: none;
18891
+ :root {
18892
+ --tiptap-code-bg: ${token.colorFillTertiary};
18893
+ --tiptap-code-text: ${token.colorText};
18894
+ --tiptap-border: ${token.colorBorder};
18895
+ --tiptap-header-bg: ${token.colorFillQuaternary};
18896
+ --tiptap-placeholder: ${token.colorTextPlaceholder};
18706
18897
  }
18707
18898
  `),
18708
18899
  /* @__PURE__ */ import_react6.default.createElement("div", { style: {
@@ -18719,6 +18910,7 @@ var import_react8 = __toESM(require("react"));
18719
18910
  var import_core18 = require("@refinedev/core");
18720
18911
  var import_lib7 = require("antd/lib");
18721
18912
  var import_antd4 = require("@refinedev/antd");
18913
+ var import_react_router = require("react-router");
18722
18914
  var { Title, Link } = import_lib7.Typography;
18723
18915
  var LoginPage = () => {
18724
18916
  const [form] = import_lib7.Form.useForm();
@@ -18726,6 +18918,7 @@ var LoginPage = () => {
18726
18918
  const isLoading = isPending;
18727
18919
  const translate = (0, import_core18.useTranslate)();
18728
18920
  const { token } = import_lib7.theme.useToken();
18921
+ const navigate = (0, import_react_router.useNavigate)();
18729
18922
  const onFinish = async (values) => {
18730
18923
  login(values);
18731
18924
  };
@@ -18756,7 +18949,7 @@ var LoginPage = () => {
18756
18949
  boxShadow: "0 4px 24px -4px rgba(0, 0, 0, 0.1)"
18757
18950
  }
18758
18951
  },
18759
- /* @__PURE__ */ import_react8.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react8.default.createElement(Title, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account"))),
18952
+ /* @__PURE__ */ import_react8.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react8.default.createElement(Title, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react8.default.createElement(import_lib7.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Log in using a local account")),
18760
18953
  /* @__PURE__ */ import_react8.default.createElement(
18761
18954
  import_lib7.Form,
18762
18955
  {
@@ -18831,37 +19024,204 @@ var LoginPage = () => {
18831
19024
  size: "large"
18832
19025
  },
18833
19026
  translate("pages.login.signin", "Sign in")
18834
- ))
19027
+ )),
19028
+ /* @__PURE__ */ import_react8.default.createElement(import_lib7.Divider, { plain: true }, "or"),
19029
+ /* @__PURE__ */ import_react8.default.createElement(
19030
+ import_lib7.Button,
19031
+ {
19032
+ block: true,
19033
+ size: "large",
19034
+ onClick: () => navigate("/login")
19035
+ },
19036
+ "Log in using a Keycloak account"
19037
+ )
18835
19038
  )
18836
19039
  )
18837
19040
  );
18838
19041
  };
18839
19042
 
18840
- // src/pages/application-users/list.tsx
19043
+ // src/pages/login/keycloak.tsx
18841
19044
  var import_react9 = __toESM(require("react"));
18842
19045
  var import_core19 = require("@refinedev/core");
18843
- var import_antd5 = require("@refinedev/antd");
18844
19046
  var import_lib8 = require("antd/lib");
19047
+ var import_antd5 = require("@refinedev/antd");
19048
+ var import_react_router2 = require("react-router");
19049
+ var { Title: Title2 } = import_lib8.Typography;
19050
+ var KeycloakLoginPage = () => {
19051
+ const { mutate: login, isPending } = (0, import_core19.useLogin)();
19052
+ const isLoading = isPending;
19053
+ const translate = (0, import_core19.useTranslate)();
19054
+ const { token } = import_lib8.theme.useToken();
19055
+ const navigate = (0, import_react_router2.useNavigate)();
19056
+ const handleKeycloakLogin = () => {
19057
+ login({ provider: "keycloak" });
19058
+ };
19059
+ return /* @__PURE__ */ import_react9.default.createElement(
19060
+ import_lib8.Layout,
19061
+ {
19062
+ style: {
19063
+ height: "100vh",
19064
+ justifyContent: "center",
19065
+ alignItems: "center",
19066
+ backgroundColor: token.colorBgContainer
19067
+ }
19068
+ },
19069
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: { marginBottom: "24px" } }, /* @__PURE__ */ import_react9.default.createElement(
19070
+ import_antd5.ThemedTitle,
19071
+ {
19072
+ collapsed: false,
19073
+ wrapperStyles: { fontSize: "22px", justifyContent: "center" }
19074
+ }
19075
+ )),
19076
+ /* @__PURE__ */ import_react9.default.createElement(
19077
+ import_lib8.Card,
19078
+ {
19079
+ style: {
19080
+ width: "100%",
19081
+ maxWidth: "400px",
19082
+ padding: "20px",
19083
+ boxShadow: "0 4px 24px -4px rgba(0, 0, 0, 0.1)"
19084
+ }
19085
+ },
19086
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react9.default.createElement(Title2, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react9.default.createElement(import_lib8.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Choose your authentication method")),
19087
+ /* @__PURE__ */ import_react9.default.createElement(
19088
+ import_lib8.Button,
19089
+ {
19090
+ type: "primary",
19091
+ block: true,
19092
+ size: "large",
19093
+ onClick: handleKeycloakLogin,
19094
+ loading: isLoading,
19095
+ style: { marginBottom: "16px" }
19096
+ },
19097
+ "Sign in with Keycloak"
19098
+ ),
19099
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Divider, { plain: true }, "or"),
19100
+ /* @__PURE__ */ import_react9.default.createElement(
19101
+ import_lib8.Button,
19102
+ {
19103
+ block: true,
19104
+ size: "large",
19105
+ onClick: () => navigate("/login/api")
19106
+ },
19107
+ "Log in using a local account"
19108
+ )
19109
+ )
19110
+ );
19111
+ };
19112
+
19113
+ // src/pages/auth/AuthCallback.tsx
19114
+ var import_react10 = __toESM(require("react"));
19115
+ var import_core20 = require("@refinedev/core");
19116
+ var import_antd6 = require("antd");
19117
+ var AuthCallback = () => {
19118
+ const { mutate: login } = (0, import_core20.useLogin)();
19119
+ const [error, setError] = (0, import_react10.useState)(null);
19120
+ const [processing, setProcessing] = (0, import_react10.useState)(false);
19121
+ const hasProcessed = (0, import_react10.useRef)(false);
19122
+ (0, import_react10.useEffect)(() => {
19123
+ if (hasProcessed.current || processing) {
19124
+ return;
19125
+ }
19126
+ const handleCallback = async () => {
19127
+ setProcessing(true);
19128
+ hasProcessed.current = true;
19129
+ try {
19130
+ const params = new URLSearchParams(window.location.search);
19131
+ const code = params.get("code");
19132
+ const state = params.get("state");
19133
+ const errorParam = params.get("error");
19134
+ const errorDescription = params.get("error_description");
19135
+ if (errorParam) {
19136
+ setError(errorDescription || errorParam);
19137
+ setProcessing(false);
19138
+ return;
19139
+ }
19140
+ if (!code || !state) {
19141
+ setError("Missing authorization code or state parameter");
19142
+ setProcessing(false);
19143
+ return;
19144
+ }
19145
+ login({
19146
+ code,
19147
+ state,
19148
+ provider: "keycloak"
19149
+ }, {
19150
+ onError: (err) => {
19151
+ console.error("Login failed:", err);
19152
+ setError(err?.message || "Authentication failed. The authorization code may have been used already.");
19153
+ setProcessing(false);
19154
+ }
19155
+ });
19156
+ } catch (err) {
19157
+ console.error("Callback handling error:", err);
19158
+ setError("Failed to process authentication callback");
19159
+ setProcessing(false);
19160
+ }
19161
+ };
19162
+ handleCallback();
19163
+ }, [login, processing]);
19164
+ if (error) {
19165
+ return /* @__PURE__ */ import_react10.default.createElement(
19166
+ import_antd6.Result,
19167
+ {
19168
+ status: "error",
19169
+ title: "Authentication Failed",
19170
+ subTitle: error,
19171
+ extra: /* @__PURE__ */ import_react10.default.createElement(
19172
+ "button",
19173
+ {
19174
+ onClick: () => window.location.href = "/login",
19175
+ style: {
19176
+ padding: "8px 16px",
19177
+ background: "#1890ff",
19178
+ color: "white",
19179
+ border: "none",
19180
+ borderRadius: "4px",
19181
+ cursor: "pointer"
19182
+ }
19183
+ },
19184
+ "Back to Login"
19185
+ )
19186
+ }
19187
+ );
19188
+ }
19189
+ return /* @__PURE__ */ import_react10.default.createElement(
19190
+ "div",
19191
+ {
19192
+ style: {
19193
+ display: "flex",
19194
+ justifyContent: "center",
19195
+ alignItems: "center",
19196
+ height: "100vh",
19197
+ flexDirection: "column",
19198
+ gap: "16px"
19199
+ }
19200
+ },
19201
+ /* @__PURE__ */ import_react10.default.createElement(import_antd6.Spin, { size: "large" }),
19202
+ /* @__PURE__ */ import_react10.default.createElement("p", null, "Completing authentication...")
19203
+ );
19204
+ };
19205
+
19206
+ // src/pages/application-users/list.tsx
19207
+ var import_react11 = __toESM(require("react"));
19208
+ var import_core21 = require("@refinedev/core");
19209
+ var import_antd7 = require("@refinedev/antd");
19210
+ var import_lib9 = require("antd/lib");
18845
19211
  var import_icons5 = require("@ant-design/icons");
18846
19212
  var ApplicationUserList = () => {
18847
- const [isModalOpen, setIsModalOpen] = (0, import_react9.useState)(false);
18848
- const [selectedUser, setSelectedUser] = (0, import_react9.useState)(null);
18849
- const [form] = import_lib8.Form.useForm();
18850
- const { open } = (0, import_core19.useNotification)();
18851
- const [isLoading, setIsLoading] = (0, import_react9.useState)(false);
19213
+ const [isModalOpen, setIsModalOpen] = (0, import_react11.useState)(false);
19214
+ const [selectedUser, setSelectedUser] = (0, import_react11.useState)(null);
19215
+ const [form] = import_lib9.Form.useForm();
19216
+ const { open } = (0, import_core21.useNotification)();
19217
+ const [isLoading, setIsLoading] = (0, import_react11.useState)(false);
18852
19218
  const handleResetPasswordClick = (user) => {
18853
19219
  setSelectedUser(user);
18854
19220
  setIsModalOpen(true);
18855
19221
  form.resetFields();
18856
19222
  };
18857
- const generatePassword = () => {
18858
- const length = 12;
18859
- const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+";
18860
- let retVal = "";
18861
- for (let i = 0, n = charset.length; i < length; ++i) {
18862
- retVal += charset.charAt(Math.floor(Math.random() * n));
18863
- }
18864
- form.setFieldsValue({ password: retVal });
19223
+ const handleGeneratePassword = () => {
19224
+ form.setFieldsValue({ password: generatePassword() });
18865
19225
  };
18866
19226
  const handleResetPasswordSubmit = async (values) => {
18867
19227
  if (!selectedUser) return;
@@ -18884,21 +19244,21 @@ var ApplicationUserList = () => {
18884
19244
  setIsLoading(false);
18885
19245
  }
18886
19246
  };
18887
- return /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement(
19247
+ return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(
18888
19248
  SmartList,
18889
19249
  {
18890
19250
  searchFields: ["UserName", "DisplayName", "Email"]
18891
19251
  },
18892
- /* @__PURE__ */ import_react9.default.createElement(
18893
- import_lib8.Table.Column,
19252
+ /* @__PURE__ */ import_react11.default.createElement(
19253
+ import_lib9.Table.Column,
18894
19254
  {
18895
19255
  dataIndex: "Photo",
18896
19256
  title: "Photo",
18897
- render: (value) => value ? /* @__PURE__ */ import_react9.default.createElement("img", { src: `data:image/png;base64,${value}`, alt: "User", style: { height: 40, width: 40, objectFit: "cover", borderRadius: "50%" } }) : "-"
19257
+ render: (value) => value ? /* @__PURE__ */ import_react11.default.createElement("img", { src: `data:image/png;base64,${value}`, alt: "User", style: { height: 40, width: 40, objectFit: "cover", borderRadius: "50%" } }) : "-"
18898
19258
  }
18899
19259
  ),
18900
- /* @__PURE__ */ import_react9.default.createElement(
18901
- import_lib8.Table.Column,
19260
+ /* @__PURE__ */ import_react11.default.createElement(
19261
+ import_lib9.Table.Column,
18902
19262
  {
18903
19263
  dataIndex: "DisplayName",
18904
19264
  title: "Display Name",
@@ -18907,8 +19267,8 @@ var ApplicationUserList = () => {
18907
19267
  defaultVisible: true
18908
19268
  }
18909
19269
  ),
18910
- /* @__PURE__ */ import_react9.default.createElement(
18911
- import_lib8.Table.Column,
19270
+ /* @__PURE__ */ import_react11.default.createElement(
19271
+ import_lib9.Table.Column,
18912
19272
  {
18913
19273
  dataIndex: "UserName",
18914
19274
  title: "User Name",
@@ -18916,47 +19276,47 @@ var ApplicationUserList = () => {
18916
19276
  defaultVisible: true
18917
19277
  }
18918
19278
  ),
18919
- /* @__PURE__ */ import_react9.default.createElement(
18920
- import_lib8.Table.Column,
19279
+ /* @__PURE__ */ import_react11.default.createElement(
19280
+ import_lib9.Table.Column,
18921
19281
  {
18922
19282
  dataIndex: "Email",
18923
19283
  title: "Email",
18924
19284
  sorter: true
18925
19285
  }
18926
19286
  ),
18927
- /* @__PURE__ */ import_react9.default.createElement(
18928
- import_lib8.Table.Column,
19287
+ /* @__PURE__ */ import_react11.default.createElement(
19288
+ import_lib9.Table.Column,
18929
19289
  {
18930
19290
  dataIndex: "IsActive",
18931
19291
  title: "Active",
18932
- render: (value) => /* @__PURE__ */ import_react9.default.createElement(import_lib8.Checkbox, { checked: value, disabled: true }),
19292
+ render: (value) => /* @__PURE__ */ import_react11.default.createElement(import_lib9.Checkbox, { checked: value, disabled: true }),
18933
19293
  sorter: true
18934
19294
  }
18935
19295
  ),
18936
- /* @__PURE__ */ import_react9.default.createElement(
18937
- import_lib8.Table.Column,
19296
+ /* @__PURE__ */ import_react11.default.createElement(
19297
+ import_lib9.Table.Column,
18938
19298
  {
18939
19299
  dataIndex: "AccessFailedCount",
18940
19300
  title: "Access Failed Count"
18941
19301
  }
18942
19302
  ),
18943
- /* @__PURE__ */ import_react9.default.createElement(
18944
- import_lib8.Table.Column,
19303
+ /* @__PURE__ */ import_react11.default.createElement(
19304
+ import_lib9.Table.Column,
18945
19305
  {
18946
19306
  title: "Actions",
18947
19307
  dataIndex: "actions",
18948
- render: (_, record) => /* @__PURE__ */ import_react9.default.createElement(import_lib8.Space, null, /* @__PURE__ */ import_react9.default.createElement(import_lib8.Tooltip, { title: "Reset Password" }, /* @__PURE__ */ import_react9.default.createElement(
18949
- import_lib8.Button,
19308
+ render: (_, record) => /* @__PURE__ */ import_react11.default.createElement(import_lib9.Space, null, /* @__PURE__ */ import_react11.default.createElement(import_lib9.Tooltip, { title: "Reset Password" }, /* @__PURE__ */ import_react11.default.createElement(
19309
+ import_lib9.Button,
18950
19310
  {
18951
19311
  size: "small",
18952
- icon: /* @__PURE__ */ import_react9.default.createElement(import_icons5.KeyOutlined, null),
19312
+ icon: /* @__PURE__ */ import_react11.default.createElement(import_icons5.KeyOutlined, null),
18953
19313
  onClick: () => handleResetPasswordClick(record)
18954
19314
  }
18955
- )), /* @__PURE__ */ import_react9.default.createElement(import_antd5.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react9.default.createElement(import_antd5.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19315
+ )), /* @__PURE__ */ import_react11.default.createElement(import_antd7.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react11.default.createElement(import_antd7.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
18956
19316
  }
18957
19317
  )
18958
- ), /* @__PURE__ */ import_react9.default.createElement(
18959
- import_lib8.Modal,
19318
+ ), /* @__PURE__ */ import_react11.default.createElement(
19319
+ import_lib9.Modal,
18960
19320
  {
18961
19321
  title: `Reset Password for ${selectedUser?.DisplayName || selectedUser?.UserName}`,
18962
19322
  open: isModalOpen,
@@ -18964,27 +19324,27 @@ var ApplicationUserList = () => {
18964
19324
  onOk: () => form.submit(),
18965
19325
  confirmLoading: isLoading
18966
19326
  },
18967
- /* @__PURE__ */ import_react9.default.createElement(import_lib8.Form, { form, onFinish: handleResetPasswordSubmit, layout: "vertical" }, /* @__PURE__ */ import_react9.default.createElement("div", { style: { display: "flex", gap: 8, alignItems: "flex-end" } }, /* @__PURE__ */ import_react9.default.createElement(
18968
- import_lib8.Form.Item,
19327
+ /* @__PURE__ */ import_react11.default.createElement(import_lib9.Form, { form, onFinish: handleResetPasswordSubmit, layout: "vertical" }, /* @__PURE__ */ import_react11.default.createElement("div", { style: { display: "flex", gap: 8, alignItems: "flex-end" } }, /* @__PURE__ */ import_react11.default.createElement(
19328
+ import_lib9.Form.Item,
18969
19329
  {
18970
19330
  name: "password",
18971
19331
  label: "New Password",
18972
19332
  style: { flex: 1, marginBottom: 0 },
18973
19333
  rules: [{ required: true, message: "Please input the new password!" }]
18974
19334
  },
18975
- /* @__PURE__ */ import_react9.default.createElement(import_lib8.Input.Password, { placeholder: "Enter new password" })
18976
- ), /* @__PURE__ */ import_react9.default.createElement(import_lib8.Tooltip, { title: "Generate Complex Password" }, /* @__PURE__ */ import_react9.default.createElement(import_lib8.Button, { icon: /* @__PURE__ */ import_react9.default.createElement(import_icons5.ThunderboltOutlined, null), onClick: generatePassword }))))
19335
+ /* @__PURE__ */ import_react11.default.createElement(import_lib9.Input.Password, { placeholder: "Enter new password" })
19336
+ ), /* @__PURE__ */ import_react11.default.createElement(import_lib9.Tooltip, { title: "Generate Complex Password" }, /* @__PURE__ */ import_react11.default.createElement(import_lib9.Button, { icon: /* @__PURE__ */ import_react11.default.createElement(import_icons5.ThunderboltOutlined, null), onClick: handleGeneratePassword }))))
18977
19337
  ));
18978
19338
  };
18979
19339
 
18980
19340
  // src/pages/application-users/create.tsx
18981
- var import_react10 = __toESM(require("react"));
18982
- var import_antd6 = require("@refinedev/antd");
18983
- var import_lib9 = require("antd/lib");
19341
+ var import_react12 = __toESM(require("react"));
19342
+ var import_antd8 = require("@refinedev/antd");
19343
+ var import_lib10 = require("antd/lib");
18984
19344
  var ApplicationUserCreate = () => {
18985
- const { formProps, saveButtonProps } = (0, import_antd6.useForm)();
18986
- return /* @__PURE__ */ import_react10.default.createElement(import_antd6.Create, { saveButtonProps }, /* @__PURE__ */ import_react10.default.createElement(import_lib9.Form, { ...formProps, layout: "vertical" }, /* @__PURE__ */ import_react10.default.createElement(
18987
- import_lib9.Form.Item,
19345
+ const { formProps, saveButtonProps } = (0, import_antd8.useForm)();
19346
+ return /* @__PURE__ */ import_react12.default.createElement(import_antd8.Create, { saveButtonProps }, /* @__PURE__ */ import_react12.default.createElement(import_lib10.Form, { ...formProps, layout: "vertical" }, /* @__PURE__ */ import_react12.default.createElement(
19347
+ import_lib10.Form.Item,
18988
19348
  {
18989
19349
  label: "User Name",
18990
19350
  name: "UserName",
@@ -18994,16 +19354,16 @@ var ApplicationUserCreate = () => {
18994
19354
  }
18995
19355
  ]
18996
19356
  },
18997
- /* @__PURE__ */ import_react10.default.createElement(import_lib9.Input, null)
18998
- ), /* @__PURE__ */ import_react10.default.createElement(
18999
- import_lib9.Form.Item,
19357
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19358
+ ), /* @__PURE__ */ import_react12.default.createElement(
19359
+ import_lib10.Form.Item,
19000
19360
  {
19001
19361
  label: "Display Name",
19002
19362
  name: "DisplayName"
19003
19363
  },
19004
- /* @__PURE__ */ import_react10.default.createElement(import_lib9.Input, null)
19005
- ), /* @__PURE__ */ import_react10.default.createElement(
19006
- import_lib9.Form.Item,
19364
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19365
+ ), /* @__PURE__ */ import_react12.default.createElement(
19366
+ import_lib10.Form.Item,
19007
19367
  {
19008
19368
  label: "Email",
19009
19369
  name: "Email",
@@ -19013,33 +19373,33 @@ var ApplicationUserCreate = () => {
19013
19373
  }
19014
19374
  ]
19015
19375
  },
19016
- /* @__PURE__ */ import_react10.default.createElement(import_lib9.Input, null)
19017
- ), /* @__PURE__ */ import_react10.default.createElement(
19018
- import_lib9.Form.Item,
19376
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19377
+ ), /* @__PURE__ */ import_react12.default.createElement(
19378
+ import_lib10.Form.Item,
19019
19379
  {
19020
19380
  label: "Is Active",
19021
19381
  name: "IsActive",
19022
19382
  valuePropName: "checked",
19023
19383
  initialValue: true
19024
19384
  },
19025
- /* @__PURE__ */ import_react10.default.createElement(import_lib9.Checkbox, null, "Active")
19026
- ), /* @__PURE__ */ import_react10.default.createElement(
19027
- import_lib9.Form.Item,
19385
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Checkbox, null, "Active")
19386
+ ), /* @__PURE__ */ import_react12.default.createElement(
19387
+ import_lib10.Form.Item,
19028
19388
  {
19029
19389
  label: "Photo",
19030
19390
  name: "Photo"
19031
19391
  },
19032
- /* @__PURE__ */ import_react10.default.createElement(Base64Upload, null)
19392
+ /* @__PURE__ */ import_react12.default.createElement(Base64Upload, null)
19033
19393
  )));
19034
19394
  };
19035
19395
 
19036
19396
  // src/pages/application-users/edit.tsx
19037
- var import_react11 = __toESM(require("react"));
19038
- var import_antd7 = require("@refinedev/antd");
19039
- var import_lib10 = require("antd/lib");
19397
+ var import_react13 = __toESM(require("react"));
19398
+ var import_antd9 = require("@refinedev/antd");
19399
+ var import_lib11 = require("antd/lib");
19040
19400
  var ApplicationUserEdit = () => {
19041
- const { message: message2 } = import_lib10.App.useApp();
19042
- const { formProps, saveButtonProps, id, form } = (0, import_antd7.useForm)({
19401
+ const { message: message2 } = import_lib11.App.useApp();
19402
+ const { formProps, saveButtonProps, id, form } = (0, import_antd9.useForm)({
19043
19403
  meta: {
19044
19404
  expand: ["Roles"]
19045
19405
  },
@@ -19068,7 +19428,7 @@ var ApplicationUserEdit = () => {
19068
19428
  }
19069
19429
  }
19070
19430
  });
19071
- const { selectProps: roleSelectProps } = (0, import_antd7.useSelect)({
19431
+ const { selectProps: roleSelectProps } = (0, import_antd9.useSelect)({
19072
19432
  resource: "PermissionPolicyRole",
19073
19433
  optionLabel: "Name",
19074
19434
  optionValue: "Oid"
@@ -19077,8 +19437,8 @@ var ApplicationUserEdit = () => {
19077
19437
  const { Roles, ...userValues } = values;
19078
19438
  formProps.onFinish?.(userValues);
19079
19439
  };
19080
- return /* @__PURE__ */ import_react11.default.createElement(import_antd7.Edit, { saveButtonProps }, /* @__PURE__ */ import_react11.default.createElement(import_lib10.Form, { ...formProps, layout: "vertical", onFinish: handleOnFinish }, /* @__PURE__ */ import_react11.default.createElement(
19081
- import_lib10.Form.Item,
19440
+ return /* @__PURE__ */ import_react13.default.createElement(import_antd9.Edit, { saveButtonProps }, /* @__PURE__ */ import_react13.default.createElement(import_lib11.Form, { ...formProps, layout: "vertical", onFinish: handleOnFinish }, /* @__PURE__ */ import_react13.default.createElement(
19441
+ import_lib11.Form.Item,
19082
19442
  {
19083
19443
  label: "User Name",
19084
19444
  name: "UserName",
@@ -19088,16 +19448,16 @@ var ApplicationUserEdit = () => {
19088
19448
  }
19089
19449
  ]
19090
19450
  },
19091
- /* @__PURE__ */ import_react11.default.createElement(import_lib10.Input, null)
19092
- ), /* @__PURE__ */ import_react11.default.createElement(
19093
- import_lib10.Form.Item,
19451
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19452
+ ), /* @__PURE__ */ import_react13.default.createElement(
19453
+ import_lib11.Form.Item,
19094
19454
  {
19095
19455
  label: "Display Name",
19096
19456
  name: "DisplayName"
19097
19457
  },
19098
- /* @__PURE__ */ import_react11.default.createElement(import_lib10.Input, null)
19099
- ), /* @__PURE__ */ import_react11.default.createElement(
19100
- import_lib10.Form.Item,
19458
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19459
+ ), /* @__PURE__ */ import_react13.default.createElement(
19460
+ import_lib11.Form.Item,
19101
19461
  {
19102
19462
  label: "Email",
19103
19463
  name: "Email",
@@ -19107,17 +19467,17 @@ var ApplicationUserEdit = () => {
19107
19467
  }
19108
19468
  ]
19109
19469
  },
19110
- /* @__PURE__ */ import_react11.default.createElement(import_lib10.Input, null)
19111
- ), /* @__PURE__ */ import_react11.default.createElement(
19112
- import_lib10.Form.Item,
19470
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19471
+ ), /* @__PURE__ */ import_react13.default.createElement(
19472
+ import_lib11.Form.Item,
19113
19473
  {
19114
19474
  label: "Is Active",
19115
19475
  name: "IsActive",
19116
19476
  valuePropName: "checked"
19117
19477
  },
19118
- /* @__PURE__ */ import_react11.default.createElement(import_lib10.Checkbox, null, "Active")
19119
- ), /* @__PURE__ */ import_react11.default.createElement(
19120
- import_lib10.Form.Item,
19478
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Checkbox, null, "Active")
19479
+ ), /* @__PURE__ */ import_react13.default.createElement(
19480
+ import_lib11.Form.Item,
19121
19481
  {
19122
19482
  label: "Roles",
19123
19483
  name: "Roles",
@@ -19135,51 +19495,51 @@ var ApplicationUserEdit = () => {
19135
19495
  return { value: [] };
19136
19496
  }
19137
19497
  },
19138
- /* @__PURE__ */ import_react11.default.createElement(import_lib10.Select, { ...roleSelectProps, mode: "multiple" })
19139
- ), /* @__PURE__ */ import_react11.default.createElement(
19140
- import_lib10.Form.Item,
19498
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Select, { ...roleSelectProps, mode: "multiple" })
19499
+ ), /* @__PURE__ */ import_react13.default.createElement(
19500
+ import_lib11.Form.Item,
19141
19501
  {
19142
19502
  label: "Photo",
19143
19503
  name: "Photo"
19144
19504
  },
19145
- /* @__PURE__ */ import_react11.default.createElement(Base64Upload, null)
19505
+ /* @__PURE__ */ import_react13.default.createElement(Base64Upload, null)
19146
19506
  )));
19147
19507
  };
19148
19508
 
19149
19509
  // src/pages/roles/list.tsx
19150
- var import_react12 = __toESM(require("react"));
19151
- var import_antd8 = require("@refinedev/antd");
19152
- var import_lib11 = require("antd/lib");
19510
+ var import_react14 = __toESM(require("react"));
19511
+ var import_antd10 = require("@refinedev/antd");
19512
+ var import_lib12 = require("antd/lib");
19153
19513
  var RoleList = () => {
19154
- const { tableProps } = (0, import_antd8.useTable)({
19514
+ const { tableProps } = (0, import_antd10.useTable)({
19155
19515
  syncWithLocation: true
19156
19516
  });
19157
- return /* @__PURE__ */ import_react12.default.createElement(import_antd8.List, null, /* @__PURE__ */ import_react12.default.createElement(import_lib11.Table, { ...tableProps, rowKey: "Oid" }, /* @__PURE__ */ import_react12.default.createElement(import_lib11.Table.Column, { dataIndex: "Name", title: "Name" }), /* @__PURE__ */ import_react12.default.createElement(
19158
- import_lib11.Table.Column,
19517
+ return /* @__PURE__ */ import_react14.default.createElement(import_antd10.List, null, /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table, { ...tableProps, rowKey: "Oid" }, /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table.Column, { dataIndex: "Name", title: "Name" }), /* @__PURE__ */ import_react14.default.createElement(
19518
+ import_lib12.Table.Column,
19159
19519
  {
19160
19520
  dataIndex: "IsAdministrative",
19161
19521
  title: "Is Administrative",
19162
- render: (value) => /* @__PURE__ */ import_react12.default.createElement(import_lib11.Checkbox, { checked: value, disabled: true })
19522
+ render: (value) => /* @__PURE__ */ import_react14.default.createElement(import_lib12.Checkbox, { checked: value, disabled: true })
19163
19523
  }
19164
- ), /* @__PURE__ */ import_react12.default.createElement(import_lib11.Table.Column, { dataIndex: "PermissionPolicy", title: "Permission Policy" }), /* @__PURE__ */ import_react12.default.createElement(
19165
- import_lib11.Table.Column,
19524
+ ), /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table.Column, { dataIndex: "PermissionPolicy", title: "Permission Policy" }), /* @__PURE__ */ import_react14.default.createElement(
19525
+ import_lib12.Table.Column,
19166
19526
  {
19167
19527
  title: "Actions",
19168
19528
  dataIndex: "actions",
19169
- render: (_, record) => /* @__PURE__ */ import_react12.default.createElement(import_lib11.Space, null, /* @__PURE__ */ import_react12.default.createElement(import_antd8.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react12.default.createElement(import_antd8.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19529
+ render: (_, record) => /* @__PURE__ */ import_react14.default.createElement(import_lib12.Space, null, /* @__PURE__ */ import_react14.default.createElement(import_antd10.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react14.default.createElement(import_antd10.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19170
19530
  }
19171
19531
  )));
19172
19532
  };
19173
19533
 
19174
19534
  // src/pages/roles/create.tsx
19175
- var import_react14 = __toESM(require("react"));
19176
- var import_antd10 = require("@refinedev/antd");
19177
- var import_lib13 = require("antd/lib");
19535
+ var import_react16 = __toESM(require("react"));
19536
+ var import_antd12 = require("@refinedev/antd");
19537
+ var import_lib14 = require("antd/lib");
19178
19538
 
19179
19539
  // src/pages/roles/TypePermissionList.tsx
19180
- var import_react13 = __toESM(require("react"));
19181
- var import_lib12 = require("antd/lib");
19182
- var import_antd9 = require("@refinedev/antd");
19540
+ var import_react15 = __toESM(require("react"));
19541
+ var import_lib13 = require("antd/lib");
19542
+ var import_antd11 = require("@refinedev/antd");
19183
19543
 
19184
19544
  // src/hooks/useModelTypes.ts
19185
19545
  var import_react_query = require("@tanstack/react-query");
@@ -19206,8 +19566,8 @@ var useModelTypes = () => {
19206
19566
  };
19207
19567
 
19208
19568
  // src/pages/roles/TypePermissionList.tsx
19209
- var PermissionSelect = (props) => /* @__PURE__ */ import_react13.default.createElement(
19210
- import_lib12.Select,
19569
+ var PermissionSelect = (props) => /* @__PURE__ */ import_react15.default.createElement(
19570
+ import_lib13.Select,
19211
19571
  {
19212
19572
  ...props,
19213
19573
  allowClear: true,
@@ -19218,26 +19578,26 @@ var PermissionSelect = (props) => /* @__PURE__ */ import_react13.default.createE
19218
19578
  }
19219
19579
  );
19220
19580
  var TypePermissionFormFields = ({ typeOptions }) => {
19221
- return /* @__PURE__ */ import_react13.default.createElement(import_react13.default.Fragment, null, /* @__PURE__ */ import_react13.default.createElement(
19222
- import_lib12.Form.Item,
19581
+ return /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, /* @__PURE__ */ import_react15.default.createElement(
19582
+ import_lib13.Form.Item,
19223
19583
  {
19224
19584
  label: "Target Type",
19225
19585
  name: "TargetTypeFullName",
19226
19586
  rules: [{ required: true }]
19227
19587
  },
19228
- /* @__PURE__ */ import_react13.default.createElement(
19229
- import_lib12.Select,
19588
+ /* @__PURE__ */ import_react15.default.createElement(
19589
+ import_lib13.Select,
19230
19590
  {
19231
19591
  showSearch: true,
19232
19592
  options: typeOptions,
19233
19593
  filterOption: (input, option) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase())
19234
19594
  }
19235
19595
  )
19236
- ), /* @__PURE__ */ import_react13.default.createElement(import_lib12.Form.Item, { label: "Read State", name: "ReadState" }, /* @__PURE__ */ import_react13.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react13.default.createElement(import_lib12.Form.Item, { label: "Write State", name: "WriteState" }, /* @__PURE__ */ import_react13.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react13.default.createElement(import_lib12.Form.Item, { label: "Create State", name: "CreateState" }, /* @__PURE__ */ import_react13.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react13.default.createElement(import_lib12.Form.Item, { label: "Delete State", name: "DeleteState" }, /* @__PURE__ */ import_react13.default.createElement(PermissionSelect, null)));
19596
+ ), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Read State", name: "ReadState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Write State", name: "WriteState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Create State", name: "CreateState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Delete State", name: "DeleteState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)));
19237
19597
  };
19238
19598
  var TypePermissionList = ({ masterId }) => {
19239
19599
  const { data: modelTypes } = useModelTypes();
19240
- const { tableProps, queryResult } = (0, import_antd9.useTable)({
19600
+ const { tableProps, queryResult } = (0, import_antd11.useTable)({
19241
19601
  resource: "PermissionPolicyTypePermissionObject",
19242
19602
  filters: {
19243
19603
  permanent: [
@@ -19253,17 +19613,17 @@ var TypePermissionList = ({ masterId }) => {
19253
19613
  mode: "off"
19254
19614
  }
19255
19615
  });
19256
- const typeOptions = import_react13.default.useMemo(() => modelTypes?.filter((t) => t.IsCreatable && !t.IsDeprecated).map((t) => ({ label: t.Caption, value: t.Name })) || [], [modelTypes]);
19257
- const FormFieldsWrapper = import_react13.default.useMemo(() => {
19258
- return ({ mode }) => /* @__PURE__ */ import_react13.default.createElement(TypePermissionFormFields, { typeOptions });
19616
+ const typeOptions = import_react15.default.useMemo(() => modelTypes?.filter((t) => t.IsCreatable && !t.IsDeprecated).map((t) => ({ label: t.Caption, value: t.Name })) || [], [modelTypes]);
19617
+ const FormFieldsWrapper = import_react15.default.useMemo(() => {
19618
+ return ({ mode }) => /* @__PURE__ */ import_react15.default.createElement(TypePermissionFormFields, { typeOptions });
19259
19619
  }, [typeOptions]);
19260
- const dataSource = import_react13.default.useMemo(() => {
19620
+ const dataSource = import_react15.default.useMemo(() => {
19261
19621
  return (tableProps.dataSource || []).map((p) => ({
19262
19622
  ...p,
19263
19623
  TargetType: p.TargetType || p.TargetTypeFullName || ""
19264
19624
  }));
19265
19625
  }, [tableProps.dataSource]);
19266
- return /* @__PURE__ */ import_react13.default.createElement(
19626
+ return /* @__PURE__ */ import_react15.default.createElement(
19267
19627
  RelatedList,
19268
19628
  {
19269
19629
  resource: "PermissionPolicyTypePermissionObject",
@@ -19274,30 +19634,30 @@ var TypePermissionList = ({ masterId }) => {
19274
19634
  modalTitle: "Type Permission",
19275
19635
  FormFields: FormFieldsWrapper
19276
19636
  },
19277
- /* @__PURE__ */ import_react13.default.createElement(
19278
- import_lib12.Table.Column,
19637
+ /* @__PURE__ */ import_react15.default.createElement(
19638
+ import_lib13.Table.Column,
19279
19639
  {
19280
19640
  dataIndex: "TargetType",
19281
19641
  title: "Target Type",
19282
19642
  render: (value) => typeOptions.find((t) => t.value === value)?.label || value
19283
19643
  }
19284
19644
  ),
19285
- /* @__PURE__ */ import_react13.default.createElement(import_lib12.Table.Column, { dataIndex: "ReadState", title: "Read" }),
19286
- /* @__PURE__ */ import_react13.default.createElement(import_lib12.Table.Column, { dataIndex: "WriteState", title: "Write" }),
19287
- /* @__PURE__ */ import_react13.default.createElement(import_lib12.Table.Column, { dataIndex: "CreateState", title: "Create" }),
19288
- /* @__PURE__ */ import_react13.default.createElement(import_lib12.Table.Column, { dataIndex: "DeleteState", title: "Delete" })
19645
+ /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "ReadState", title: "Read" }),
19646
+ /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "WriteState", title: "Write" }),
19647
+ /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "CreateState", title: "Create" }),
19648
+ /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "DeleteState", title: "Delete" })
19289
19649
  );
19290
19650
  };
19291
19651
 
19292
19652
  // src/pages/roles/create.tsx
19293
19653
  var RoleCreate = () => {
19294
- const [form] = import_lib13.Form.useForm();
19295
- const { formProps, saveButtonProps } = (0, import_antd10.useForm)();
19654
+ const [form] = import_lib14.Form.useForm();
19655
+ const { formProps, saveButtonProps } = (0, import_antd12.useForm)();
19296
19656
  const handleSave = () => {
19297
19657
  form.submit();
19298
19658
  };
19299
- return /* @__PURE__ */ import_react14.default.createElement(import_antd10.Create, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react14.default.createElement(
19300
- import_lib13.Form,
19659
+ return /* @__PURE__ */ import_react16.default.createElement(import_antd12.Create, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react16.default.createElement(
19660
+ import_lib14.Form,
19301
19661
  {
19302
19662
  ...formProps,
19303
19663
  form,
@@ -19306,34 +19666,34 @@ var RoleCreate = () => {
19306
19666
  return formProps.onFinish && formProps.onFinish(values);
19307
19667
  }
19308
19668
  },
19309
- /* @__PURE__ */ import_react14.default.createElement(
19310
- import_lib13.Form.Item,
19669
+ /* @__PURE__ */ import_react16.default.createElement(
19670
+ import_lib14.Form.Item,
19311
19671
  {
19312
19672
  label: "Name",
19313
19673
  name: "Name",
19314
19674
  rules: [{ required: true }]
19315
19675
  },
19316
- /* @__PURE__ */ import_react14.default.createElement(import_lib13.Input, null)
19676
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Input, null)
19317
19677
  ),
19318
- /* @__PURE__ */ import_react14.default.createElement(
19319
- import_lib13.Form.Item,
19678
+ /* @__PURE__ */ import_react16.default.createElement(
19679
+ import_lib14.Form.Item,
19320
19680
  {
19321
19681
  label: "Is Administrative",
19322
19682
  name: "IsAdministrative",
19323
19683
  valuePropName: "checked"
19324
19684
  },
19325
- /* @__PURE__ */ import_react14.default.createElement(import_lib13.Checkbox, null, "Is Administrative")
19685
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Checkbox, null, "Is Administrative")
19326
19686
  ),
19327
- /* @__PURE__ */ import_react14.default.createElement(
19328
- import_lib13.Form.Item,
19687
+ /* @__PURE__ */ import_react16.default.createElement(
19688
+ import_lib14.Form.Item,
19329
19689
  {
19330
19690
  label: "Permission Policy",
19331
19691
  name: "PermissionPolicy",
19332
19692
  initialValue: "DenyAllByDefault" /* DenyAllByDefault */,
19333
19693
  rules: [{ required: true }]
19334
19694
  },
19335
- /* @__PURE__ */ import_react14.default.createElement(
19336
- import_lib13.Select,
19695
+ /* @__PURE__ */ import_react16.default.createElement(
19696
+ import_lib14.Select,
19337
19697
  {
19338
19698
  options: [
19339
19699
  { label: "Deny All By Default", value: "DenyAllByDefault" /* DenyAllByDefault */ },
@@ -19343,21 +19703,21 @@ var RoleCreate = () => {
19343
19703
  }
19344
19704
  )
19345
19705
  ),
19346
- /* @__PURE__ */ import_react14.default.createElement(TypePermissionList, null)
19706
+ /* @__PURE__ */ import_react16.default.createElement(TypePermissionList, null)
19347
19707
  ));
19348
19708
  };
19349
19709
 
19350
19710
  // src/pages/roles/edit.tsx
19351
- var import_react15 = __toESM(require("react"));
19352
- var import_antd11 = require("@refinedev/antd");
19353
- var import_lib14 = require("antd/lib");
19711
+ var import_react17 = __toESM(require("react"));
19712
+ var import_antd13 = require("@refinedev/antd");
19713
+ var import_lib15 = require("antd/lib");
19354
19714
  var RoleEdit = () => {
19355
- const { formProps, saveButtonProps, id } = (0, import_antd11.useForm)();
19715
+ const { formProps, saveButtonProps, id } = (0, import_antd13.useForm)();
19356
19716
  const handleSave = () => {
19357
19717
  formProps.form?.submit();
19358
19718
  };
19359
- return /* @__PURE__ */ import_react15.default.createElement(import_antd11.Edit, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react15.default.createElement(
19360
- import_lib14.Form,
19719
+ return /* @__PURE__ */ import_react17.default.createElement(import_antd13.Edit, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react17.default.createElement(
19720
+ import_lib15.Form,
19361
19721
  {
19362
19722
  ...formProps,
19363
19723
  layout: "vertical",
@@ -19366,33 +19726,33 @@ var RoleEdit = () => {
19366
19726
  return formProps.onFinish && formProps.onFinish(rest);
19367
19727
  }
19368
19728
  },
19369
- /* @__PURE__ */ import_react15.default.createElement(
19370
- import_lib14.Form.Item,
19729
+ /* @__PURE__ */ import_react17.default.createElement(
19730
+ import_lib15.Form.Item,
19371
19731
  {
19372
19732
  label: "Name",
19373
19733
  name: "Name",
19374
19734
  rules: [{ required: true }]
19375
19735
  },
19376
- /* @__PURE__ */ import_react15.default.createElement(import_lib14.Input, null)
19736
+ /* @__PURE__ */ import_react17.default.createElement(import_lib15.Input, null)
19377
19737
  ),
19378
- /* @__PURE__ */ import_react15.default.createElement(
19379
- import_lib14.Form.Item,
19738
+ /* @__PURE__ */ import_react17.default.createElement(
19739
+ import_lib15.Form.Item,
19380
19740
  {
19381
19741
  label: "Is Administrative",
19382
19742
  name: "IsAdministrative",
19383
19743
  valuePropName: "checked"
19384
19744
  },
19385
- /* @__PURE__ */ import_react15.default.createElement(import_lib14.Checkbox, null, "Is Administrative")
19745
+ /* @__PURE__ */ import_react17.default.createElement(import_lib15.Checkbox, null, "Is Administrative")
19386
19746
  ),
19387
- /* @__PURE__ */ import_react15.default.createElement(
19388
- import_lib14.Form.Item,
19747
+ /* @__PURE__ */ import_react17.default.createElement(
19748
+ import_lib15.Form.Item,
19389
19749
  {
19390
19750
  label: "Permission Policy",
19391
19751
  name: "PermissionPolicy",
19392
19752
  rules: [{ required: true }]
19393
19753
  },
19394
- /* @__PURE__ */ import_react15.default.createElement(
19395
- import_lib14.Select,
19754
+ /* @__PURE__ */ import_react17.default.createElement(
19755
+ import_lib15.Select,
19396
19756
  {
19397
19757
  options: [
19398
19758
  { label: "Deny All By Default", value: "DenyAllByDefault" /* DenyAllByDefault */ },
@@ -19402,7 +19762,7 @@ var RoleEdit = () => {
19402
19762
  }
19403
19763
  )
19404
19764
  ),
19405
- /* @__PURE__ */ import_react15.default.createElement(
19765
+ /* @__PURE__ */ import_react17.default.createElement(
19406
19766
  TypePermissionList,
19407
19767
  {
19408
19768
  masterId: id?.toString()
@@ -19415,11 +19775,13 @@ var RoleEdit = () => {
19415
19775
  ApplicationUserCreate,
19416
19776
  ApplicationUserEdit,
19417
19777
  ApplicationUserList,
19778
+ AuthCallback,
19418
19779
  Base64Upload,
19419
19780
  ColorModeContext,
19420
19781
  ColorModeContextProvider,
19421
19782
  Header,
19422
19783
  HttpError,
19784
+ KeycloakLoginPage,
19423
19785
  LoginPage,
19424
19786
  RelatedList,
19425
19787
  RoleCreate,
@@ -19433,9 +19795,12 @@ var RoleEdit = () => {
19433
19795
  authProvider,
19434
19796
  authService,
19435
19797
  dataProvider,
19798
+ generatePassword,
19436
19799
  getBaseUrl,
19437
19800
  httpClient,
19801
+ keycloakService,
19438
19802
  parseJwt,
19439
19803
  useColorMode,
19440
- useModelTypes
19804
+ useModelTypes,
19805
+ validatePasswordStrength
19441
19806
  });