@nocios/crudify-components 2.0.32 → 2.0.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/coverage/base.css +224 -0
  2. package/coverage/block-navigation.js +87 -0
  3. package/coverage/coverage-final.json +120 -0
  4. package/coverage/favicon.png +0 -0
  5. package/coverage/index.html +686 -0
  6. package/coverage/prettify.css +1 -0
  7. package/coverage/prettify.js +2 -0
  8. package/coverage/sort-arrow-sprite.png +0 -0
  9. package/coverage/sorter.js +210 -0
  10. package/dist/{CrudiaMarkdownField-C54-A_J3.d.mts → CrudiaMarkdownField-Bxl08sRG.d.mts} +12 -7
  11. package/dist/{CrudiaMarkdownField-C8HQh7s5.d.ts → CrudiaMarkdownField-DUJNOOzP.d.ts} +12 -7
  12. package/dist/chunk-44VU4TSP.mjs +1 -0
  13. package/dist/chunk-4LMFQECS.js +1 -0
  14. package/dist/chunk-77UKXG5L.mjs +1 -0
  15. package/dist/{chunk-4VN5YRYZ.js → chunk-BXFEQ6KP.js} +1 -1
  16. package/dist/{chunk-6ONAT4QU.js → chunk-H6XXWDUT.js} +1 -1
  17. package/dist/chunk-NIRLP2TC.js +1 -0
  18. package/dist/chunk-O4FUHIQG.mjs +1 -0
  19. package/dist/chunk-QFACMV2I.mjs +1 -0
  20. package/dist/chunk-QZH3KSJZ.js +1 -0
  21. package/dist/{chunk-RJBX4MWF.mjs → chunk-WMLIOPUC.mjs} +1 -1
  22. package/dist/components.d.mts +1 -1
  23. package/dist/components.d.ts +1 -1
  24. package/dist/components.js +1 -1
  25. package/dist/components.mjs +1 -1
  26. package/dist/errorTranslation-D-Y7uNN_.d.mts +141 -0
  27. package/dist/errorTranslation-DDlAXpMl.d.ts +141 -0
  28. package/dist/hooks.d.mts +2 -2
  29. package/dist/hooks.d.ts +2 -2
  30. package/dist/hooks.js +1 -1
  31. package/dist/hooks.mjs +1 -1
  32. package/dist/{index-DY90WVQQ.d.mts → index-U--xRr8A.d.mts} +225 -191
  33. package/dist/{index-d1vE803G.d.ts → index-dXVRVcEB.d.ts} +225 -191
  34. package/dist/index.d.mts +175 -6
  35. package/dist/index.d.ts +175 -6
  36. package/dist/index.js +2 -2
  37. package/dist/index.mjs +1 -1
  38. package/dist/{errorTranslation-By5Av0tL.d.ts → tenantConfig-DqJqQkoR.d.mts} +116 -139
  39. package/dist/{errorTranslation-DeeDj7Vt.d.mts → tenantConfig-DqJqQkoR.d.ts} +116 -139
  40. package/dist/utils.d.mts +2 -2
  41. package/dist/utils.d.ts +2 -2
  42. package/dist/utils.js +1 -1
  43. package/dist/utils.mjs +1 -1
  44. package/package.json +1 -1
  45. package/coverage/.tmp/coverage-102.json +0 -1
  46. package/coverage/.tmp/coverage-103.json +0 -1
  47. package/coverage/.tmp/coverage-104.json +0 -1
  48. package/coverage/.tmp/coverage-105.json +0 -1
  49. package/coverage/.tmp/coverage-106.json +0 -1
  50. package/coverage/.tmp/coverage-107.json +0 -1
  51. package/dist/api-B4uXiHF0.d.mts +0 -118
  52. package/dist/api-B4uXiHF0.d.ts +0 -118
  53. package/dist/chunk-4ILUXVPW.mjs +0 -1
  54. package/dist/chunk-5XBTRBE5.js +0 -1
  55. package/dist/chunk-CR5KJUST.js +0 -1
  56. package/dist/chunk-H5M2Q6PB.mjs +0 -1
  57. package/dist/chunk-JAPL7EZJ.mjs +0 -1
  58. package/dist/chunk-L7GKP6XY.mjs +0 -1
  59. package/dist/chunk-NSV6ECYO.js +0 -1
  60. package/dist/chunk-PTUSZGL4.mjs +0 -1
  61. package/dist/chunk-T6R65ROU.js +0 -1
@@ -1,8 +1,8 @@
1
- import { U as UserProfile, e as CrudifyRequestOptions, C as CrudifyApiResponse, g as TransactionInput, d as CrudifyOperationOptions } from './api-B4uXiHF0.js';
1
+ import { U as UserProfile, m as CrudifyRequestOptions, f as CrudifyApiResponse, o as TransactionInput, l as CrudifyOperationOptions } from './tenantConfig-DqJqQkoR.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode } from 'react';
4
- import { b as NotificationSeverity } from './GlobalNotificationProvider-Zq18OkpI.js';
5
4
  import { CrudifyResponse } from '@nocios/crudify-sdk';
5
+ import { b as NotificationSeverity } from './GlobalNotificationProvider-Zq18OkpI.js';
6
6
 
