@nocios/crudify-ui 4.4.32 → 4.4.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.
@@ -463,121 +463,129 @@ interface UseUserProfileReturn {
463
463
  declare const useUserProfile: (options?: UseUserProfileOptions) => UseUserProfileReturn;
464
464
 
465
465
  /**
466
- * Estado de un archivo individual
466
+ * Complete hook for file handling with:
467
+ * - Progressive upload to S3 with pre-signed URLs
468
+ * - Per-file progress tracking
469
+ * - Type and size validation
470
+ * - Soft delete (disableFile)
471
+ * - Multiple file support
472
+ */
473
+ /**
474
+ * Individual file status
467
475
  */
468
476
  type FileStatus = "pending" | "uploading" | "completed" | "error" | "removing";
469
477
  /**
470
- * Representa un archivo en el sistema
478
+ * Represents a file in the system
471
479
  */
472
480
  interface FileItem {
473
- /** ID único del archivo (generado o desde servidor) */
481
+ /** Unique file ID (generated or from server) */
474
482
  id: string;
475
- /** Nombre original del archivo */
483
+ /** Original file name */
476
484
  name: string;
477
- /** Tamaño en bytes */
485
+ /** Size in bytes */
478
486
  size: number;
479
- /** Content type MIME */
487
+ /** MIME content type */
480
488
  contentType: string;
481
- /** Estado actual del archivo */
489
+ /** Current file status */
482
490
  status: FileStatus;
483
- /** Progreso de upload (0-100) */
491
+ /** Upload progress (0-100) */
484
492
  progress: number;
485
493
  /**
486
- * Ruta relativa del archivo (incluye visibility)
487
- * Formato: "public/path/file.ext" o "private/path/file.ext"
494
+ * Relative file path (includes visibility)
495
+ * Format: "public/path/file.ext" or "private/path/file.ext"
488
496
  */
489
497
  filePath?: string;
490
498
  /**
491
- * Visibilidad del archivo
492
- * Extraída del filePath para conveniencia
499
+ * File visibility
500
+ * Extracted from filePath for convenience
493
501
  */
494
502
  visibility?: "public" | "private";
495
- /** URL pública para archivos públicos */
503
+ /** Public URL for public files */
496
504
  publicUrl?: string;
497
- /** URL de preview (para imágenes) */
505
+ /** Preview URL (for images) */
498
506
  previewUrl?: string;
499
- /** Mensaje de error si falló */
507
+ /** Error message if failed */
500
508
  errorMessage?: string;
501
- /** Timestamp de creación */
509
+ /** Creation timestamp */
502
510
  createdAt: number;
503
- /** Archivo original (solo durante upload) */
511
+ /** Original file (only during upload) */
504
512
  file?: File;
505
513
  }
506
514
  /**
507
- * Configuración del hook
515
+ * Hook configuration
508
516
  */
509
517
  interface UseFileUploadOptions {
510
- /** Tipos MIME permitidos (ej: ["image/png", "image/jpeg", "application/pdf"]) */
518
+ /** Allowed MIME types (e.g., ["image/png", "image/jpeg", "application/pdf"]) */
511
519
  acceptedTypes?: string[];
512
- /** Tamaño máximo por archivo en bytes (default: 10MB) */
520
+ /** Maximum file size in bytes (default: 10MB) */
513
521
  maxFileSize?: number;
514
- /** Número máximo de archivos (undefined = sin límite) */
522
+ /** Maximum number of files (undefined = no limit) */
515
523
  maxFiles?: number;
516
- /** Número mínimo de archivos requeridos (default: 0) */
524
+ /** Minimum number of required files (default: 0) */
517
525
  minFiles?: number;
518
526
  /**
519
- * Visibilidad de los archivos subidos
527
+ * Visibility of uploaded files
520
528
  * @default "private"
521
529
  */
522
530
  visibility?: "public" | "private";
523
- /** Callback cuando se completa un upload exitoso */
531
+ /** Callback when an upload completes successfully */
524
532
  onUploadComplete?: (file: FileItem) => void;
525
- /** Callback cuando falla un upload */
533
+ /** Callback when an upload fails */
526
534
  onUploadError?: (file: FileItem, error: string) => void;
527
- /** Callback cuando se elimina un archivo */
535
+ /** Callback when a file is removed */
528
536
  onFileRemoved?: (file: FileItem) => void;
529
- /** Callback cuando cambia la lista de archivos */
537
+ /** Callback when the file list changes */
530
538
  onFilesChange?: (files: FileItem[]) => void;
531
539
  }
532
540
  /**
533
- * Resultado del hook
541
+ * Hook return type
534
542
  */
535
543
  interface UseFileUploadReturn {
536
- /** Lista de archivos actuales */
544
+ /** Current file list */
537
545
  files: FileItem[];
538
- /** Si hay uploads en progreso */
546
+ /** Whether uploads are in progress */
539
547
  isUploading: boolean;
540
- /** Número de uploads pendientes */
548
+ /** Number of pending uploads */
541
549
  pendingCount: number;
542
- /** Agregar archivos (dispara upload automático) */
550
+ /** Add files (triggers automatic upload) */
543
551
  addFiles: (files: FileList | File[]) => Promise<void>;
544
- /** Eliminar un archivo (soft delete en S3) */
552
+ /** Remove a file (soft delete in S3) */
545
553
  removeFile: (fileId: string) => Promise<boolean>;
546
- /** Limpiar todos los archivos */
554
+ /** Clear all files */
547
555
  clearFiles: () => void;
548
- /** Reintentar upload de un archivo fallido */
556
+ /** Retry upload for a failed file */
549
557
  retryUpload: (fileId: string) => Promise<void>;
550
- /** Validar si cumple requisitos mínimos */
558
+ /** Validate if minimum requirements are met */
551
559
  isValid: boolean;
552
- /** Mensaje de error de validación */
560
+ /** Validation error message */
553
561
  validationError: string | null;
554
- /** Esperar a que todos los uploads terminen */
562
+ /** Wait for all uploads to complete */
555
563
  waitForUploads: () => Promise<void>;
556
564
  /**
557
- * Rutas de archivos completados (para guardar en formulario)
558
- * Son rutas relativas con visibility - el subscriberKey se agrega en backend
565
+ * Completed file paths (for saving in form)
566
+ * Relative paths with visibility - subscriberKey is added in backend
559
567
  */
560
568
  completedFilePaths: string[];
561
- /** Inicializar con archivos existentes (para edición) */
569
+ /** Initialize with existing files (for editing) */
562
570
  initializeFiles: (existingFiles: Array<{
563
571
  filePath: string;
564
572
  name: string;
565
573
  size?: number;
566
574
  contentType?: string;
567
575
  }>) => void;
568
- /** Si el usuario ha interactuado con el campo */
576
+ /** Whether the user has interacted with the field */
569
577
  isTouched: boolean;
570
- /** Marcar el campo como tocado (para mostrar errores de validación) */
578
+ /** Mark the field as touched (to show validation errors) */
571
579
  markAsTouched: () => void;
572
580
  /**
573
- * Obtener URL para preview de archivo
574
- * - Públicos: retorna publicUrl directamente
575
- * - Privados: solicita signed URL al backend
581
+ * Get URL for file preview
582
+ * - Public: returns publicUrl directly
583
+ * - Private: requests signed URL from backend
576
584
  */
577
585
  getPreviewUrl: (fileId: string) => Promise<string | null>;
578
586
  }
579
587
  /**
580
- * Hook para manejo completo de archivos con upload a S3
588
+ * Hook for complete file handling with S3 upload
581
589
  *
582
590
  * @example
583
591
  * ```tsx
@@ -595,9 +603,9 @@ interface UseFileUploadReturn {
595
603
  * minFiles: 1
596
604
  * });
597
605
  *
598
- * // En el submit del formulario
606
+ * // In form submit
599
607
  * const handleSubmit = async () => {
600
- * await waitForUploads(); // Esperar uploads pendientes
608
+ * await waitForUploads(); // Wait for pending uploads
601
609
  * if (!isValid) return;
602
610
  *
603
611
  * await crudify.createItem("documents", {
package/dist/index.d.mts CHANGED
@@ -1,12 +1,12 @@
1
1
  import crudify__default from '@nocios/crudify-browser';
2
2
  export * from '@nocios/crudify-browser';
3
3
  export { default as crudify } from '@nocios/crudify-browser';
4
- import { c as CrudifyLoginConfig } from './CrudiaFileField-D5zDp_Y1.mjs';
5
- export { B as BoxScreenType, a as CrudiaAutoGenerate, h as CrudiaAutoGenerateProps, b as CrudiaFileField, i as CrudiaFileFieldProps, C as CrudifyLogin, d as CrudifyLoginProps, e as CrudifyLoginTranslations, L as LoginComponent, j as POLICY_ACTIONS, k as PREFERRED_POLICY_ORDER, P as Policies, g as PolicyAction, S as SessionStatus, f as UserLoginData, U as UserProfileDisplay } from './CrudiaFileField-D5zDp_Y1.mjs';
4
+ import { c as CrudifyLoginConfig } from './CrudiaFileField-8ArxOo5y.mjs';
5
+ export { B as BoxScreenType, a as CrudiaAutoGenerate, h as CrudiaAutoGenerateProps, b as CrudiaFileField, i as CrudiaFileFieldProps, C as CrudifyLogin, d as CrudifyLoginProps, e as CrudifyLoginTranslations, L as LoginComponent, j as POLICY_ACTIONS, k as PREFERRED_POLICY_ORDER, P as Policies, g as PolicyAction, S as SessionStatus, f as UserLoginData, U as UserProfileDisplay } from './CrudiaFileField-8ArxOo5y.mjs';
6
6
  import React, { ReactNode } from 'react';
7
7
  export { A as ApiError, C as CrudifyApiResponse, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-Djqihi4n.mjs';
8
- import { U as UseSessionOptions, T as TokenData, L as LoginResult } from './index-wi46iw-x.mjs';
9
- export { F as FileItem, q as FileStatus, a as SessionConfig, S as SessionManager, d as SessionState, c as StorageType, b as TokenStorage, j as UseAuthReturn, l as UseDataReturn, o as UseFileUploadOptions, p as UseFileUploadReturn, g as UseUserDataOptions, f as UseUserDataReturn, h as UserData, i as useAuth, r as useCrudifyWithNotifications, k as useData, n as useFileUpload, u as useSession, e as useUserData, m as useUserProfile } from './index-wi46iw-x.mjs';
8
+ import { U as UseSessionOptions, T as TokenData, L as LoginResult } from './index-CQnAzvOE.mjs';
9
+ export { F as FileItem, q as FileStatus, a as SessionConfig, S as SessionManager, d as SessionState, c as StorageType, b as TokenStorage, j as UseAuthReturn, l as UseDataReturn, o as UseFileUploadOptions, p as UseFileUploadReturn, g as UseUserDataOptions, f as UseUserDataReturn, h as UserData, i as useAuth, r as useCrudifyWithNotifications, k as useData, n as useFileUpload, u as useSession, e as useUserData, m as useUserProfile } from './index-CQnAzvOE.mjs';
10
10
  import * as react_jsx_runtime from 'react/jsx-runtime';
11
11
  import { ThemeOptions } from '@mui/material';
12
12
  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';
package/dist/index.d.ts CHANGED
@@ -1,12 +1,12 @@
1
1
  import crudify__default from '@nocios/crudify-browser';
2
2
  export * from '@nocios/crudify-browser';
3
3
  export { default as crudify } from '@nocios/crudify-browser';
4
- import { c as CrudifyLoginConfig } from './CrudiaFileField-CXyBfgOd.js';
5
- export { B as BoxScreenType, a as CrudiaAutoGenerate, h as CrudiaAutoGenerateProps, b as CrudiaFileField, i as CrudiaFileFieldProps, C as CrudifyLogin, d as CrudifyLoginProps, e as CrudifyLoginTranslations, L as LoginComponent, j as POLICY_ACTIONS, k as PREFERRED_POLICY_ORDER, P as Policies, g as PolicyAction, S as SessionStatus, f as UserLoginData, U as UserProfileDisplay } from './CrudiaFileField-CXyBfgOd.js';
4
+ import { c as CrudifyLoginConfig } from './CrudiaFileField-DA-kEoTA.js';
5
+ export { B as BoxScreenType, a as CrudiaAutoGenerate, h as CrudiaAutoGenerateProps, b as CrudiaFileField, i as CrudiaFileFieldProps, C as CrudifyLogin, d as CrudifyLoginProps, e as CrudifyLoginTranslations, L as LoginComponent, j as POLICY_ACTIONS, k as PREFERRED_POLICY_ORDER, P as Policies, g as PolicyAction, S as SessionStatus, f as UserLoginData, U as UserProfileDisplay } from './CrudiaFileField-DA-kEoTA.js';
6
6
  import React, { ReactNode } from 'react';
7
7
  export { A as ApiError, C as CrudifyApiResponse, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-Djqihi4n.js';
8
- import { U as UseSessionOptions, T as TokenData, L as LoginResult } from './index-BicpdTC_.js';
9
- export { F as FileItem, q as FileStatus, a as SessionConfig, S as SessionManager, d as SessionState, c as StorageType, b as TokenStorage, j as UseAuthReturn, l as UseDataReturn, o as UseFileUploadOptions, p as UseFileUploadReturn, g as UseUserDataOptions, f as UseUserDataReturn, h as UserData, i as useAuth, r as useCrudifyWithNotifications, k as useData, n as useFileUpload, u as useSession, e as useUserData, m as useUserProfile } from './index-BicpdTC_.js';
8
+ import { U as UseSessionOptions, T as TokenData, L as LoginResult } from './index-BVT7flO5.js';
9
+ export { F as FileItem, q as FileStatus, a as SessionConfig, S as SessionManager, d as SessionState, c as StorageType, b as TokenStorage, j as UseAuthReturn, l as UseDataReturn, o as UseFileUploadOptions, p as UseFileUploadReturn, g as UseUserDataOptions, f as UseUserDataReturn, h as UserData, i as useAuth, r as useCrudifyWithNotifications, k as useData, n as useFileUpload, u as useSession, e as useUserData, m as useUserProfile } from './index-BVT7flO5.js';
10
10
  import * as react_jsx_runtime from 'react/jsx-runtime';
11
11
  import { ThemeOptions } from '@mui/material';
12
12
  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.js';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkVHWM5MV6js = require('./chunk-VHWM5MV6.js');var _chunk5T4X67GWjs = require('./chunk-5T4X67GW.js');var _chunkWIWNROEAjs = require('./chunk-WIWNROEA.js');var _chunkNNY4A73Vjs = require('./chunk-NNY4A73V.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkFC7HOMNQjs = require('./chunk-FC7HOMNQ.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _react = require('react');var _material = require('@mui/material');var _jsxruntime = require('react/jsx-runtime');var De=(e={})=>{try{let r=_chunkFC7HOMNQjs.a.call(void 0, "theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){console.warn("Error parsing theme from cookie:",r)}return e};function Ge({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=_react.useMemo.call(void 0, ()=>{let s=De(r);return _material.createTheme.call(void 0, s)},[r]);return _jsxruntime.jsxs.call(void 0, _material.ThemeProvider,{theme:t,children:[!o&&_jsxruntime.jsx.call(void 0, _material.CssBaseline,{}),e]})}var _reactrouterdom = require('react-router-dom');var _e={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Be=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkXHVF2GVHjs = require('./chunk-XHVF2GVH.js');var _chunkJ4K6MZHYjs = require('./chunk-J4K6MZHY.js');var _chunkPDFLD5FFjs = require('./chunk-PDFLD5FF.js');var _chunkNNY4A73Vjs = require('./chunk-NNY4A73V.js');var _chunkYIIUEOXCjs = require('./chunk-YIIUEOXC.js');var _chunkFC7HOMNQjs = require('./chunk-FC7HOMNQ.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _react = require('react');var _material = require('@mui/material');var _jsxruntime = require('react/jsx-runtime');var De=(e={})=>{try{let r=_chunkFC7HOMNQjs.a.call(void 0, "theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){console.warn("Error parsing theme from cookie:",r)}return e};function Ge({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=_react.useMemo.call(void 0, ()=>{let s=De(r);return _material.createTheme.call(void 0, s)},[r]);return _jsxruntime.jsxs.call(void 0, _material.ThemeProvider,{theme:t,children:[!o&&_jsxruntime.jsx.call(void 0, _material.CssBaseline,{}),e]})}var _reactrouterdom = require('react-router-dom');var _e={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Be=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function S({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, Be,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:_e}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var qe=/^[a-zA-Z0-9\-_./\?=&%#]+$/,We=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],C= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return console.warn("\u{1F6A8} Open redirect blocked (relative path):",e),r;if(!qe.test(o))return console.warn("\u{1F6A8} Open redirect blocked (invalid characters):",e),r;let t=o.toLowerCase();for(let a of We)if(a.test(t))return console.warn("\u{1F6A8} Open redirect blocked (dangerous pattern):",e),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return console.warn("\u{1F6A8} Open redirect blocked (suspicious path part):",a),r;return o},v= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return C(s,r)}catch(o){return console.warn("\u{1F6A8} Error parsing redirect parameter:",o),r}};function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:p,error:g}=_chunkWIWNROEAjs.j.call(void 0, ),l=_reactrouterdom.useLocation.call(void 0, );if(!a||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, S,{stage:"validating-session"})});let d=t&&_optionalChain([p, 'optionalAccess', _2 => _2.accessToken])&&p.accessToken.length>0;if(g||!t||!d){p&&(!p.accessToken||p.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let y=l.pathname+l.search,A=C(y),x=encodeURIComponent(A);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${x}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function w({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunkWIWNROEAjs.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let s=new URLSearchParams(t.search),a=v(s,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:a,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var N=_react.createContext.call(void 0, void 0),rr= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,p]=_react.useState.call(void 0, !1),[g,l]=_react.useState.call(void 0, !1),[d,y]=_react.useState.call(void 0, null),A=_react.useRef.call(void 0, !1),x=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{A.current||(_chunkWIWNROEAjs.o.registerHighPriorityInitializer(),A.current=!0),x.current||(x.current=!0,(async()=>{l(!0),y(null);try{let c=_chunkFC7HOMNQjs.b.call(void 0, {publicApiKey:_optionalChain([e, 'optionalAccess', _3 => _3.publicApiKey]),env:_optionalChain([e, 'optionalAccess', _4 => _4.env]),enableDebug:_optionalChain([e, 'optionalAccess', _5 => _5.enableLogging])});if(!c.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");await _chunkWIWNROEAjs.o.initialize({priority:"HIGH",publicApiKey:c.publicApiKey,env:c.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),p(!0),l(!1),t&&t()}catch(c){let z=c instanceof Error?c:new Error(String(c));y(z),l(!1),s&&s(z)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,s]);let G={isInitialized:a,isInitializing:g,error:d};return g&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(d&&console.error("[CrudifyInitializer] Initialization failed:",d),_jsxruntime.jsx.call(void 0, N.Provider,{value:G,children:r}))},or= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, N);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var D=!1,m=null;async function ir(){let r=_chunkWIWNROEAjs.e.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunkWIWNROEAjs.a.waitForCredentials()}async function nr(){if(!D)return m||(m=(async()=>{try{let e=_chunkWIWNROEAjs.e.getInstance(),{apiUrl:r,apiKey:o}=await ir();_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>{let t=e.getTokenInfo();return _optionalChain([t, 'optionalAccess', _12 => _12.crudifyTokens, 'optionalAccess', _13 => _13.accessToken])?{Authorization:`Bearer ${t.crudifyTokens.accessToken}`}:{}}}),D=!0}catch(e){throw m=null,console.error("[crudifyAdminWrapper] Initialization failed:",e),e}})(),m)}async function n(e){try{await nr();let r=await e();return!r.success&&_optionalChain([r, 'access', _14 => _14.errors, 'optionalAccess', _15 => _15.includes, 'call', _16 => _16("401")])?await _chunkWIWNROEAjs.e.getInstance().refreshTokens()?await e():(console.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),r):r}catch(r){return console.error("[crudifyAdmin] Operation error:",r),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var sr={listModules:()=>n(()=>_crudifyadmin2.default.listModules()),getModule:e=>n(()=>_crudifyadmin2.default.getModule(e)),createModule:e=>n(()=>_crudifyadmin2.default.createModule(e)),editModule:(e,r)=>n(()=>_crudifyadmin2.default.editModule(e,r)),deleteModule:e=>n(()=>_crudifyadmin2.default.deleteModule(e)),activateModule:e=>n(()=>_crudifyadmin2.default.activateModule(e)),deactivateModule:e=>n(()=>_crudifyadmin2.default.deactivateModule(e)),getModuleVersions:e=>n(()=>_crudifyadmin2.default.getModuleVersions(e)),listActions:e=>n(()=>_crudifyadmin2.default.listActions(e)),getAction:e=>n(()=>_crudifyadmin2.default.getAction(e)),createAction:e=>n(()=>_crudifyadmin2.default.createAction(e)),editAction:(e,r)=>n(()=>_crudifyadmin2.default.editAction(e,r)),deleteAction:e=>n(()=>_crudifyadmin2.default.deleteAction(e)),activateAction:e=>n(()=>_crudifyadmin2.default.activateAction(e)),deactivateAction:e=>n(()=>_crudifyadmin2.default.deactivateAction(e)),getActionVersions:e=>n(()=>_crudifyadmin2.default.getActionVersions(e)),getActionsByProfile:e=>n(()=>_crudifyadmin2.default.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>_crudifyadmin2.default.updateActionsProfiles(e))};exports.AuthRoute = w; exports.CRITICAL_TRANSLATIONS = _chunkVHWM5MV6js.a; exports.CrudiaAutoGenerate = _chunkVHWM5MV6js.o; exports.CrudiaFileField = _chunkVHWM5MV6js.p; exports.CrudifyInitializationManager = _chunkWIWNROEAjs.n; exports.CrudifyInitializer = rr; exports.CrudifyLogin = _chunkVHWM5MV6js.h; exports.CrudifyProvider = _chunkWIWNROEAjs.b; exports.CrudifyThemeProvider = Ge; exports.ERROR_CODES = _chunkYIIUEOXCjs.a; exports.ERROR_SEVERITY_MAP = _chunkYIIUEOXCjs.b; exports.GlobalNotificationProvider = _chunkWIWNROEAjs.g; exports.LoginComponent = _chunkVHWM5MV6js.m; exports.POLICY_ACTIONS = _chunkVHWM5MV6js.j; exports.PREFERRED_POLICY_ORDER = _chunkVHWM5MV6js.k; exports.Policies = _chunkVHWM5MV6js.l; exports.ProtectedRoute = U; exports.SessionDebugInfo = _chunkWIWNROEAjs.k; exports.SessionLoadingScreen = S; exports.SessionManager = _chunkWIWNROEAjs.e; exports.SessionProvider = _chunkWIWNROEAjs.i; exports.SessionStatus = _chunkVHWM5MV6js.n; exports.TokenStorage = _chunkWIWNROEAjs.d; exports.TranslationService = _chunkVHWM5MV6js.d; exports.TranslationsProvider = _chunkVHWM5MV6js.f; exports.UserProfileDisplay = _chunkVHWM5MV6js.i; exports.createErrorTranslator = _chunkFC7HOMNQjs.g; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = sr; exports.crudifyInitManager = _chunkWIWNROEAjs.o; exports.decodeJwtSafely = _chunkFC7HOMNQjs.j; exports.extractSafeRedirectFromUrl = v; exports.getCookie = _chunkFC7HOMNQjs.a; exports.getCriticalLanguages = _chunkVHWM5MV6js.b; exports.getCriticalTranslations = _chunkVHWM5MV6js.c; exports.getCurrentUserEmail = _chunkFC7HOMNQjs.k; exports.getErrorMessage = _chunkYIIUEOXCjs.e; exports.handleCrudifyError = _chunkYIIUEOXCjs.g; exports.isTokenExpired = _chunkFC7HOMNQjs.l; exports.parseApiError = _chunkYIIUEOXCjs.c; exports.parseJavaScriptError = _chunkYIIUEOXCjs.f; exports.parseTransactionError = _chunkYIIUEOXCjs.d; exports.secureLocalStorage = _chunkNNY4A73Vjs.b; exports.secureSessionStorage = _chunkNNY4A73Vjs.a; exports.translateError = _chunkFC7HOMNQjs.f; exports.translateErrorCode = _chunkFC7HOMNQjs.d; exports.translateErrorCodes = _chunkFC7HOMNQjs.e; exports.translationService = _chunkVHWM5MV6js.e; exports.useAuth = _chunk5T4X67GWjs.b; exports.useAutoGenerate = _chunkWIWNROEAjs.m; exports.useCrudify = _chunkWIWNROEAjs.c; exports.useCrudifyInitializer = or; exports.useCrudifyWithNotifications = _chunk5T4X67GWjs.d; exports.useData = _chunk5T4X67GWjs.c; exports.useFileUpload = _chunkWIWNROEAjs.p; exports.useGlobalNotification = _chunkWIWNROEAjs.h; exports.useSession = _chunkWIWNROEAjs.f; exports.useSessionContext = _chunkWIWNROEAjs.j; exports.useTranslations = _chunkVHWM5MV6js.g; exports.useUserData = _chunk5T4X67GWjs.a; exports.useUserProfile = _chunkWIWNROEAjs.l; exports.validateInternalRedirect = C;
6
+ `});function S({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, Be,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:_e}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var qe=/^[a-zA-Z0-9\-_./\?=&%#]+$/,We=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],C= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return console.warn("\u{1F6A8} Open redirect blocked (relative path):",e),r;if(!qe.test(o))return console.warn("\u{1F6A8} Open redirect blocked (invalid characters):",e),r;let t=o.toLowerCase();for(let a of We)if(a.test(t))return console.warn("\u{1F6A8} Open redirect blocked (dangerous pattern):",e),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return console.warn("\u{1F6A8} Open redirect blocked (suspicious path part):",a),r;return o},v= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return C(s,r)}catch(o){return console.warn("\u{1F6A8} Error parsing redirect parameter:",o),r}};function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:p,error:g}=_chunkPDFLD5FFjs.j.call(void 0, ),l=_reactrouterdom.useLocation.call(void 0, );if(!a||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, S,{stage:"validating-session"})});let d=t&&_optionalChain([p, 'optionalAccess', _2 => _2.accessToken])&&p.accessToken.length>0;if(g||!t||!d){p&&(!p.accessToken||p.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let y=l.pathname+l.search,A=C(y),x=encodeURIComponent(A);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${x}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function w({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunkPDFLD5FFjs.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let s=new URLSearchParams(t.search),a=v(s,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:a,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var N=_react.createContext.call(void 0, void 0),rr= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,p]=_react.useState.call(void 0, !1),[g,l]=_react.useState.call(void 0, !1),[d,y]=_react.useState.call(void 0, null),A=_react.useRef.call(void 0, !1),x=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{A.current||(_chunkPDFLD5FFjs.o.registerHighPriorityInitializer(),A.current=!0),x.current||(x.current=!0,(async()=>{l(!0),y(null);try{let c=_chunkFC7HOMNQjs.b.call(void 0, {publicApiKey:_optionalChain([e, 'optionalAccess', _3 => _3.publicApiKey]),env:_optionalChain([e, 'optionalAccess', _4 => _4.env]),enableDebug:_optionalChain([e, 'optionalAccess', _5 => _5.enableLogging])});if(!c.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");await _chunkPDFLD5FFjs.o.initialize({priority:"HIGH",publicApiKey:c.publicApiKey,env:c.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),p(!0),l(!1),t&&t()}catch(c){let z=c instanceof Error?c:new Error(String(c));y(z),l(!1),s&&s(z)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,s]);let G={isInitialized:a,isInitializing:g,error:d};return g&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(d&&console.error("[CrudifyInitializer] Initialization failed:",d),_jsxruntime.jsx.call(void 0, N.Provider,{value:G,children:r}))},or= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, N);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var D=!1,m=null;async function ir(){let r=_chunkPDFLD5FFjs.e.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunkPDFLD5FFjs.a.waitForCredentials()}async function nr(){if(!D)return m||(m=(async()=>{try{let e=_chunkPDFLD5FFjs.e.getInstance(),{apiUrl:r,apiKey:o}=await ir();_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>{let t=e.getTokenInfo();return _optionalChain([t, 'optionalAccess', _12 => _12.crudifyTokens, 'optionalAccess', _13 => _13.accessToken])?{Authorization:`Bearer ${t.crudifyTokens.accessToken}`}:{}}}),D=!0}catch(e){throw m=null,console.error("[crudifyAdminWrapper] Initialization failed:",e),e}})(),m)}async function n(e){try{await nr();let r=await e();return!r.success&&_optionalChain([r, 'access', _14 => _14.errors, 'optionalAccess', _15 => _15.includes, 'call', _16 => _16("401")])?await _chunkPDFLD5FFjs.e.getInstance().refreshTokens()?await e():(console.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),r):r}catch(r){return console.error("[crudifyAdmin] Operation error:",r),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var sr={listModules:()=>n(()=>_crudifyadmin2.default.listModules()),getModule:e=>n(()=>_crudifyadmin2.default.getModule(e)),createModule:e=>n(()=>_crudifyadmin2.default.createModule(e)),editModule:(e,r)=>n(()=>_crudifyadmin2.default.editModule(e,r)),deleteModule:e=>n(()=>_crudifyadmin2.default.deleteModule(e)),activateModule:e=>n(()=>_crudifyadmin2.default.activateModule(e)),deactivateModule:e=>n(()=>_crudifyadmin2.default.deactivateModule(e)),getModuleVersions:e=>n(()=>_crudifyadmin2.default.getModuleVersions(e)),listActions:e=>n(()=>_crudifyadmin2.default.listActions(e)),getAction:e=>n(()=>_crudifyadmin2.default.getAction(e)),createAction:e=>n(()=>_crudifyadmin2.default.createAction(e)),editAction:(e,r)=>n(()=>_crudifyadmin2.default.editAction(e,r)),deleteAction:e=>n(()=>_crudifyadmin2.default.deleteAction(e)),activateAction:e=>n(()=>_crudifyadmin2.default.activateAction(e)),deactivateAction:e=>n(()=>_crudifyadmin2.default.deactivateAction(e)),getActionVersions:e=>n(()=>_crudifyadmin2.default.getActionVersions(e)),getActionsByProfile:e=>n(()=>_crudifyadmin2.default.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>_crudifyadmin2.default.updateActionsProfiles(e))};exports.AuthRoute = w; exports.CRITICAL_TRANSLATIONS = _chunkXHVF2GVHjs.a; exports.CrudiaAutoGenerate = _chunkXHVF2GVHjs.o; exports.CrudiaFileField = _chunkXHVF2GVHjs.p; exports.CrudifyInitializationManager = _chunkPDFLD5FFjs.n; exports.CrudifyInitializer = rr; exports.CrudifyLogin = _chunkXHVF2GVHjs.h; exports.CrudifyProvider = _chunkPDFLD5FFjs.b; exports.CrudifyThemeProvider = Ge; exports.ERROR_CODES = _chunkYIIUEOXCjs.a; exports.ERROR_SEVERITY_MAP = _chunkYIIUEOXCjs.b; exports.GlobalNotificationProvider = _chunkPDFLD5FFjs.g; exports.LoginComponent = _chunkXHVF2GVHjs.m; exports.POLICY_ACTIONS = _chunkXHVF2GVHjs.j; exports.PREFERRED_POLICY_ORDER = _chunkXHVF2GVHjs.k; exports.Policies = _chunkXHVF2GVHjs.l; exports.ProtectedRoute = U; exports.SessionDebugInfo = _chunkPDFLD5FFjs.k; exports.SessionLoadingScreen = S; exports.SessionManager = _chunkPDFLD5FFjs.e; exports.SessionProvider = _chunkPDFLD5FFjs.i; exports.SessionStatus = _chunkXHVF2GVHjs.n; exports.TokenStorage = _chunkPDFLD5FFjs.d; exports.TranslationService = _chunkXHVF2GVHjs.d; exports.TranslationsProvider = _chunkXHVF2GVHjs.f; exports.UserProfileDisplay = _chunkXHVF2GVHjs.i; exports.createErrorTranslator = _chunkFC7HOMNQjs.g; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = sr; exports.crudifyInitManager = _chunkPDFLD5FFjs.o; exports.decodeJwtSafely = _chunkFC7HOMNQjs.j; exports.extractSafeRedirectFromUrl = v; exports.getCookie = _chunkFC7HOMNQjs.a; exports.getCriticalLanguages = _chunkXHVF2GVHjs.b; exports.getCriticalTranslations = _chunkXHVF2GVHjs.c; exports.getCurrentUserEmail = _chunkFC7HOMNQjs.k; exports.getErrorMessage = _chunkYIIUEOXCjs.e; exports.handleCrudifyError = _chunkYIIUEOXCjs.g; exports.isTokenExpired = _chunkFC7HOMNQjs.l; exports.parseApiError = _chunkYIIUEOXCjs.c; exports.parseJavaScriptError = _chunkYIIUEOXCjs.f; exports.parseTransactionError = _chunkYIIUEOXCjs.d; exports.secureLocalStorage = _chunkNNY4A73Vjs.b; exports.secureSessionStorage = _chunkNNY4A73Vjs.a; exports.translateError = _chunkFC7HOMNQjs.f; exports.translateErrorCode = _chunkFC7HOMNQjs.d; exports.translateErrorCodes = _chunkFC7HOMNQjs.e; exports.translationService = _chunkXHVF2GVHjs.e; exports.useAuth = _chunkJ4K6MZHYjs.b; exports.useAutoGenerate = _chunkPDFLD5FFjs.m; exports.useCrudify = _chunkPDFLD5FFjs.c; exports.useCrudifyInitializer = or; exports.useCrudifyWithNotifications = _chunkJ4K6MZHYjs.d; exports.useData = _chunkJ4K6MZHYjs.c; exports.useFileUpload = _chunkPDFLD5FFjs.p; exports.useGlobalNotification = _chunkPDFLD5FFjs.h; exports.useSession = _chunkPDFLD5FFjs.f; exports.useSessionContext = _chunkPDFLD5FFjs.j; exports.useTranslations = _chunkXHVF2GVHjs.g; exports.useUserData = _chunkJ4K6MZHYjs.a; exports.useUserProfile = _chunkPDFLD5FFjs.l; exports.validateInternalRedirect = C;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{a as K,b as V,c as _,d as B,e as H,f as q,g as W,h as ge,i as Ae,j as xe,k as Re,l as Pe,m as Ce,n as Ie,o as Se,p as ze}from"./chunk-SOGHYUM2.mjs";import{a as Ee,b as Me,c as be,d as ke}from"./chunk-3OZPBGVW.mjs";import{a as M,b as J,c as $,d as Y,e as u,f as ee,g as ie,h as ne,i as se,j as f,k as ae,l as ye,m as he,n as ve,o as R,p as Te}from"./chunk-R4PHVWCE.mjs";import{a as Le,b as Ue}from"./chunk-T2CPA46I.mjs";import{a as pe,b as ce,c as le,d as de,e as ue,f as fe,g as me}from"./chunk-BJ6PIVZR.mjs";import{a as h,b as E,d as Z,e as Q,f as X,g as j,j as re,k as oe,l as te}from"./chunk-6GPSBDW6.mjs";import{default as qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as we}from"react";import{ThemeProvider as Oe,createTheme as Fe,CssBaseline as Ne}from"@mui/material";import{jsx as Ke,jsxs as Ve}from"react/jsx-runtime";var De=(e={})=>{try{let r=h("theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){console.warn("Error parsing theme from cookie:",r)}return e};function Ge({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=we(()=>{let s=De(r);return Fe(s)},[r]);return Ve(Oe,{theme:t,children:[!o&&Ke(Ne,{}),e]})}import{Navigate as Je,useLocation as $e}from"react-router-dom";import{Fragment as He,jsx as P,jsxs as b}from"react/jsx-runtime";var _e={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Be=()=>P("style",{children:`
1
+ import{a as K,b as V,c as _,d as B,e as H,f as q,g as W,h as ge,i as Ae,j as xe,k as Re,l as Pe,m as Ce,n as Ie,o as Se,p as ze}from"./chunk-IU2LK2NF.mjs";import{a as Ee,b as Me,c as be,d as ke}from"./chunk-GWQVH4G4.mjs";import{a as M,b as J,c as $,d as Y,e as u,f as ee,g as ie,h as ne,i as se,j as f,k as ae,l as ye,m as he,n as ve,o as R,p as Te}from"./chunk-YRS5XYAB.mjs";import{a as Le,b as Ue}from"./chunk-T2CPA46I.mjs";import{a as pe,b as ce,c as le,d as de,e as ue,f as fe,g as me}from"./chunk-BJ6PIVZR.mjs";import{a as h,b as E,d as Z,e as Q,f as X,g as j,j as re,k as oe,l as te}from"./chunk-6GPSBDW6.mjs";import{default as qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as we}from"react";import{ThemeProvider as Oe,createTheme as Fe,CssBaseline as Ne}from"@mui/material";import{jsx as Ke,jsxs as Ve}from"react/jsx-runtime";var De=(e={})=>{try{let r=h("theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){console.warn("Error parsing theme from cookie:",r)}return e};function Ge({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=we(()=>{let s=De(r);return Fe(s)},[r]);return Ve(Oe,{theme:t,children:[!o&&Ke(Ne,{}),e]})}import{Navigate as Je,useLocation as $e}from"react-router-dom";import{Fragment as He,jsx as P,jsxs as b}from"react/jsx-runtime";var _e={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Be=()=>P("style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocios/crudify-ui",
3
- "version": "4.4.32",
3
+ "version": "4.4.36",
4
4
  "description": "Biblioteca de componentes UI para Crudify",
5
5
  "author": "Nocios",
6
6
  "license": "MIT",