@fctc/interface-logic 1.4.3 → 1.4.5

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.
@@ -27,9 +27,66 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
 
30
- // src/hooks.ts
31
- var hooks_exports = {};
32
- __export(hooks_exports, {
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ ActionService: () => action_service_default,
34
+ AuthService: () => auth_service_default,
35
+ CompanyService: () => company_service_default,
36
+ ComponentType: () => ComponentType,
37
+ EnvStore: () => EnvStore,
38
+ ExcelService: () => excel_service_default,
39
+ FieldTypeConstants: () => FieldTypeConstants,
40
+ FormService: () => form_service_default,
41
+ KanbanService: () => kanban_service_default,
42
+ KeyConstants: () => KeyConstants,
43
+ MethodConstants: () => MethodConstants,
44
+ MethodType: () => MethodType,
45
+ ModelConstants: () => ModelConstants,
46
+ ModelService: () => model_service_default,
47
+ SearchType: () => SearchType,
48
+ UriConstants: () => UriConstants,
49
+ UserService: () => user_service_default,
50
+ VersionGate: () => VersionGate,
51
+ ViewService: () => view_service_default,
52
+ WIDGETAVATAR: () => WIDGETAVATAR,
53
+ WIDGETCOLOR: () => WIDGETCOLOR,
54
+ WIDGETCURRENCY: () => WIDGETCURRENCY,
55
+ WIDGETNOSTRING: () => WIDGETNOSTRING,
56
+ WIDGETSTATUS: () => WIDGETSTATUS,
57
+ WesapError: () => WesapError,
58
+ axiosClient: () => axiosClient,
59
+ checkIsImageLink: () => checkIsImageLink,
60
+ convertFloatToTime: () => convertFloatToTime,
61
+ convertTimeToFloat: () => convertTimeToFloat,
62
+ copyTextToClipboard: () => copyTextToClipboard,
63
+ domainHelper: () => domainHelper,
64
+ evalJSONContext: () => evalJSONContext,
65
+ evalJSONDomain: () => evalJSONDomain,
66
+ filterFieldDirty: () => filterFieldDirty,
67
+ formatCurrency: () => formatCurrency,
68
+ formatDate: () => formatDate,
69
+ formatFileSize: () => formatFileSize,
70
+ formatSortingString: () => formatSortingString,
71
+ formatUrlPath: () => formatUrlPath,
72
+ getEnv: () => getEnv,
73
+ getFieldsOnChange: () => getFieldsOnChange,
74
+ getOffSet: () => getOffSet,
75
+ getSubdomain: () => getSubdomain,
76
+ handleError: () => handleError,
77
+ isBase64File: () => isBase64File,
78
+ isBase64Image: () => isBase64Image,
79
+ isObjectEmpty: () => isObjectEmpty,
80
+ mergeObjects: () => mergeObjects,
81
+ removeUndefinedFields: () => removeUndefinedFields,
82
+ resequence: () => resequence,
83
+ selectEnv: () => selectEnv,
84
+ setEnvFile: () => setEnvFile,
85
+ stringToColor: () => stringToColor,
86
+ toQueryString: () => toQueryString,
87
+ updateTokenParamInOriginalRequest: () => updateTokenParamInOriginalRequest,
88
+ useAppDispatch: () => useAppDispatch,
89
+ useAppSelector: () => useAppSelector,
33
90
  useButton: () => use_button_default,
34
91
  useChangeStatus: () => use_change_status_default,
35
92
  useDelete: () => use_delete_default,
@@ -37,6 +94,7 @@ __export(hooks_exports, {
37
94
  useDuplicateRecord: () => use_duplicate_record_default,
38
95
  useExecuteImport: () => uss_execute_import_default,
39
96
  useExportExcel: () => use_export_excel_default,
97
+ useField: () => useField,
40
98
  useForgotPassword: () => use_forgot_password_default,
41
99
  useForgotPasswordSSO: () => use_forgotpassword_sso_default,
42
100
  useGet2FAMethods: () => uset_get_2FA_method_default,
@@ -92,17 +150,48 @@ __export(hooks_exports, {
92
150
  useSettingsWebRead2fa: () => use_settings_web_read_2fa_default,
93
151
  useSignInSSO: () => use_signin_sso_default,
94
152
  useSwitchLocale: () => use_switch_locale_default,
153
+ useTabModel: () => useTabModel,
95
154
  useUpdatePassword: () => use_update_password_default,
96
155
  useUploadFile: () => use_upload_file_default,
97
156
  useUploadIdFile: () => use_upload_id_file_default,
98
157
  useUploadImage: () => use_upload_image_default,
99
158
  useVerify2FA: () => use_verify_2FA_default,
100
- useVerifyTotp: () => use_verify_totp_default
159
+ useVerifyTotp: () => use_verify_totp_default,
160
+ validateAndParseDate: () => validateAndParseDate
101
161
  });
102
- module.exports = __toCommonJS(hooks_exports);
162
+ module.exports = __toCommonJS(index_exports);
103
163
 
104
- // src/hooks/auth/use-forgot-password.ts
105
- var import_react_query = require("@tanstack/react-query");
164
+ // src/configs/axios-client.ts
165
+ var import_axios = __toESM(require("axios"));
166
+
167
+ // src/constants/api/key-constant.ts
168
+ var KeyConstants = /* @__PURE__ */ ((KeyConstants2) => {
169
+ KeyConstants2["PROFILE"] = "userinfo";
170
+ KeyConstants2["CURRENT_COMPANY"] = "current_company";
171
+ KeyConstants2["LIST_COMPANY"] = "list_company";
172
+ KeyConstants2["COMPANY_INFO"] = "company_info";
173
+ KeyConstants2["MENU"] = "menus";
174
+ KeyConstants2["GET_VIEW_BY_ACTION"] = "get_view_by_action";
175
+ KeyConstants2["ACTION_DETAIL"] = "action_detail";
176
+ KeyConstants2["GET_DATA_SELECTION"] = "get_data_select";
177
+ KeyConstants2["WEB_SAVE"] = "web_save";
178
+ KeyConstants2["WEB_READ"] = "web_read";
179
+ KeyConstants2["GET_PROVIDER"] = "get_provider";
180
+ return KeyConstants2;
181
+ })(KeyConstants || {});
182
+
183
+ // src/constants/api/method-constant.ts
184
+ var MethodConstants = /* @__PURE__ */ ((MethodConstants2) => {
185
+ MethodConstants2["WEB_SEARCH_READ"] = "web_search_read";
186
+ MethodConstants2["WEB_READ_GROUP"] = "web_read_group";
187
+ MethodConstants2["WEB_READ"] = "web_read";
188
+ MethodConstants2["WEB_SAVE"] = "web_save";
189
+ MethodConstants2["UNLINK"] = "unlink";
190
+ MethodConstants2["ONCHANGE"] = "onchange";
191
+ MethodConstants2["GET_ONCHANGE_FIELDS"] = "get_fields_onchange";
192
+ MethodConstants2["GET_FIELD_VIEW"] = "get_fields_view_v2";
193
+ return MethodConstants2;
194
+ })(MethodConstants || {});
106
195
 
107
196
  // src/constants/api/uri-constant.ts
108
197
  var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
@@ -134,11 +223,380 @@ var UriConstants = /* @__PURE__ */ ((UriConstants2) => {
134
223
  return UriConstants2;
135
224
  })(UriConstants || {});
136
225
 
137
- // src/configs/axios-client.ts
138
- var import_axios = __toESM(require("axios"));
226
+ // src/utils/error-handler.ts
227
+ var WesapError = class extends Error {
228
+ code;
229
+ constructor(message, code) {
230
+ super(message);
231
+ this.code = code;
232
+ }
233
+ };
234
+ function handleError(error, env2) {
235
+ if (error instanceof WesapError) {
236
+ env2.services.notification.error(error.message);
237
+ } else {
238
+ env2.services.notification.error("An unexpected error occurred");
239
+ }
240
+ }
139
241
 
140
242
  // src/utils/format.ts
141
243
  var import_moment = __toESM(require("moment"));
244
+ var formatCurrency = (amount, currency = "USD") => {
245
+ const formatter = new Intl.NumberFormat("vi-VN", {
246
+ style: "currency",
247
+ currency,
248
+ minimumFractionDigits: 0
249
+ });
250
+ return formatter.format(amount).replaceAll(".", ",");
251
+ };
252
+ var formatDate = (date, locale = "en-US") => {
253
+ return new Intl.DateTimeFormat(locale).format(new Date(date));
254
+ };
255
+ var validateAndParseDate = (input, isDateTime = false) => {
256
+ if (!input || typeof input !== "string") return null;
257
+ const cleanInput = input.replace(/[^0-9-\/:\s]/g, "");
258
+ const dateFormat = "YYYY-MM-DD";
259
+ const dateTimeFormat = "YYYY-MM-DD HH:mm:ss";
260
+ const currentDay = (0, import_moment.default)().format("DD");
261
+ const currentMonth = (0, import_moment.default)().format("MM");
262
+ const currentYear = (0, import_moment.default)().format("YYYY");
263
+ const defaultTime = "00:00:00";
264
+ const maxYear = parseInt(currentYear) + 10;
265
+ const isValidDate = (day, month, year) => {
266
+ const date = (0, import_moment.default)(`${day}-${month}-${year}`, "DD-MM-YYYY", true);
267
+ return date.isValid();
268
+ };
269
+ const isValidTime = (hour, minute = "00", second = "00") => {
270
+ const h = parseInt(hour, 10);
271
+ const m = parseInt(minute, 10);
272
+ const s = parseInt(second, 10);
273
+ return h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59;
274
+ };
275
+ const formatOutput = (day, month, year, time = defaultTime) => {
276
+ let result = (0, import_moment.default)(
277
+ `${day}-${month}-${year} ${time}`,
278
+ "DD-MM-YYYY HH:mm:ss"
279
+ );
280
+ if (!result.isValid()) return null;
281
+ if (isDateTime) {
282
+ result = result.subtract(7, "hours");
283
+ return result.format(dateTimeFormat);
284
+ }
285
+ return result.format(dateFormat);
286
+ };
287
+ if (isDateTime && input.match(
288
+ /^\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}\s+\d{1,2}(:\d{1,2}(:\d{1,2})?)?$/
289
+ )) {
290
+ const [datePart, timePart] = input.split(/\s+/);
291
+ const dateParts = datePart.split(/[\/-]/);
292
+ const timeParts = timePart.split(":");
293
+ const day = dateParts[0].padStart(2, "0");
294
+ const month = dateParts[1].padStart(2, "0");
295
+ const year = dateParts[2].length <= 2 ? `20${dateParts[2].padStart(2, "0")}` : dateParts[2].padStart(4, "0");
296
+ const hour = timeParts[0].padStart(2, "0");
297
+ const minute = timeParts[1] ? timeParts[1].padStart(2, "0") : "00";
298
+ const second = timeParts[2] ? timeParts[2].padStart(2, "0") : "00";
299
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
300
+ let result = (0, import_moment.default)(
301
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
302
+ "DD-MM-YYYY HH:mm:ss"
303
+ );
304
+ if (!result.isValid()) return null;
305
+ result = result.subtract(7, "hours");
306
+ return result.format(dateTimeFormat);
307
+ }
308
+ return null;
309
+ }
310
+ if (cleanInput.match(/^\d{4}-\d{2}-\d{2}$/)) {
311
+ const [year, month, day] = cleanInput.split("-");
312
+ if (isValidDate(day, month, year)) {
313
+ return formatOutput(day, month, year);
314
+ }
315
+ return null;
316
+ }
317
+ if (cleanInput.match(/^\d{1,2}\/\d{1,2}\/\d{2,4}$/)) {
318
+ const [day, month, year] = cleanInput.split("/");
319
+ const paddedDay = day.padStart(2, "0");
320
+ const paddedMonth = month.padStart(2, "0");
321
+ const fullYear = year.length <= 2 ? `20${year.padStart(2, "0")}` : year.padStart(4, "0");
322
+ if (isValidDate(paddedDay, paddedMonth, fullYear)) {
323
+ return formatOutput(paddedDay, paddedMonth, fullYear);
324
+ }
325
+ return null;
326
+ }
327
+ if (cleanInput.match(/^\d{1,2}-\d{1,2}-\d{2,4}$/)) {
328
+ const [day, month, year] = cleanInput.split("-");
329
+ const paddedDay = day.padStart(2, "0");
330
+ const paddedMonth = month.padStart(2, "0");
331
+ const fullYear = year.length <= 2 ? `20${year.padStart(2, "0")}` : year.padStart(4, "0");
332
+ if (isValidDate(paddedDay, paddedMonth, fullYear)) {
333
+ return formatOutput(paddedDay, paddedMonth, fullYear);
334
+ }
335
+ return null;
336
+ }
337
+ if (cleanInput.match(/^\d{1,2}[\/-]\d{1,2}$/)) {
338
+ const [day, month] = cleanInput.split(/[\/-]/);
339
+ const paddedDay = day.padStart(2, "0");
340
+ const paddedMonth = month.padStart(2, "0");
341
+ if (isValidDate(paddedDay, paddedMonth, currentYear)) {
342
+ return formatOutput(paddedDay, paddedMonth, currentYear);
343
+ }
344
+ return null;
345
+ }
346
+ if (cleanInput.match(/^\d{4}$/)) {
347
+ const num = parseInt(cleanInput, 10);
348
+ if (num >= 2e3 && num <= maxYear) {
349
+ if (isValidDate(currentDay, currentMonth, num.toString())) {
350
+ return formatOutput(currentDay, currentMonth, num.toString());
351
+ }
352
+ return null;
353
+ }
354
+ const day = cleanInput.slice(0, 2);
355
+ const month = cleanInput.slice(2, 4);
356
+ if (isValidDate(day, month, currentYear)) {
357
+ return formatOutput(day, month, currentYear);
358
+ }
359
+ return null;
360
+ }
361
+ if (cleanInput.startsWith("-") && /^\-\d+$/.test(cleanInput)) {
362
+ const daysToSubtract = Math.abs(parseInt(cleanInput, 10));
363
+ let result = (0, import_moment.default)().subtract(daysToSubtract, "days");
364
+ if (isDateTime) {
365
+ result = result.subtract(7, "hours");
366
+ }
367
+ if (result.isValid()) {
368
+ return isDateTime ? result.format(dateTimeFormat) : result.format(dateFormat);
369
+ }
370
+ return null;
371
+ }
372
+ if (input.match(/^\d{1,2}[^0-9-\/]+\d{1,2}[^0-9-\/]+\d{2,4}.*$/)) {
373
+ const parts = input.split(/[^0-9-\/]+/).filter(Boolean);
374
+ const day = parts[0].padStart(2, "0");
375
+ const month = parts[1].padStart(2, "0");
376
+ let year = parts[2];
377
+ year = year.length === 2 ? `20${year}` : year.padStart(4, "0");
378
+ if (isValidDate(day, month, year)) {
379
+ return formatOutput(day, month, year);
380
+ }
381
+ return null;
382
+ }
383
+ if (isDateTime) {
384
+ if (cleanInput.length === 9) {
385
+ const day = cleanInput.slice(0, 2);
386
+ const month = cleanInput.slice(2, 4);
387
+ const year = cleanInput.slice(4, 8);
388
+ const hour = cleanInput.slice(8, 9).padStart(2, "0");
389
+ if (isValidDate(day, month, year) && isValidTime(hour)) {
390
+ let result = (0, import_moment.default)(
391
+ `${day}-${month}-${year} ${hour}:00:00`,
392
+ "DD-MM-YYYY HH:mm:ss"
393
+ );
394
+ if (!result.isValid()) return null;
395
+ result = result.subtract(7, "hours");
396
+ return result.format(dateTimeFormat);
397
+ }
398
+ return null;
399
+ }
400
+ if (cleanInput.length === 10) {
401
+ const day = cleanInput.slice(0, 2);
402
+ const month = cleanInput.slice(2, 4);
403
+ const year = cleanInput.slice(4, 8);
404
+ const hour = cleanInput.slice(8, 10);
405
+ if (isValidDate(day, month, year) && isValidTime(hour)) {
406
+ let result = (0, import_moment.default)(
407
+ `${day}-${month}-${year} ${hour}:00:00`,
408
+ "DD-MM-YYYY HH:mm:ss"
409
+ );
410
+ if (!result.isValid()) return null;
411
+ result = result.subtract(7, "hours");
412
+ return result.format(dateTimeFormat);
413
+ }
414
+ return null;
415
+ }
416
+ if (cleanInput.length === 11) {
417
+ const day = cleanInput.slice(0, 2);
418
+ const month = cleanInput.slice(2, 4);
419
+ const year = cleanInput.slice(4, 8);
420
+ const hour = cleanInput.slice(8, 10);
421
+ const minute = cleanInput.slice(10, 11).padStart(2, "0");
422
+ if (isValidDate(day, month, year) && isValidTime(hour, minute)) {
423
+ let result = (0, import_moment.default)(
424
+ `${day}-${month}-${year} ${hour}:${minute}:00`,
425
+ "DD-MM-YYYY HH:mm:ss"
426
+ );
427
+ if (!result.isValid()) return null;
428
+ result = result.subtract(7, "hours");
429
+ return result.format(dateTimeFormat);
430
+ }
431
+ return null;
432
+ }
433
+ if (cleanInput.length === 12) {
434
+ const day = cleanInput.slice(0, 2);
435
+ const month = cleanInput.slice(2, 4);
436
+ const year = cleanInput.slice(4, 8);
437
+ const hour = cleanInput.slice(8, 10);
438
+ const minute = cleanInput.slice(10, 12);
439
+ if (isValidDate(day, month, year) && isValidTime(hour, minute)) {
440
+ let result = (0, import_moment.default)(
441
+ `${day}-${month}-${year} ${hour}:${minute}:00`,
442
+ "DD-MM-YYYY HH:mm:ss"
443
+ );
444
+ if (!result.isValid()) return null;
445
+ result = result.subtract(7, "hours");
446
+ return result.format(dateTimeFormat);
447
+ }
448
+ return null;
449
+ }
450
+ if (cleanInput.length === 13) {
451
+ const day = cleanInput.slice(0, 2);
452
+ const month = cleanInput.slice(2, 4);
453
+ const year = cleanInput.slice(4, 8);
454
+ const hour = cleanInput.slice(8, 10);
455
+ const minute = cleanInput.slice(10, 12);
456
+ const second = cleanInput.slice(12, 13).padStart(2, "0");
457
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
458
+ let result = (0, import_moment.default)(
459
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
460
+ "DD-MM-YYYY HH:mm:ss"
461
+ );
462
+ if (!result.isValid()) return null;
463
+ result = result.subtract(7, "hours");
464
+ return result.format(dateTimeFormat);
465
+ }
466
+ return null;
467
+ }
468
+ if (cleanInput.length === 14) {
469
+ const day = cleanInput.slice(0, 2);
470
+ const month = cleanInput.slice(2, 4);
471
+ const year = cleanInput.slice(4, 8);
472
+ const hour = cleanInput.slice(8, 10);
473
+ const minute = cleanInput.slice(10, 12);
474
+ const second = cleanInput.slice(12, 14);
475
+ if (isValidDate(day, month, year) && isValidTime(hour, minute, second)) {
476
+ let result = (0, import_moment.default)(
477
+ `${day}-${month}-${year} ${hour}:${minute}:${second}`,
478
+ "DD-MM-YYYY HH:mm:ss"
479
+ );
480
+ if (!result.isValid()) return null;
481
+ result = result.subtract(7, "hours");
482
+ return result.format(dateTimeFormat);
483
+ }
484
+ return null;
485
+ }
486
+ }
487
+ const len = cleanInput.length;
488
+ if (len === 1 || len === 2) {
489
+ const paddedDay = cleanInput.padStart(2, "0");
490
+ if (isValidDate(paddedDay, currentMonth, currentYear)) {
491
+ return formatOutput(paddedDay, currentMonth, currentYear);
492
+ }
493
+ return null;
494
+ }
495
+ if (len === 3) {
496
+ const day = cleanInput.slice(0, 2);
497
+ const month = cleanInput.slice(2, 3).padStart(2, "0");
498
+ if (isValidDate(day, month, currentYear)) {
499
+ return formatOutput(day, month, currentYear);
500
+ }
501
+ return null;
502
+ }
503
+ if (len === 6) {
504
+ const day = cleanInput.slice(0, 2);
505
+ const month = cleanInput.slice(2, 4);
506
+ let year = cleanInput.slice(4, 6);
507
+ year = `20${year}`;
508
+ if (parseInt(month) > 12) {
509
+ if (isValidDate(day, currentMonth, currentYear)) {
510
+ return formatOutput(day, currentMonth, currentYear);
511
+ }
512
+ return null;
513
+ }
514
+ if (isValidDate(day, month, year)) {
515
+ return formatOutput(day, month, year);
516
+ }
517
+ return null;
518
+ }
519
+ if (len === 7) {
520
+ return null;
521
+ }
522
+ if (len === 8) {
523
+ const day = cleanInput.slice(0, 2);
524
+ const month = cleanInput.slice(2, 4);
525
+ const year = cleanInput.slice(4, 8);
526
+ if (isValidDate(day, month, year)) {
527
+ return formatOutput(day, month, year);
528
+ }
529
+ return null;
530
+ }
531
+ if (len > 8 && !isDateTime) {
532
+ return null;
533
+ }
534
+ return null;
535
+ };
536
+
537
+ // src/constants/field/field-type-constant.ts
538
+ var FieldTypeConstants = /* @__PURE__ */ ((FieldTypeConstants2) => {
539
+ FieldTypeConstants2["CHAR"] = "char";
540
+ FieldTypeConstants2["TEXT"] = "text";
541
+ FieldTypeConstants2["INTEGER"] = "integer";
542
+ FieldTypeConstants2["FLOAT"] = "float";
543
+ FieldTypeConstants2["BOOLEAN"] = "boolean";
544
+ FieldTypeConstants2["DATE"] = "date";
545
+ FieldTypeConstants2["DATETIME"] = "datetime";
546
+ FieldTypeConstants2["BINARY"] = "binary";
547
+ FieldTypeConstants2["SELECTION"] = "selection";
548
+ FieldTypeConstants2["HTML"] = "html";
549
+ FieldTypeConstants2["MANY2ONE"] = "many2one";
550
+ FieldTypeConstants2["ONE2MANY"] = "one2many";
551
+ FieldTypeConstants2["MANY2MANY"] = "many2many";
552
+ FieldTypeConstants2["MONETARY"] = "monetary";
553
+ FieldTypeConstants2["REFERENCE"] = "reference";
554
+ FieldTypeConstants2["FUNCTION"] = "function";
555
+ FieldTypeConstants2["PROPERTY"] = "property";
556
+ return FieldTypeConstants2;
557
+ })(FieldTypeConstants || {});
558
+
559
+ // src/constants/method/method-type-constant.ts
560
+ var MethodType = /* @__PURE__ */ ((MethodType2) => {
561
+ MethodType2[MethodType2["CREATE"] = 0] = "CREATE";
562
+ MethodType2[MethodType2["UPDATE"] = 1] = "UPDATE";
563
+ MethodType2[MethodType2["DELETE"] = 2] = "DELETE";
564
+ MethodType2[MethodType2["UNLINK"] = 3] = "UNLINK";
565
+ MethodType2[MethodType2["NO_CHANGE"] = 4] = "NO_CHANGE";
566
+ return MethodType2;
567
+ })(MethodType || {});
568
+
569
+ // src/constants/model/model-constant.ts
570
+ var ModelConstants = /* @__PURE__ */ ((ModelConstants2) => {
571
+ ModelConstants2["MENU"] = "ir.ui.menu";
572
+ ModelConstants2["USER"] = "res.users";
573
+ ModelConstants2["COMPANY"] = "res.company";
574
+ ModelConstants2["WINDOW_ACTION"] = "ir.actions.act_window";
575
+ ModelConstants2["BASE_IMPORT"] = "base_import.import";
576
+ ModelConstants2["GET_IMPORT"] = "get_import_templates";
577
+ return ModelConstants2;
578
+ })(ModelConstants || {});
579
+
580
+ // src/constants/type/index.ts
581
+ var ComponentType = /* @__PURE__ */ ((ComponentType2) => {
582
+ ComponentType2["GROUP"] = "group";
583
+ ComponentType2["FIELD"] = "field";
584
+ ComponentType2["TREE"] = "tree";
585
+ ComponentType2["DIV"] = "div";
586
+ ComponentType2["LIST"] = "list";
587
+ ComponentType2["FORM"] = "form";
588
+ ComponentType2["SETTINGS"] = "setting";
589
+ ComponentType2["SPAN"] = "span";
590
+ ComponentType2["KANBAN"] = "kanban";
591
+ ComponentType2["CALENDAR"] = "calendar";
592
+ ComponentType2["TYPE"] = "view-type";
593
+ return ComponentType2;
594
+ })(ComponentType || {});
595
+ var SearchType = {
596
+ FILTER: "filter_by",
597
+ SEARCH: "search_by",
598
+ GROUP: "group_by"
599
+ };
142
600
 
143
601
  // src/constants/widget/widget-avatar-constant.ts
144
602
  var WIDGETAVATAR = /* @__PURE__ */ ((WIDGETAVATAR2) => {
@@ -146,6 +604,28 @@ var WIDGETAVATAR = /* @__PURE__ */ ((WIDGETAVATAR2) => {
146
604
  WIDGETAVATAR2["many2many_avatar_user"] = "many2many_avatar_user";
147
605
  return WIDGETAVATAR2;
148
606
  })(WIDGETAVATAR || {});
607
+ var WIDGETCURRENCY = /* @__PURE__ */ ((WIDGETCURRENCY2) => {
608
+ WIDGETCURRENCY2["many2one_avatar_user"] = "many2one_avatar_user";
609
+ WIDGETCURRENCY2["many2many_avatar_user"] = "many2many_avatar_user";
610
+ return WIDGETCURRENCY2;
611
+ })(WIDGETCURRENCY || {});
612
+
613
+ // src/constants/widget/widget-color-constant.ts
614
+ var WIDGETCOLOR = /* @__PURE__ */ ((WIDGETCOLOR2) => {
615
+ WIDGETCOLOR2["many2many_tags"] = "many2many_tags";
616
+ WIDGETCOLOR2["helpdesk_sla_many2many_tags"] = "helpdesk_sla_many2many_tags";
617
+ return WIDGETCOLOR2;
618
+ })(WIDGETCOLOR || {});
619
+
620
+ // src/constants/widget/widget-status-constant.ts
621
+ var WIDGETSTATUS = /* @__PURE__ */ ((WIDGETSTATUS2) => {
622
+ WIDGETSTATUS2["sla_status_ids"] = "sla_status_ids";
623
+ return WIDGETSTATUS2;
624
+ })(WIDGETSTATUS || {});
625
+ var WIDGETNOSTRING = /* @__PURE__ */ ((WIDGETNOSTRING2) => {
626
+ WIDGETNOSTRING2["sla_status_ids"] = "sla_status_ids";
627
+ return WIDGETNOSTRING2;
628
+ })(WIDGETNOSTRING || {});
149
629
 
150
630
  // src/utils/domain/py_tokenizer.ts
151
631
  var TokenizerError = class extends Error {
@@ -1914,6 +2394,48 @@ function parseExpr(expr) {
1914
2394
  const tokens = tokenize(expr);
1915
2395
  return parse(tokens);
1916
2396
  }
2397
+ function evaluateExpr(expr, context = {}) {
2398
+ let ast;
2399
+ try {
2400
+ ast = parseExpr(expr);
2401
+ } catch (error) {
2402
+ throw new EvalError(
2403
+ `Can not parse python expression: (${expr})
2404
+ Error: ${error.message}`
2405
+ );
2406
+ }
2407
+ try {
2408
+ return evaluate(ast, context);
2409
+ } catch (error) {
2410
+ throw new EvalError(
2411
+ `Can not evaluate python expression: (${expr})
2412
+ Error: ${error.message}`
2413
+ );
2414
+ }
2415
+ }
2416
+ function evaluateBooleanExpr(expr, context = {}) {
2417
+ if (!expr || expr === "False" || expr === "0") {
2418
+ return false;
2419
+ }
2420
+ if (expr === "True" || expr === "1") {
2421
+ return true;
2422
+ }
2423
+ return evaluateExpr(`bool(${expr})`, context);
2424
+ }
2425
+
2426
+ // src/utils/domain/context.ts
2427
+ function evalPartialContext(_context, evaluationContext = {}) {
2428
+ const ast = parseExpr(_context);
2429
+ const context = {};
2430
+ for (const key in ast.value) {
2431
+ const value = ast.value[key];
2432
+ try {
2433
+ context[key] = evaluate(value, evaluationContext);
2434
+ } catch {
2435
+ }
2436
+ }
2437
+ return context;
2438
+ }
1917
2439
 
1918
2440
  // src/utils/domain/objects.ts
1919
2441
  function shallowEqual(obj1, obj2, comparisonFn = (a, b) => a === b) {
@@ -2252,14 +2774,280 @@ function matchDomain(record, domain) {
2252
2774
  }
2253
2775
  return matchCondition(record, condStack.pop());
2254
2776
  }
2777
+ var checkDomain = (context, domain) => {
2778
+ try {
2779
+ if (domain === void 0 || domain === "0" || domain === "False" || domain === false) {
2780
+ return false;
2781
+ } else if (domain === "1" || domain === "True" || domain === true) {
2782
+ return true;
2783
+ }
2784
+ try {
2785
+ if (context && domain) {
2786
+ const d = new Domain(domain);
2787
+ return d.contains(context);
2788
+ }
2789
+ } catch (error) {
2790
+ if (context && domain) {
2791
+ const domainEval = evaluateBooleanExpr(domain, context);
2792
+ return domainEval;
2793
+ }
2794
+ return false;
2795
+ }
2796
+ return false;
2797
+ } catch (e) {
2798
+ return false;
2799
+ }
2800
+ };
2801
+ var matchDomains = (context, domains) => {
2802
+ if (Array.isArray(domains)) {
2803
+ if (domains?.length > 0) {
2804
+ return domains && domains.some((domain) => checkDomain(context, domain));
2805
+ }
2806
+ } else return checkDomain(context, domains);
2807
+ return false;
2808
+ };
2255
2809
 
2256
2810
  // src/utils/function.ts
2257
2811
  var import_react = require("react");
2812
+ var evalJSONContext = (_context, context = {}) => {
2813
+ try {
2814
+ return evalPartialContext(_context, context);
2815
+ } catch (err) {
2816
+ return null;
2817
+ }
2818
+ };
2819
+ var evalJSONDomain = (domain, context) => {
2820
+ try {
2821
+ if (context) {
2822
+ Object.keys(context)?.forEach((key) => {
2823
+ if (Array.isArray(context[key])) {
2824
+ const isTypeObject = context[key]?.every(
2825
+ (item) => typeof item === "object" && item !== null && item?.id !== void 0
2826
+ );
2827
+ if (isTypeObject) {
2828
+ context[key] = context[key]?.map((item) => item?.id);
2829
+ }
2830
+ }
2831
+ });
2832
+ }
2833
+ const value = evaluateExpr(domain, context);
2834
+ return value;
2835
+ } catch (err) {
2836
+ try {
2837
+ const domainObject = new Domain(domain).toList(context);
2838
+ return domainObject;
2839
+ } catch (err2) {
2840
+ return [];
2841
+ }
2842
+ }
2843
+ };
2844
+ var formatSortingString = (input) => {
2845
+ if (!input) return null;
2846
+ return input.split(",").map((field) => {
2847
+ const [key, order] = field.trim().split(/\s+/);
2848
+ const sortOrder = order?.toUpperCase() === "DESC" ? "DESC" : "ASC";
2849
+ return `${key} ${sortOrder}`;
2850
+ }).join(", ");
2851
+ };
2852
+ var domainHelper = {
2853
+ checkDomain,
2854
+ matchDomains,
2855
+ Domain
2856
+ };
2258
2857
  var toQueryString = (params) => {
2259
2858
  return Object.keys(params).map(
2260
2859
  (key) => encodeURIComponent(key) + "=" + encodeURIComponent(params[key].toString())
2261
2860
  ).join("&");
2262
2861
  };
2862
+ var convertFloatToTime = (floatValue) => {
2863
+ const hours = Math.floor(floatValue);
2864
+ const minutes = Math.round((floatValue - hours) * 60);
2865
+ const formattedHours = String(hours).padStart(2, "0");
2866
+ const formattedMinutes = String(minutes).padStart(2, "0");
2867
+ return `${formattedHours}:${formattedMinutes}`;
2868
+ };
2869
+ var convertTimeToFloat = (timeString) => {
2870
+ const [hours, minutes] = timeString.split(":").map(Number);
2871
+ return hours + minutes / 60;
2872
+ };
2873
+ var stringToColor = (name, id) => {
2874
+ const combined = name + id / 2;
2875
+ let hash = 0;
2876
+ for (let i = 0; i < combined.length; i++) {
2877
+ hash = combined.charCodeAt(i) + ((hash << 5) - hash);
2878
+ }
2879
+ const r = hash >> 16 & 255;
2880
+ const g = hash >> 8 & 255;
2881
+ const b = hash & 255;
2882
+ const adjustedR = 120 + r % 61;
2883
+ const adjustedG = 120 + g % 61;
2884
+ const adjustedB = 120 + b % 61;
2885
+ return `#${adjustedR.toString(16).padStart(2, "0")}${adjustedG.toString(16).padStart(2, "0")}${adjustedB.toString(16).padStart(2, "0")}`;
2886
+ };
2887
+ var getFieldsOnChange = (fields) => {
2888
+ const result = [];
2889
+ function traverse(items) {
2890
+ for (const item of items) {
2891
+ if (item) {
2892
+ if (item?.type_co === "field" && matchDomains(fields, item?.on_change)) {
2893
+ result.push(item.name);
2894
+ }
2895
+ if (item?.fields && Array.isArray(item?.fields)) {
2896
+ traverse(item?.fields);
2897
+ }
2898
+ }
2899
+ }
2900
+ }
2901
+ traverse(fields);
2902
+ return result;
2903
+ };
2904
+ var filterFieldDirty = ({
2905
+ id,
2906
+ viewData,
2907
+ formValues,
2908
+ dirtyFields,
2909
+ model,
2910
+ defaultData
2911
+ }) => {
2912
+ const data = id ? { ...dirtyFields } : { ...formValues };
2913
+ for (const key in data) {
2914
+ if (viewData?.models?.[model]?.[key]?.type === "one2many" /* ONE2MANY */) {
2915
+ const lineData = [];
2916
+ (formValues[key] ?? []).forEach((itemData, index) => {
2917
+ if (typeof itemData?.id === "string" && itemData?.id.includes("virtual")) {
2918
+ delete itemData?.id;
2919
+ }
2920
+ if (!itemData?.id) {
2921
+ lineData.push([
2922
+ 0 /* CREATE */,
2923
+ `virtual_${index}`,
2924
+ filterFieldDirty({
2925
+ id: itemData?.id,
2926
+ viewData,
2927
+ formValues: itemData,
2928
+ dirtyFields: {},
2929
+ model: viewData?.models?.[model]?.[key]?.relation,
2930
+ defaultData
2931
+ })
2932
+ ]);
2933
+ } else if (dirtyFields[key]?.length) {
2934
+ dirtyFields[key].forEach((itemDirty, indexDirty) => {
2935
+ if (Object.values(itemDirty).includes(true) && indexDirty === index) {
2936
+ lineData.push([
2937
+ 1 /* UPDATE */,
2938
+ itemData?.id,
2939
+ filterFieldDirty({
2940
+ id: itemData?.id,
2941
+ viewData,
2942
+ formValues: itemData,
2943
+ dirtyFields: itemDirty,
2944
+ model: viewData?.models?.[model]?.[key]?.relation,
2945
+ defaultData: {}
2946
+ })
2947
+ ]);
2948
+ }
2949
+ });
2950
+ }
2951
+ });
2952
+ (defaultData[key] ?? []).forEach((item) => {
2953
+ if (!(formValues[key] ?? []).find(
2954
+ (itemData) => itemData?.id === item?.id
2955
+ )) {
2956
+ lineData.push([2 /* DELETE */, item?.id, item]);
2957
+ }
2958
+ });
2959
+ data[key] = lineData;
2960
+ } else if (viewData?.models?.[model]?.[key]?.type === "many2many" /* MANY2MANY */) {
2961
+ const lineData = [];
2962
+ (formValues[key] || []).forEach((itemData) => {
2963
+ if (itemData?.id) {
2964
+ lineData.push([4 /* NO_CHANGE */, itemData?.id]);
2965
+ }
2966
+ });
2967
+ (defaultData[key] ?? []).forEach((item) => {
2968
+ if (!(formValues[key] ?? []).find(
2969
+ (itemData) => itemData?.id === item?.id
2970
+ )) {
2971
+ lineData.push([3 /* UNLINK */, item?.id]);
2972
+ }
2973
+ });
2974
+ data[key] = lineData;
2975
+ } else {
2976
+ if (id && (typeof dirtyFields?.[key] === "object" && !dirtyFields?.[key]?.id || typeof dirtyFields[key] !== "object" && !dirtyFields[key])) {
2977
+ delete data[key];
2978
+ } else {
2979
+ if (!data[key]) {
2980
+ delete data[key];
2981
+ } else {
2982
+ data[key] = formValues?.[key]?.display_name ? formValues?.[key]?.id : formValues?.[key];
2983
+ }
2984
+ }
2985
+ }
2986
+ }
2987
+ return data;
2988
+ };
2989
+ var mergeObjects = (object1, object2) => {
2990
+ if (!object1 || !object2) return void 0;
2991
+ const mergedObject = { ...object2 };
2992
+ Object.keys(object1).forEach((key) => {
2993
+ if (Array.isArray(object1[key]) && Array.isArray(object2[key])) {
2994
+ mergedObject[key] = object2[key].map((item, index) => {
2995
+ if (object1[key][index]) {
2996
+ return {
2997
+ ...item,
2998
+ ...object1[key][index]
2999
+ };
3000
+ }
3001
+ return item;
3002
+ });
3003
+ } else if (typeof object1[key] === "object" && typeof object2[key] === "object" && object1[key] !== null && object2[key] !== null) {
3004
+ mergedObject[key] = mergeObjects(object1[key], object2[key]);
3005
+ } else {
3006
+ mergedObject[key] = object1[key] !== void 0 ? object1[key] : object2[key];
3007
+ }
3008
+ });
3009
+ if (object2) {
3010
+ Object.keys(object2).forEach((key) => {
3011
+ if (!mergedObject.hasOwnProperty(key)) {
3012
+ mergedObject[key] = object2[key];
3013
+ }
3014
+ });
3015
+ }
3016
+ return mergedObject;
3017
+ };
3018
+ var formatUrlPath = ({
3019
+ viewType,
3020
+ aid,
3021
+ model,
3022
+ id,
3023
+ actionPath
3024
+ }) => {
3025
+ let _url = `/${viewType}/${actionPath}?aid=${aid}&model=${model}`;
3026
+ if (id) {
3027
+ _url += `&id=${id}`;
3028
+ }
3029
+ return _url;
3030
+ };
3031
+ var removeUndefinedFields = (obj) => {
3032
+ const newObj = {};
3033
+ for (const key in obj) {
3034
+ if (obj[key] !== void 0) {
3035
+ newObj[key] = obj[key];
3036
+ }
3037
+ }
3038
+ return newObj;
3039
+ };
3040
+ var useTabModel = (viewData, onchangeData) => {
3041
+ const tabsData = viewData?.views?.form?.tabs?.filter((val) => {
3042
+ if (!val) return null;
3043
+ const hide = checkDomain(onchangeData, val.invisible);
3044
+ if (!hide) {
3045
+ return val;
3046
+ }
3047
+ return false;
3048
+ }) || [];
3049
+ return tabsData;
3050
+ };
2263
3051
  var isBase64File = (str) => {
2264
3052
  try {
2265
3053
  const dataUriPattern = /^data:([a-zA-Z]+\/[a-zA-Z0-9-.+]+)?;base64,/;
@@ -2275,6 +3063,69 @@ var isBase64File = (str) => {
2275
3063
  return false;
2276
3064
  }
2277
3065
  };
3066
+ var isBase64Image = (str) => {
3067
+ const base64Regex = /^data:image\/(png|jpeg|jpg|gif|webp);base64,/;
3068
+ if (!base64Regex.test(str)) {
3069
+ return false;
3070
+ }
3071
+ try {
3072
+ const base64Data = str.split(",")[1];
3073
+ return !!base64Data && atob(base64Data).length > 0;
3074
+ } catch (error) {
3075
+ return false;
3076
+ }
3077
+ };
3078
+ var checkIsImageLink = (url) => {
3079
+ const imageExtensions = /\.(jpg|jpeg|png|gif|bmp|webp|svg|tiff|ico)$/i;
3080
+ return imageExtensions.test(url) || isBase64Image(url);
3081
+ };
3082
+ var formatFileSize = (size) => {
3083
+ if (size < 1024) return `${size} B`;
3084
+ const i = Math.floor(Math.log(size) / Math.log(1024));
3085
+ const sizes = ["B", "KB", "MB", "GB", "TB"];
3086
+ return `${(size / Math.pow(1024, i)).toFixed(2)} ${sizes[i]}`;
3087
+ };
3088
+ var getSubdomain = (url = window.location.href) => {
3089
+ const parts = url?.split(".");
3090
+ if (parts.length > 2) {
3091
+ return parts[0].replace("https://", "").replace("http://", "");
3092
+ }
3093
+ return null;
3094
+ };
3095
+ var resequence = (arr, start, end) => {
3096
+ if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {
3097
+ return [];
3098
+ }
3099
+ const [element] = arr.splice(start, 1);
3100
+ arr.splice(end, 0, element);
3101
+ return arr.slice(Math.min(start, end), Math.max(start, end) + 1);
3102
+ };
3103
+ var getOffSet = (arr, start, end) => {
3104
+ if (start < 0 || start >= arr.length || end < 0 || end >= arr.length) {
3105
+ return 0;
3106
+ }
3107
+ if (start > end) {
3108
+ return end;
3109
+ }
3110
+ return arr.slice(0, start).length;
3111
+ };
3112
+ var copyTextToClipboard = async (text) => {
3113
+ if ("clipboard" in navigator) {
3114
+ return await navigator.clipboard.writeText(text);
3115
+ } else {
3116
+ const textArea = document.createElement("textarea");
3117
+ textArea.value = text;
3118
+ textArea.style.position = "fixed";
3119
+ document.body.appendChild(textArea);
3120
+ textArea.focus();
3121
+ textArea.select();
3122
+ try {
3123
+ document.execCommand("copy");
3124
+ } finally {
3125
+ document.body.removeChild(textArea);
3126
+ }
3127
+ }
3128
+ };
2278
3129
  var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
2279
3130
  if (!originalRequest.data) return originalRequest.data;
2280
3131
  if (typeof originalRequest.data === "string") {
@@ -2294,6 +3145,41 @@ var updateTokenParamInOriginalRequest = (originalRequest, newAccessToken) => {
2294
3145
  }
2295
3146
  return originalRequest.data;
2296
3147
  };
3148
+ var isObjectEmpty = (obj) => {
3149
+ return Object.keys(obj).length === 0;
3150
+ };
3151
+ var useField = (props) => {
3152
+ const [invisible, setInvisible] = (0, import_react.useState)(true);
3153
+ const [required, setRequired] = (0, import_react.useState)(false);
3154
+ const [readonly, setReadOnly] = (0, import_react.useState)(false);
3155
+ const {
3156
+ invisible: inv,
3157
+ required: req,
3158
+ readonly: rea,
3159
+ onchangeData,
3160
+ rootField,
3161
+ index,
3162
+ name
3163
+ } = props;
3164
+ const nameField = rootField ? `${rootField?.name}.${index}.${name}` : null;
3165
+ (0, import_react.useEffect)(() => {
3166
+ if (onchangeData && Object.keys(onchangeData).length > 0) {
3167
+ setRequired(
3168
+ typeof req === "object" ? matchDomains(onchangeData, req) : checkDomain(onchangeData, req)
3169
+ );
3170
+ setInvisible(matchDomains(onchangeData, inv));
3171
+ setReadOnly(
3172
+ typeof req === "object" ? matchDomains(onchangeData, rea) : checkDomain(onchangeData, rea)
3173
+ );
3174
+ }
3175
+ }, [onchangeData]);
3176
+ return {
3177
+ invisible,
3178
+ required,
3179
+ readonly,
3180
+ nameField
3181
+ };
3182
+ };
2297
3183
 
2298
3184
  // src/utils/storage/local-storage.ts
2299
3185
  var localStorageUtils = () => {
@@ -2594,6 +3480,7 @@ var {
2594
3480
  setConfig,
2595
3481
  setEnvFile
2596
3482
  } = envSlice.actions;
3483
+ var selectEnv = (state) => state.env;
2597
3484
  var env_slice_default = envSlice.reducer;
2598
3485
 
2599
3486
  // src/store/reducers/excel-slice/index.ts
@@ -3122,6 +4009,10 @@ var envStore = (0, import_toolkit11.configureStore)({
3122
4009
  })
3123
4010
  });
3124
4011
 
4012
+ // src/store/index.ts
4013
+ var useAppDispatch = import_react_redux.useDispatch;
4014
+ var useAppSelector = import_react_redux.useSelector;
4015
+
3125
4016
  // src/environment/EnvStore.ts
3126
4017
  var EnvStore = class {
3127
4018
  envStore;
@@ -3203,6 +4094,9 @@ function getEnv() {
3203
4094
  return env;
3204
4095
  }
3205
4096
 
4097
+ // src/hooks/auth/use-forgot-password.ts
4098
+ var import_react_query = require("@tanstack/react-query");
4099
+
3206
4100
  // src/services/action-service/index.ts
3207
4101
  var ActionService = {
3208
4102
  // Load Action
@@ -5946,8 +6840,113 @@ var useVerifyTotp = () => {
5946
6840
  });
5947
6841
  };
5948
6842
  var use_verify_totp_default = useVerifyTotp;
6843
+
6844
+ // src/provider/react-query-provider.tsx
6845
+ var import_react_query67 = require("@tanstack/react-query");
6846
+ var import_jsx_runtime = require("react/jsx-runtime");
6847
+
6848
+ // src/provider/redux-provider.tsx
6849
+ var import_react_redux2 = require("react-redux");
6850
+ var import_jsx_runtime2 = require("react/jsx-runtime");
6851
+
6852
+ // src/provider/main-provider.tsx
6853
+ var import_jsx_runtime3 = require("react/jsx-runtime");
6854
+
6855
+ // src/provider/version-gate-provider.tsx
6856
+ var import_react2 = require("react");
6857
+ var import_react_query68 = require("@tanstack/react-query");
6858
+ var import_jsx_runtime4 = require("react/jsx-runtime");
6859
+ var VersionGate = ({ children }) => {
6860
+ const queryClient = (0, import_react_query68.useQueryClient)();
6861
+ const [ready, setReady] = (0, import_react2.useState)(false);
6862
+ (0, import_react2.useEffect)(() => {
6863
+ const clearVersion = () => {
6864
+ queryClient.clear();
6865
+ localStorage.removeItem("__api_version__");
6866
+ };
6867
+ const validateVersion = async () => {
6868
+ const serverVersion = await view_service_default.getVersion();
6869
+ const cached = localStorage.getItem("__api_version__");
6870
+ if (cached !== serverVersion?.api_version) {
6871
+ clearVersion();
6872
+ localStorage.setItem("__api_version__", serverVersion?.api_version);
6873
+ } else {
6874
+ console.log("Api version:", serverVersion?.api_version);
6875
+ }
6876
+ setReady(true);
6877
+ };
6878
+ validateVersion();
6879
+ if (typeof window !== "undefined") {
6880
+ const onKey = (e) => {
6881
+ const key = e.key.toLowerCase();
6882
+ const isHardRefresh = (key === "f5" || key === "r") && e.ctrlKey && (key !== "r" || e.shiftKey) || key === "r" && e.metaKey && e.shiftKey || key === "r" && e.metaKey && e.altKey;
6883
+ if (isHardRefresh) clearVersion();
6884
+ };
6885
+ window.addEventListener("keydown", onKey);
6886
+ return () => window.removeEventListener("keydown", onKey);
6887
+ }
6888
+ }, [queryClient]);
6889
+ return ready ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_jsx_runtime4.Fragment, { children }) : null;
6890
+ };
5949
6891
  // Annotate the CommonJS export names for ESM import in node:
5950
6892
  0 && (module.exports = {
6893
+ ActionService,
6894
+ AuthService,
6895
+ CompanyService,
6896
+ ComponentType,
6897
+ EnvStore,
6898
+ ExcelService,
6899
+ FieldTypeConstants,
6900
+ FormService,
6901
+ KanbanService,
6902
+ KeyConstants,
6903
+ MethodConstants,
6904
+ MethodType,
6905
+ ModelConstants,
6906
+ ModelService,
6907
+ SearchType,
6908
+ UriConstants,
6909
+ UserService,
6910
+ VersionGate,
6911
+ ViewService,
6912
+ WIDGETAVATAR,
6913
+ WIDGETCOLOR,
6914
+ WIDGETCURRENCY,
6915
+ WIDGETNOSTRING,
6916
+ WIDGETSTATUS,
6917
+ WesapError,
6918
+ axiosClient,
6919
+ checkIsImageLink,
6920
+ convertFloatToTime,
6921
+ convertTimeToFloat,
6922
+ copyTextToClipboard,
6923
+ domainHelper,
6924
+ evalJSONContext,
6925
+ evalJSONDomain,
6926
+ filterFieldDirty,
6927
+ formatCurrency,
6928
+ formatDate,
6929
+ formatFileSize,
6930
+ formatSortingString,
6931
+ formatUrlPath,
6932
+ getEnv,
6933
+ getFieldsOnChange,
6934
+ getOffSet,
6935
+ getSubdomain,
6936
+ handleError,
6937
+ isBase64File,
6938
+ isBase64Image,
6939
+ isObjectEmpty,
6940
+ mergeObjects,
6941
+ removeUndefinedFields,
6942
+ resequence,
6943
+ selectEnv,
6944
+ setEnvFile,
6945
+ stringToColor,
6946
+ toQueryString,
6947
+ updateTokenParamInOriginalRequest,
6948
+ useAppDispatch,
6949
+ useAppSelector,
5951
6950
  useButton,
5952
6951
  useChangeStatus,
5953
6952
  useDelete,
@@ -5955,6 +6954,7 @@ var use_verify_totp_default = useVerifyTotp;
5955
6954
  useDuplicateRecord,
5956
6955
  useExecuteImport,
5957
6956
  useExportExcel,
6957
+ useField,
5958
6958
  useForgotPassword,
5959
6959
  useForgotPasswordSSO,
5960
6960
  useGet2FAMethods,
@@ -6010,10 +7010,12 @@ var use_verify_totp_default = useVerifyTotp;
6010
7010
  useSettingsWebRead2fa,
6011
7011
  useSignInSSO,
6012
7012
  useSwitchLocale,
7013
+ useTabModel,
6013
7014
  useUpdatePassword,
6014
7015
  useUploadFile,
6015
7016
  useUploadIdFile,
6016
7017
  useUploadImage,
6017
7018
  useVerify2FA,
6018
- useVerifyTotp
7019
+ useVerifyTotp,
7020
+ validateAndParseDate
6019
7021
  });