7
7
  type TokenData = {
8
8
  accessToken: string;
@@ -462,6 +462,199 @@ declare function useSessionContext(): SessionContextType;
462
462
  */
463
463
  declare function SessionDebugInfo(): react_jsx_runtime.JSX.Element;
464
464
 
465
+ /**
466
+ * Individual file status
467
+ */
468
+ type FileStatus = "pending" | "uploading" | "completed" | "error" | "removing" | "pendingDeletion";
469
+ /**
470
+ * Represents a file in the system
471
+ */
472
+ interface FileItem {
473
+ /** Unique file ID (generated or from server) */
474
+ id: string;
475
+ /** Original file name */
476
+ name: string;
477
+ /** Size in bytes */
478
+ size: number;
479
+ /** MIME content type */
480
+ contentType: string;
481
+ /** Current file status */
482
+ status: FileStatus;
483
+ /** Upload progress (0-100) */
484
+ progress: number;
485
+ /**
486
+ * Relative file path (includes visibility)
487
+ * Format: "public/path/file.ext" or "private/path/file.ext"
488
+ */
489
+ filePath?: string;
490
+ /**
491
+ * File visibility
492
+ * Extracted from filePath for convenience
493
+ */
494
+ visibility?: "public" | "private";
495
+ /** Public URL for public files */
496
+ publicUrl?: string;
497
+ /** Preview URL (for images) */
498
+ previewUrl?: string;
499
+ /** Error message if failed */
500
+ errorMessage?: string;
501
+ /** Creation timestamp */
502
+ createdAt: number;
503
+ /** Original file (only during upload) */
504
+ file?: File;
505
+ /** Whether this file existed before (was loaded from server) */
506
+ isExisting?: boolean;
507
+ }
508
+ /**
509
+ * Hook configuration
510
+ */
511
+ interface UseFileUploadOptions {
512
+ /** Allowed MIME types (e.g., ["image/png", "image/jpeg", "application/pdf"]) */
513
+ acceptedTypes?: string[];
514
+ /** Maximum file size in bytes (default: 10MB) */
515
+ maxFileSize?: number;
516
+ /** Maximum number of files (undefined = no limit) */
517
+ maxFiles?: number;
518
+ /** Minimum number of required files (default: 0) */
519
+ minFiles?: number;
520
+ /**
521
+ * Visibility of uploaded files
522
+ * @default "private"
523
+ */
524
+ visibility?: "public" | "private";
525
+ /** Callback when an upload completes successfully */
526
+ onUploadComplete?: (file: FileItem) => void;
527
+ /** Callback when an upload fails */
528
+ onUploadError?: (file: FileItem, error: string) => void;
529
+ /** Callback when a file is removed */
530
+ onFileRemoved?: (file: FileItem) => void;
531
+ /** Callback when the file list changes */
532
+ onFilesChange?: (files: FileItem[]) => void;
533
+ /** Form mode: 'create' or 'edit' - affects delete behavior */
534
+ mode?: "create" | "edit";
535
+ }
536
+ /**
537
+ * Hook return type
538
+ */
539
+ interface UseFileUploadReturn {
540
+ /** Current file list */
541
+ files: FileItem[];
542
+ /** Active files (excluding pendingDeletion) */
543
+ activeFiles: FileItem[];
544
+ /** Count of active files */
545
+ activeFileCount: number;
546
+ /** Whether uploads are in progress */
547
+ isUploading: boolean;
548
+ /** Number of pending uploads */
549
+ pendingCount: number;
550
+ /** Add files (triggers automatic upload) */
551
+ addFiles: (files: FileList | File[]) => Promise<void>;
552
+ /** Remove a file - returns whether confirmation is needed */
553
+ removeFile: (fileId: string) => Promise<{
554
+ needsConfirmation: boolean;
555
+ isExisting: boolean;
556
+ }>;
557
+ /** Delete a file immediately from server (for new files or create mode) */
558
+ deleteFileImmediately: (fileId: string) => Promise<{
559
+ success: boolean;
560
+ error?: string;
561
+ }>;
562
+ /** Restore a file that was marked for deletion */
563
+ restoreFile: (fileId: string) => boolean;
564
+ /** Clear all files */
565
+ clearFiles: () => void;
566
+ /** Retry upload for a failed file */
567
+ retryUpload: (fileId: string) => Promise<void>;
568
+ /** Validate if minimum requirements are met */
569
+ isValid: boolean;
570
+ /** Validation error message (i18n key) */
571
+ validationError: string | null;
572
+ /** Validation error i18n key */
573
+ validationErrorKey: string | null;
574
+ /** Validation error params for i18n interpolation */
575
+ validationErrorParams: Record<string, string | number>;
576
+ /** Wait for all uploads to complete and return completed file paths */
577
+ waitForUploads: () => Promise<string[]>;
578
+ /**
579
+ * Completed file paths (for saving in form)
580
+ * Relative paths with visibility - subscriberKey is added in backend
581
+ */
582
+ completedFilePaths: string[];
583
+ /** Initialize with existing files (for editing) */
584
+ initializeFiles: (existingFiles: Array<{
585
+ filePath: string;
586
+ name: string;
587
+ size?: number;
588
+ contentType?: string;
589
+ }>, baseUrl?: string) => void;
590
+ /** Whether the user has interacted with the field */
591
+ isTouched: boolean;
592
+ /** Mark the field as touched (to show validation errors) */
593
+ markAsTouched: () => void;
594
+ /** Whether the form has been submitted */
595
+ isSubmitted: boolean;
596
+ /** Mark the form as submitted (to show all validation errors) */
597
+ markAsSubmitted: () => void;
598
+ /**
599
+ * Get URL for file preview
600
+ * - Public: returns publicUrl directly
601
+ * - Private: requests signed URL from backend
602
+ */
603
+ getPreviewUrl: (fileId: string) => Promise<string | null>;
604
+ /** List of file IDs pending deletion */
605
+ pendingDeletions: string[];
606
+ /** Whether there are files pending deletion */
607
+ hasPendingDeletions: boolean;
608
+ /** Execute all pending deletions (call this on form submit) */
609
+ commitDeletions: () => Promise<{
610
+ success: boolean;
611
+ errors: string[];
612
+ }>;
613
+ /** Cancel all pending deletions and restore files */
614
+ restorePendingDeletions: () => void;
615
+ }
616
+
617
+ /**
618
+ * Complete hook for file handling with:
619
+ * - Progressive upload to S3 with pre-signed URLs
620
+ * - Per-file progress tracking
621
+ * - Type and size validation
622
+ * - Soft delete (disableFile)
623
+ * - Multiple file support
624
+ */
625
+
626
+ /**
627
+ * Hook for complete file handling with S3 upload
628
+ *
629
+ * @example
630
+ * ```tsx
631
+ * const {
632
+ * files,
633
+ * addFiles,
634
+ * removeFile,
635
+ * isUploading,
636
+ * isValid,
637
+ * completedS3Keys
638
+ * } = useFileUpload({
639
+ * acceptedTypes: ["image/png", "image/jpeg", "application/pdf"],
640
+ * maxFileSize: 5 * 1024 * 1024, // 5MB
641
+ * maxFiles: 3,
642
+ * minFiles: 1
643
+ * });
644
+ *
645
+ * // In form submit
646
+ * const handleSubmit = async () => {
647
+ * await waitForUploads(); // Wait for pending uploads
648
+ * if (!isValid) return;
649
+ *
650
+ * await crudify.createItem("documents", {
651
+ * files: completedS3Keys
652
+ * });
653
+ * };
654
+ * ```
655
+ */
656
+ declare const useFileUpload: (options?: UseFileUploadOptions) => UseFileUploadReturn;
657
+
465
658
  /**
466
659
  * Complete user data structure (compatible con legacy)
467
660
  */
@@ -651,202 +844,20 @@ interface UseUserProfileReturn {
651
844
  declare const useUserProfile: (options?: UseUserProfileOptions) => UseUserProfileReturn;
652
845
 
653
846
  /**
654
- * Complete hook for file handling with:
655
- * - Progressive upload to S3 with pre-signed URLs
656
- * - Per-file progress tracking
657
- * - Type and size validation
658
- * - Soft delete (disableFile)
659
- * - Multiple file support
660
- */
661
- /**
662
- * Individual file status
663
- */
664
- type FileStatus = "pending" | "uploading" | "completed" | "error" | "removing" | "pendingDeletion";
665
- /**
666
- * Represents a file in the system
667
- */
668
- interface FileItem {
669
- /** Unique file ID (generated or from server) */
670
- id: string;
671
- /** Original file name */
672
- name: string;
673
- /** Size in bytes */
674
- size: number;
675
- /** MIME content type */
676
- contentType: string;
677
- /** Current file status */
678
- status: FileStatus;
679
- /** Upload progress (0-100) */
680
- progress: number;
681
- /**
682
- * Relative file path (includes visibility)
683
- * Format: "public/path/file.ext" or "private/path/file.ext"
684
- */
685
- filePath?: string;
686
- /**
687
- * File visibility
688
- * Extracted from filePath for convenience
689
- */
690
- visibility?: "public" | "private";
691
- /** Public URL for public files */
692
- publicUrl?: string;
693
- /** Preview URL (for images) */
694
- previewUrl?: string;
695
- /** Error message if failed */
696
- errorMessage?: string;
697
- /** Creation timestamp */
698
- createdAt: number;
699
- /** Original file (only during upload) */
700
- file?: File;
701
- /** Whether this file existed before (was loaded from server) */
702
- isExisting?: boolean;
703
- }
704
- /**
705
- * Hook configuration
847
+ * Types and interfaces for useCrudifyWithNotifications
706
848
  */
707
- interface UseFileUploadOptions {
708
- /** Allowed MIME types (e.g., ["image/png", "image/jpeg", "application/pdf"]) */
709
- acceptedTypes?: string[];
710
- /** Maximum file size in bytes (default: 10MB) */
711
- maxFileSize?: number;
712
- /** Maximum number of files (undefined = no limit) */
713
- maxFiles?: number;
714
- /** Minimum number of required files (default: 0) */
715
- minFiles?: number;
716
- /**
717
- * Visibility of uploaded files
718
- * @default "private"
719
- */
720
- visibility?: "public" | "private";
721
- /** Callback when an upload completes successfully */
722
- onUploadComplete?: (file: FileItem) => void;
723
- /** Callback when an upload fails */
724
- onUploadError?: (file: FileItem, error: string) => void;
725
- /** Callback when a file is removed */
726
- onFileRemoved?: (file: FileItem) => void;
727
- /** Callback when the file list changes */
728
- onFilesChange?: (files: FileItem[]) => void;
729
- /** Form mode: 'create' or 'edit' - affects delete behavior */
730
- mode?: "create" | "edit";
731
- }
732
- /**
733
- * Hook return type
734
- */
735
- interface UseFileUploadReturn {
736
- /** Current file list */
737
- files: FileItem[];
738
- /** Active files (excluding pendingDeletion) */
739
- activeFiles: FileItem[];
740
- /** Count of active files */
741
- activeFileCount: number;
742
- /** Whether uploads are in progress */
743
- isUploading: boolean;
744
- /** Number of pending uploads */
745
- pendingCount: number;
746
- /** Add files (triggers automatic upload) */
747
- addFiles: (files: FileList | File[]) => Promise<void>;
748
- /** Remove a file - returns whether confirmation is needed */
749
- removeFile: (fileId: string) => Promise<{
750
- needsConfirmation: boolean;
751
- isExisting: boolean;
752
- }>;
753
- /** Delete a file immediately from server (for new files or create mode) */
754
- deleteFileImmediately: (fileId: string) => Promise<{
755
- success: boolean;
756
- error?: string;
757
- }>;
758
- /** Restore a file that was marked for deletion */
759
- restoreFile: (fileId: string) => boolean;
760
- /** Clear all files */
761
- clearFiles: () => void;
762
- /** Retry upload for a failed file */
763
- retryUpload: (fileId: string) => Promise<void>;
764
- /** Validate if minimum requirements are met */
765
- isValid: boolean;
766
- /** Validation error message (i18n key) */
767
- validationError: string | null;
768
- /** Validation error i18n key */
769
- validationErrorKey: string | null;
770
- /** Validation error params for i18n interpolation */
771
- validationErrorParams: Record<string, string | number>;
772
- /** Wait for all uploads to complete and return completed file paths */
773
- waitForUploads: () => Promise<string[]>;
774
- /**
775
- * Completed file paths (for saving in form)
776
- * Relative paths with visibility - subscriberKey is added in backend
777
- */
778
- completedFilePaths: string[];
779
- /** Initialize with existing files (for editing) */
780
- initializeFiles: (existingFiles: Array<{
781
- filePath: string;
782
- name: string;
783
- size?: number;
784
- contentType?: string;
785
- }>, baseUrl?: string) => void;
786
- /** Whether the user has interacted with the field */
787
- isTouched: boolean;
788
- /** Mark the field as touched (to show validation errors) */
789
- markAsTouched: () => void;
790
- /** Whether the form has been submitted */
791
- isSubmitted: boolean;
792
- /** Mark the form as submitted (to show all validation errors) */
793
- markAsSubmitted: () => void;
794
- /**
795
- * Get URL for file preview
796
- * - Public: returns publicUrl directly
797
- * - Private: requests signed URL from backend
798
- */
799
- getPreviewUrl: (fileId: string) => Promise<string | null>;
800
- /** List of file IDs pending deletion */
801
- pendingDeletions: string[];
802
- /** Whether there are files pending deletion */
803
- hasPendingDeletions: boolean;
804
- /** Execute all pending deletions (call this on form submit) */
805
- commitDeletions: () => Promise<{
806
- success: boolean;
807
- errors: string[];
808
- }>;
809
- /** Cancel all pending deletions and restore files */
810
- restorePendingDeletions: () => void;
811
- }
849
+
812
850
  /**
813
- * Hook for complete file handling with S3 upload
814
- *
815
- * @example
816
- * ```tsx
817
- * const {
818
- * files,
819
- * addFiles,
820
- * removeFile,
821
- * isUploading,
822
- * isValid,
823
- * completedS3Keys
824
- * } = useFileUpload({
825
- * acceptedTypes: ["image/png", "image/jpeg", "application/pdf"],
826
- * maxFileSize: 5 * 1024 * 1024, // 5MB
827
- * maxFiles: 3,
828
- * minFiles: 1
829
- * });
830
- *
831
- * // In form submit
832
- * const handleSubmit = async () => {
833
- * await waitForUploads(); // Wait for pending uploads
834
- * if (!isValid) return;
835
- *
836
- * await crudify.createItem("documents", {
837
- * files: completedS3Keys
838
- * });
839
- * };
840
- * ```
851
+ * App structure action configuration
841
852
  */
842
- declare const useFileUpload: (options?: UseFileUploadOptions) => UseFileUploadReturn;
843
-
844
- /** App structure action configuration */
845
853
  interface AppStructureAction {
846
854
  key: string;
847
855
  moduleKey?: string;
848
856
  [key: string]: unknown;
849
857
  }
858
+ /**
859
+ * Options for the useCrudifyWithNotifications hook
860
+ */
850
861
  interface CrudifyWithNotificationsOptions {
851
862
  showSuccessNotifications?: boolean;
852
863
  showErrorNotifications?: boolean;
@@ -856,6 +867,29 @@ interface CrudifyWithNotificationsOptions {
856
867
  appStructure?: AppStructureAction[];
857
868
  translateFn?: (key: string, options?: Record<string, unknown>) => string;
858
869
  }
870
+
871
+ /**
872
+ * Notification filtering utilities
873
+ *
874
+ * Determines when and which notifications should be shown
875
+ */
876
+
877
+ /**
878
+ * Determines if a notification should be shown for a given response
879
+ *
880
+ * Returns false for:
881
+ * - Field validation errors (these go to form validation)
882
+ * - ONE_OR_MORE_OPERATIONS_FAILED (generic transaction error)
883
+ * - TOO_MANY_REQUESTS (handled by forms)
884
+ */
885
+ declare function shouldShowNotification(response: CrudifyResponse): boolean;
886
+
887
+ /**
888
+ * Hook that wraps crudify SDK operations with automatic notifications
889
+ *
890
+ * @param options - Configuration options
891
+ * @returns Object with wrapped CRUD operations and utility functions
892
+ */
859
893
  declare const useCrudifyWithNotifications: (options?: CrudifyWithNotificationsOptions) => {
860
894
  createItem: (moduleKey: string, data: object, options?: CrudifyOperationOptions) => Promise<CrudifyResponse>;
861
895
  updateItem: (moduleKey: string, data: object, options?: CrudifyOperationOptions) => Promise<CrudifyResponse>;
@@ -866,7 +900,7 @@ declare const useCrudifyWithNotifications: (options?: CrudifyWithNotificationsOp
866
900
  handleResponse: (response: CrudifyResponse, successMessage?: string) => CrudifyResponse;
867
901
  getErrorMessage: (response: CrudifyResponse) => string;
868
902
  getErrorSeverity: (response: CrudifyResponse) => NotificationSeverity;
869
- shouldShowNotification: (response: CrudifyResponse) => boolean;
903
+ shouldShowNotification: typeof shouldShowNotification;
870
904
  };
871
905
 
872
906
  export { type FileItem as F, type LoginResult as L, type NotificationOptions as N, SessionManager as S, TokenStorage as T, type UseSessionOptions as U, type SessionConfig as a, type TokenData as b, type StorageType as c, type SessionState as d, SessionProvider as e, useSessionContext as f, SessionDebugInfo as g, type SessionProviderProps as h, useUserData as i, type UseUserDataReturn as j, type UseUserDataOptions as k, type UserData as l, useAuth as m, type UseAuthReturn as n, useData as o, type UseDataReturn as p, useUserProfile as q, useFileUpload as r, type UseFileUploadOptions as s, type UseFileUploadReturn as t, useSession as u, type FileStatus as v, useCrudifyWithNotifications as w };
package/dist/index.d.mts CHANGED
@@ -1,15 +1,15 @@
1
1
  import crudify__default from '@nocios/crudify-sdk';
2
2
  export * from '@nocios/crudify-sdk';
3
3
  export { default as crudify } from '@nocios/crudify-sdk';
4
- import { d as CrudifyLoginConfig, l as PasswordRule, E as EvaluatedPasswordRule } from './CrudiaMarkdownField-C54-A_J3.mjs';
5
- export { B as BoxScreenType, a as CrudiaAutoGenerate, i as CrudiaAutoGenerateProps, b as CrudiaFileField, o as CrudiaFileFieldDeletionHandlers, j as CrudiaFileFieldProps, c as CrudiaMarkdownField, k as CrudiaMarkdownFieldProps, C as CrudifyLogin, e as CrudifyLoginProps, f as CrudifyLoginTranslations, D as DEFAULT_PASSWORD_RULES, L as LoginComponent, m as POLICY_ACTIONS, n as PREFERRED_POLICY_ORDER, p as PasswordRuleType, P as Policies, h as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './CrudiaMarkdownField-C54-A_J3.mjs';
4
+ import { d as CrudifyLoginConfig, l as PasswordRule, E as EvaluatedPasswordRule } from './CrudiaMarkdownField-Bxl08sRG.mjs';
5
+ export { B as BoxScreenType, a as CrudiaAutoGenerate, i as CrudiaAutoGenerateProps, b as CrudiaFileField, o as CrudiaFileFieldDeletionHandlers, j as CrudiaFileFieldProps, c as CrudiaMarkdownField, k as CrudiaMarkdownFieldProps, C as CrudifyLogin, e as CrudifyLoginProps, f as CrudifyLoginTranslations, D as DEFAULT_PASSWORD_RULES, L as LoginComponent, m as POLICY_ACTIONS, n as PREFERRED_POLICY_ORDER, p as PasswordRuleType, P as Policies, h as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './CrudiaMarkdownField-Bxl08sRG.mjs';
6
6
  import React, { ReactNode } from 'react';
7
- export { A as ApiError, C as CrudifyApiResponse, d as CrudifyOperationOptions, e as CrudifyRequestOptions, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, g as TransactionInput, f as TransactionOperation, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-B4uXiHF0.mjs';
8
- export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-DY90WVQQ.mjs';
7
+ export { A as ApiError, f as CrudifyApiResponse, e as CrudifyEnvironment, l as CrudifyOperationOptions, m as CrudifyRequestOptions, g as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, i as LoginRequest, L as LoginResponse, j as ResetPasswordRequest, R as ResolvedTenantConfig, T as TenantConfig, a as TenantConfigOptions, o as TransactionInput, n as TransactionOperation, h as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, k as ValidationError, r as resolveTenantConfig, u as useTenantConfig } from './tenantConfig-DqJqQkoR.mjs';
8
+ export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-U--xRr8A.mjs';
9
9
  import * as react_jsx_runtime from 'react/jsx-runtime';
10
10
  import { ThemeOptions } from '@mui/material';
11
11
  export { A as AutoGenerateConfig, G as GlobalNotificationProvider, a as GlobalNotificationProviderProps, N as Notification, b as NotificationSeverity, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate, u as useGlobalNotification } from './GlobalNotificationProvider-Zq18OkpI.mjs';
12
- export { h as CrudifyEnvironment, E as ERROR_CODES, n as ERROR_SEVERITY_MAP, w as ErrorCode, x as ErrorSeverity, y as ErrorTranslationConfig, P as ParsedError, R as ResolvedTenantConfig, T as TenantConfig, b as TenantConfigOptions, v as createErrorTranslator, d as decodeJwtSafely, g as getCurrentUserEmail, m as getErrorMessage, j as handleCrudifyError, i as isTokenExpired, p as parseApiError, l as parseJavaScriptError, k as parseTransactionError, r as resolveTenantConfig, a as secureLocalStorage, s as secureSessionStorage, q as translateError, t as translateErrorCode, o as translateErrorCodes, u as useTenantConfig } from './errorTranslation-DeeDj7Vt.mjs';
12
+ export { E as ERROR_CODES, f as ERROR_SEVERITY_MAP, m as ErrorCode, n as ErrorSeverity, o as ErrorTranslationConfig, P as ParsedError, l as createErrorTranslator, d as decodeJwtSafely, g as getCurrentUserEmail, e as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, c as parseJavaScriptError, b as parseTransactionError, a as secureLocalStorage, s as secureSessionStorage, k as translateError, t as translateErrorCode, j as translateErrorCodes } from './errorTranslation-D-Y7uNN_.mjs';
13
13
  import { ApiResponse, IModule, ModuleCreateInput, ModuleEditInput, ActionListFilters, IAction, ActionCreateInput, ActionEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse, CalculatePermissionsInput, CalculatePermissionsResponse } from '@nocios/crudify-admin-sdk';
14
14
  export { ActionCreateInput, ActionEditInput, ActionListFilters, ApiResponse, IAction, IModule, ModuleCreateInput, ModuleEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse } from '@nocios/crudify-admin-sdk';
15
15
 
@@ -1123,7 +1123,176 @@ declare const CRITICAL_TRANSLATIONS: {
1123
1123
  readonly "users.moduleName": "Usuarios";
1124
1124
  readonly "users.moduleSingular": "Usuario";
1125
1125
  };
1126
- readonly en: {};
1126
+ readonly en: {
1127
+ readonly "base.actions.create": "New";
1128
+ readonly "base.actions.delete": "Delete";
1129
+ readonly "base.actions.read": "View";
1130
+ readonly "base.actions.refresh": "Refresh";
1131
+ readonly "base.actions.update": "Edit";
1132
+ readonly "base.btn.back": "Back";
1133
+ readonly "base.btn.cancel": "Cancel";
1134
+ readonly "base.btn.hidePassword": "Hide password";
1135
+ readonly "base.btn.showPassword": "Show password";
1136
+ readonly "base.errors.errorUnknown": "An unknown error occurred.";
1137
+ readonly "base.fields.actions": "Actions";
1138
+ readonly "base.fields.confirmPassword": "Confirm password";
1139
+ readonly "base.fields.createdAt": "Created at";
1140
+ readonly "base.fields.email": "Email";
1141
+ readonly "base.fields.lastName": "Last name";
1142
+ readonly "base.fields.name": "Name";
1143
+ readonly "base.fields.password": "Password";
1144
+ readonly "base.fields.profile": "Profile";
1145
+ readonly "base.fields.updatedAt": "Updated at";
1146
+ readonly "base.file.allowedTypes": "Allowed types: {{types}}";
1147
+ readonly "base.file.clickToDownload": "Click to download";
1148
+ readonly "base.file.clickToPreview": "Click to preview image";
1149
+ readonly "base.file.confirmDelete.cancel": "Cancel";
1150
+ readonly "base.file.confirmDelete.confirm": "Delete";
1151
+ readonly "base.file.confirmDelete.message": "Are you sure you want to delete this file? This action cannot be undone.";
1152
+ readonly "base.file.confirmDelete.title": "Delete file";
1153
+ readonly "base.file.delete": "Delete";
1154
+ readonly "base.file.deleting": "Deleting...";
1155
+ readonly "base.file.dragOrClick": "Drag files here or click to select";
1156
+ readonly "base.file.dropHere": "Drop file here";
1157
+ readonly "base.file.maxFiles": "Maximum {{count}} files";
1158
+ readonly "base.file.maxSize": "Maximum {{size}} per file";
1159
+ readonly "base.file.noPreview": "No preview";
1160
+ readonly "base.file.pendingDeletion": "Pending deletion";
1161
+ readonly "base.file.privateFile": "Private file";
1162
+ readonly "base.file.restore": "Restore";
1163
+ readonly "base.file.uploading": "Uploading files...";
1164
+ readonly "base.file.validation.filesWithErrors": "Some files have errors";
1165
+ readonly "base.file.validation.maxFilesExceeded": "Maximum {{count}} files allowed";
1166
+ readonly "base.file.validation.minFilesRequired": "At least one file is required";
1167
+ readonly "base.file.validation.minFilesRequiredPlural": "At least {{count}} files are required";
1168
+ readonly "base.lastUpdated": "Last updated at {{formattedLastUpdated}}";
1169
+ readonly "base.loading.configInitial": "Loading initial configuration...";
1170
+ readonly "base.loading.pleaseWait": "Loading, please wait...";
1171
+ readonly "base.loading.starting": "Starting application...";
1172
+ readonly "base.loading.themeSetup": "Generating theme...";
1173
+ readonly "base.loading.validatingSession": "Validating session...";
1174
+ readonly "base.titles.create": "New {{moduleName}}";
1175
+ readonly "base.titles.read": "View {{moduleName}}";
1176
+ readonly "base.titles.update": "Edit {{moduleName}}";
1177
+ readonly "checkCode.codeLabel": "Verification Code";
1178
+ readonly "checkCode.codePlaceholder": "Enter the 6-digit code";
1179
+ readonly "checkCode.codeRequired": "Code is required";
1180
+ readonly "checkCode.emailLabel": "Email";
1181
+ readonly "checkCode.emailPlaceholder": "Enter your email";
1182
+ readonly "checkCode.emailRequired": "Email is required";
1183
+ readonly "checkCode.instructions": "Enter the 6-digit code we sent to your email.";
1184
+ readonly "checkCode.invalidEmail": "Enter a valid email address";
1185
+ readonly "checkCode.resendCodeLink": "Resend code";
1186
+ readonly "checkCode.title": "Verify Code";
1187
+ readonly "checkCode.verifyButton": "Verify Code";
1188
+ readonly "error.app.config": "Configuration Error: {{message}}";
1189
+ readonly "error.app.initialization": "Error during final application initialization.";
1190
+ readonly "error.transaction": "Operation error";
1191
+ readonly "errors.DUPLICATE": "The <b>{{field}}</b> field must be unique.";
1192
+ readonly "errors.FOREIGN_KEY_NOT_FOUND": "The <b>{{field}}</b> field must reference an existing item.";
1193
+ readonly "errors.INVALID_EMAIL": "The <b>{{field}}</b> field must be a valid email address.";
1194
+ readonly "errors.INVALID_OBJECT_ID": "The <b>{{field}}</b> field must be a valid value.";
1195
+ readonly "errors.IN_USE": "The item is in use and cannot be deleted.";
1196
+ readonly "errors.MAX_LENGTH": "The <b>{{field}}</b> field must not exceed <b>{{length}}</b> characters.";
1197
+ readonly "errors.MIN_LENGTH": "The <b>{{field}}</b> field must be at least <b>{{length}}</b> characters.";
1198
+ readonly "errors.MUST_NOT_BE_EMAIL": "The <b>{{field}}</b> field must not be an email.";
1199
+ readonly "errors.NO_PERMISSION": "You don't have permission to perform this action.";
1200
+ readonly "errors.NO_SPACES": "The <b>{{field}}</b> field must not contain spaces.";
1201
+ readonly "errors.ONE_OR_MORE_OPERATIONS_FAILED": "Operation error";
1202
+ readonly "errors.REQUIRED": "The <b>{{field}}</b> field is required.";
1203
+ readonly "errors.TOKEN_HAS_EXPIRED": "Session has expired. Please log in again.";
1204
+ readonly "errors.TOO_MANY_REQUESTS": "Request limit reached. Please try again later.";
1205
+ readonly "errors.UNAUTHORIZED": "You are not authorized to perform this action.";
1206
+ readonly "errors.all_password_fields_required": "All password fields are required";
1207
+ readonly "errors.auth.INVALID_API_KEY": "Invalid API key";
1208
+ readonly "errors.auth.INVALID_CREDENTIALS": "Invalid username and/or password";
1209
+ readonly "errors.auth.NO_PERMISSION": "You don't have sufficient permissions";
1210
+ readonly "errors.auth.SESSION_EXPIRED": "Your session has expired. Please log in again.";
1211
+ readonly "errors.auth.TOO_MANY_REQUESTS": "Too many attempts. Please wait 15 minutes and try again";
1212
+ readonly "errors.auth.UNAUTHORIZED": "You don't have permission to perform this action";
1213
+ readonly "errors.auth.USER_NOT_ACTIVE": "User not active";
1214
+ readonly "errors.auth.USER_NOT_FOUND": "User not found";
1215
+ readonly "errors.data.BAD_REQUEST": "Invalid request";
1216
+ readonly "errors.data.FIELD_ERROR": "Error in submitted data";
1217
+ readonly "errors.data.IN_USE": "The item is in use and cannot be deleted";
1218
+ readonly "errors.data.ITEM_NOT_FOUND": "The requested item was not found";
1219
+ readonly "errors.data.NOT_FOUND": "Not found";
1220
+ readonly "errors.internal_error_changing_password": "Internal error changing password. Please try again";
1221
+ readonly "errors.password_min_length": "Password must be at least 8 characters";
1222
+ readonly "errors.password_mismatch": "Passwords do not match";
1223
+ readonly "errors.password_must_be_different": "New password must be different from current password";
1224
+ readonly "errors.system.DATABASE_CONNECTION_ERROR": "Connection error. Please check your internet connection.";
1225
+ readonly "errors.system.INTERNAL_SERVER_ERROR": "Internal server error. Please try again.";
1226
+ readonly "errors.system.INVALID_CONFIGURATION": "System configuration error";
1227
+ readonly "errors.system.TOO_MANY_REQUESTS": "Too many requests. Please wait a moment and try again";
1228
+ readonly "errors.system.UNKNOWN_OPERATION": "Unrecognized operation";
1229
+ readonly "errors.users_module_not_configured": "Users module not configured";
1230
+ readonly "footer.copyright": "Nocios S.R.L. All rights reserved.";
1231
+ readonly "footer.version": "Version";
1232
+ readonly "forgotPassword.checkEmailInstructions": "Check your inbox for the verification code";
1233
+ readonly "forgotPassword.codeAlreadyExistsMessage": "A code has already been sent and is still valid";
1234
+ readonly "forgotPassword.emailLabel": "Email";
1235
+ readonly "forgotPassword.emailPlaceholder": "Enter your email";
1236
+ readonly "forgotPassword.emailRequired": "Email is required";
1237
+ readonly "forgotPassword.emailSentMessage": "Code sent successfully";
1238
+ readonly "forgotPassword.enterCodeLink": "Enter Code";
1239
+ readonly "forgotPassword.instructions": "Enter your email and we'll send you a code to reset your password.";
1240
+ readonly "forgotPassword.invalidEmail": "Enter a valid email address";
1241
+ readonly "forgotPassword.sendCodeButton": "Send Code";
1242
+ readonly "forgotPassword.title": "Recover Password";
1243
+ readonly "login.alreadyHaveCodeLink": "Already have a code?";
1244
+ readonly "login.forgotPasswordLink": "Forgot your password?";
1245
+ readonly "login.initializationError": "Initialization error";
1246
+ readonly "login.initializing": "Initializing...";
1247
+ readonly "login.loginButton": "Log In";
1248
+ readonly "login.logoAlt": "Logo";
1249
+ readonly "login.noAccountPrompt": "Don't have an account?";
1250
+ readonly "login.notInitialized": "System not initialized";
1251
+ readonly "login.passwordLabel": "Password";
1252
+ readonly "login.passwordPlaceholder": "Enter your password";
1253
+ readonly "login.passwordRequired": "Password is required";
1254
+ readonly "login.signUpLink": "Sign up";
1255
+ readonly "login.usernameOrEmailLabel": "Username or email";
1256
+ readonly "login.usernameOrEmailPlaceholder": "Enter your email";
1257
+ readonly "login.usernameRequired": "Username is required";
1258
+ readonly "passwordRequirements.lowercase": "One lowercase letter";
1259
+ readonly "passwordRequirements.minLength": "Minimum 8 characters";
1260
+ readonly "passwordRequirements.number": "One number";
1261
+ readonly "passwordRequirements.special": "One special character (!@#$%...)";
1262
+ readonly "passwordRequirements.uppercase": "One uppercase letter";
1263
+ readonly "profiles.actions.assignProfiles": "Assign profiles";
1264
+ readonly "profiles.moduleName": "Profiles";
1265
+ readonly "profiles.moduleSingular": "Profile";
1266
+ readonly "publicPolicies.fields.conditions.customEdit": "Custom edit";
1267
+ readonly "resetPassword.codeExpiredOrInvalid": "The code has expired or is invalid";
1268
+ readonly "resetPassword.confirmPasswordLabel": "Confirm Password";
1269
+ readonly "resetPassword.confirmPasswordPlaceholder": "Confirm your new password";
1270
+ readonly "resetPassword.confirmPasswordRequired": "Confirm your password";
1271
+ readonly "resetPassword.goToLoginButton": "Go to Login";
1272
+ readonly "resetPassword.instructions": "Enter your new password.";
1273
+ readonly "resetPassword.invalidCode": "The verification code is invalid. Please check the link or request a new one.";
1274
+ readonly "resetPassword.missingParameters": "Missing required parameters";
1275
+ readonly "resetPassword.newPasswordLabel": "New Password";
1276
+ readonly "resetPassword.newPasswordPlaceholder": "Enter your new password";
1277
+ readonly "resetPassword.newPasswordRequired": "New password is required";
1278
+ readonly "resetPassword.passwordRequirementsNotMet": "Password does not meet all requirements";
1279
+ readonly "resetPassword.passwordTooShort": "Password must be at least 8 characters";
1280
+ readonly "resetPassword.passwordsDoNotMatch": "Passwords do not match";
1281
+ readonly "resetPassword.requestNewCodeButton": "Request New Code";
1282
+ readonly "resetPassword.resetPasswordButton": "Reset Password";
1283
+ readonly "resetPassword.successInstructions": "You can now log in with your new password";
1284
+ readonly "resetPassword.successMessage": "Password reset successfully";
1285
+ readonly "resetPassword.title": "New Password";
1286
+ readonly "resetPassword.validatingCode": "Validating code...";
1287
+ readonly "translations.fields.lang": "Language";
1288
+ readonly "translations.moduleName": "Translations";
1289
+ readonly "translations.moduleSingular": "Translation";
1290
+ readonly "users.fields.currentPassword": "Current password";
1291
+ readonly "users.fields.newPassword": "New Password";
1292
+ readonly "users.fields.repeatNewPassword": "Repeat New Password";
1293
+ readonly "users.moduleName": "Users";
1294
+ readonly "users.moduleSingular": "User";
1295
+ };
1127
1296
  };
1128
1297
  type CriticalTranslationKey = keyof typeof CRITICAL_TRANSLATIONS.es;
1129
1298
  type SupportedLanguage = keyof typeof CRITICAL_TRANSLATIONS;