neogestify-ui-components 2.1.0 → 2.2.2

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 (36) hide show
  1. package/README.md +46 -1
  2. package/dist/components/ElementLibraryBuilder/index.d.mts +5 -0
  3. package/dist/components/ElementLibraryBuilder/index.d.ts +5 -0
  4. package/dist/components/ElementLibraryBuilder/index.js +689 -0
  5. package/dist/components/ElementLibraryBuilder/index.js.map +1 -0
  6. package/dist/components/ElementLibraryBuilder/index.mjs +687 -0
  7. package/dist/components/ElementLibraryBuilder/index.mjs.map +1 -0
  8. package/dist/components/VenueMapEditor/index.d.mts +18 -2
  9. package/dist/components/VenueMapEditor/index.d.ts +18 -2
  10. package/dist/components/VenueMapEditor/index.js +75 -3
  11. package/dist/components/VenueMapEditor/index.js.map +1 -1
  12. package/dist/components/VenueMapEditor/index.mjs +75 -4
  13. package/dist/components/VenueMapEditor/index.mjs.map +1 -1
  14. package/dist/components/html/index.d.mts +37 -4
  15. package/dist/components/html/index.d.ts +37 -4
  16. package/dist/components/html/index.js +135 -12
  17. package/dist/components/html/index.js.map +1 -1
  18. package/dist/components/html/index.mjs +135 -12
  19. package/dist/components/html/index.mjs.map +1 -1
  20. package/dist/index.d.mts +2 -1
  21. package/dist/index.d.ts +2 -1
  22. package/dist/index.js +603 -15
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.mjs +602 -16
  25. package/dist/index.mjs.map +1 -1
  26. package/package.json +1 -1
  27. package/src/components/ElementLibraryBuilder/builder.tsx +400 -0
  28. package/src/components/ElementLibraryBuilder/index.ts +1 -0
  29. package/src/components/VenueMapEditor/components/ElementNode.tsx +22 -0
  30. package/src/components/VenueMapEditor/components/PropertiesPanel.tsx +17 -4
  31. package/src/components/VenueMapEditor/components/Toolbar.tsx +14 -4
  32. package/src/components/VenueMapEditor/index.ts +2 -0
  33. package/src/components/VenueMapEditor/types.ts +11 -1
  34. package/src/components/VenueMapEditor/utils/svgParser.ts +33 -0
  35. package/src/components/html/Table.tsx +205 -38
  36. package/src/index.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/icons/icons.tsx","../../../src/components/html/Button.tsx","../../../src/components/html/Input.tsx","../../../src/components/html/TextArea.tsx","../../../src/components/html/Form.tsx","../../../src/components/html/Select.tsx","../../../src/components/html/Table.tsx","../../../src/components/html/Modal.tsx","../../../src/components/html/Loading.tsx"],"names":["jsxs","jsx","Fragment","forwardRef","useState","useEffect","useImperativeHandle"],"mappings":"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","file":"index.js","sourcesContent":["import type { Props } from \"../../types/types\";\n\n// Spinner de carga animado\nexport function SpinnerIcon({ className = \"\" }: { className?: string }) {\n return (\n <svg className={`animate-spin h-8 w-8 text-indigo-600 mx-auto mb-4 ${className}`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"></path>\n </svg>\n );\n}\n\nexport function AnimateSpin({ className }: Props) {\n return (\n <svg\n className={`animate-spin ${className}`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )\n}\nexport function GearIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function CheckIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nexport function BackIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n )\n}\n\nexport function NotFoundIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n )\n}\n\nexport function BoxIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n )\n}\n\nexport function ChartIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n )\n}\n\nexport function UsersIcon({ className }: Props) {\n return (\n <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12 2a5 5 0 1 0 5 5a5 5 0 0 0-5-5m0 8a3 3 0 1 1 3-3a3 3 0 0 1-3 3m9 11v-1a7 7 0 0 0-7-7h-4a7 7 0 0 0-7 7v1h2v-1a5 5 0 0 1 5-5h4a5 5 0 0 1 5 5v1z\" />\n </svg>\n )\n}\n\nexport function DocumentIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n )\n}\n\nexport function LogoutIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\"\n />\n </svg>\n )\n}\n\nexport function HomeIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\"\n />\n </svg>\n )\n}\n\nexport function BuildingIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\"\n />\n </svg>\n )\n}\n\nexport function CashIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z\"\n />\n </svg>\n )\n}\n\nexport function MenuIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n )\n}\n\nexport function CloseIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )\n}\n\nexport function AddIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n )\n}\n\nexport function SearchIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z\"\n />\n </svg>\n )\n}\n\nexport function SaveIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4\"\n />\n </svg>\n )\n}\n\nexport function CancelIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )\n}\n\nexport function DeleteIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n )\n}\n\nexport function EditIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n )\n}\n\nexport function CategorieIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M11.15 3.4L7.43 9.48c-.41.66.07 1.52.85 1.52h7.43c.78 0 1.26-.86.85-1.52L12.85 3.4a.993.993 0 0 0-1.7 0\" /><circle cx=\"17.5\" cy=\"17.5\" r=\"4.5\" fill=\"currentColor\" /><path fill=\"currentColor\" d=\"M4 21.5h6c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1\" /></svg>\n )\n}\n\nexport function FolderIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\"\n />\n </svg>\n )\n}\n\nexport function ArrowIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M17.77 3.77L16 2L6 12l10 10l1.77-1.77L9.54 12z\" /></svg>\n )\n}\n\nexport function FilterIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M11.36 20.213L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12m0 6a3 3 0 1 0 6 0a3 3 0 1 0-6 0m5.2 2.2L22 22\" /></svg>\n )\n}\n\nexport function QuestionIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function LocationIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function CalendarIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function InfoIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function MoonIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\n </svg>\n )\n}\n\nexport function SunIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n )\n}\n\nexport function CamaraIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function ArrowLeftIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n )\n}\n\nexport function ArrowRightIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nexport function TrashIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n )\n}\n\nexport function MinusIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\n </svg>\n );\n}\n\nexport function MoneyIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function PercentIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function StackIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 7h16M4 12h16M4 17h16\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 3v18M17 3v18\" />\n </svg>\n )\n}\n\nexport function ClockIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function CheckCircleIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function CajasIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n )\n}\n\nexport function PrinterIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z\" />\n </svg>\n )\n}\n\nexport function NetworkIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01\" />\n </svg>\n )\n}\n\nexport function TestIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>\n )\n}\n\nexport function FacturacionIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 6l4 4\" />\n <text x=\"12\" y=\"16\" fontSize=\"8\" fill=\"currentColor\" textAnchor=\"middle\">$</text>\n </svg>\n )\n}\n\nexport function WhatsAppIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" className={className} viewBox=\"0 0 24 24\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52s.198-.298.298-.497c.099-.198.05-.371-.025-.52s-.669-1.612-.916-2.207c-.242-.579-.487-.5-.669-.51a13 13 0 0 0-.57-.01c-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074s2.096 3.2 5.077 4.487c.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413s.248-1.289.173-1.413c-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.82 9.82 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.82 11.82 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.9 11.9 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.82 11.82 0 0 0-3.478-8.413\" /></svg>\n )\n}\n\nexport function ArchiveIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\" />\n </svg>\n )\n}\n\nexport function CopyIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function PasteIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" />\n </svg>\n )\n}\n\nexport function RestaurantMenuIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M6 22q-.825 0-1.412-.587T4 20v-2q-.425 0-.712-.288T3 17t.288-.712T4 16v-3q-.425 0-.712-.288T3 12t.288-.712T4 11V8q-.425 0-.712-.288T3 7t.288-.712T4 6V4q0-.825.588-1.412T6 2h12q.825 0 1.413.588T20 4v16q0 .825-.587 1.413T18 22zm0-2h12V4H6v2q.425 0 .713.288T7 7t-.288.713T6 8v3q.425 0 .713.288T7 12t-.288.713T6 13v3q.425 0 .713.288T7 17t-.288.713T6 18zm3.5-7v3.25q0 .325.213.538t.537.212.538-.213.212-.537V13q.65-.175 1.075-.712t.425-1.213V7.5q0-.2-.15-.35T12 7t-.35.15-.15.35v3.275h-.75V7.5q0-.2-.15-.35T10.25 7t-.35.15-.15.35v3.275H9V7.5q0-.2-.15-.35T8.5 7t-.35.15T8 7.5v3.575q0 .675.425 1.213T9.5 13m5.5 0v3.25q0 .325.213.538t.537.212.538-.213.212-.537V7.575q0-.275-.187-.425T15.825 7q-.325 0-.712.175t-.738.525q-.425.425-.65.963T13.5 9.825V12q0 .425.288.713T14.5 13zm-9 7V4z\" /></svg>\n )\n}\n\nexport function CloudIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z\" />\n </svg>\n )\n}\n\nexport function ShieldIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n )\n}\n\nexport function BarsChartsIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n )\n}\n\nexport function LightingIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n )\n}\n\nexport function LifeGuardIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n )\n}\n\nexport function MonitorIcon({ className }: Props) {\n return (\n <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M4 18q-.825 0-1.412-.587T2 16V5q0-.825.588-1.412T4 3h16q.825 0 1.413.588T22 5v11q0 .825-.587 1.413T20 18h-3l.7.7q.15.15.225.338t.075.387V20q0 .425-.288.712T17 21H7q-.425 0-.712-.288T6 20v-.575q0-.2.075-.387T6.3 18.7L7 18zm0-2h16V5H4zm0 0V5z\" />\n </svg>\n )\n}\n\nexport function TruckIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8.25 18.75a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 0 1-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 0 0-3.213-9.193 2.056 2.056 0 0 0-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 0 0-10.026 0 1.106 1.106 0 0 0-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12\" />\n </svg>\n )\n}\n\nexport function IconCursor({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2 1l12 5.5-5.5 1.5L7 13.5 2 1z\" />\n </svg>\n );\n}\n\nexport function IconHand({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8 1a1 1 0 011 1v4.586l1.293-1.293a1 1 0 111.414 1.414L8 10.414 4.293 6.707a1 1 0 111.414-1.414L7 6.586V2a1 1 0 011-1z\" />\n <path d=\"M3 8a1 1 0 011-1h.5V4.5a1 1 0 012 0V7h1V3.5a1 1 0 012 0V7h1V4.5a1 1 0 012 0V9a5 5 0 01-5 5H6A3 3 0 013 11V8z\" />\n </svg>\n );\n}\n\nexport function IconGrid({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M1 1h6v6H1V1zm8 0h6v6H9V1zM1 9h6v6H1V9zm8 0h6v6H9V9z\"\n clipRule=\"evenodd\"\n opacity={0.7}\n />\n </svg>\n );\n}\n\nexport function IconZoomIn({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM6 4.75a.75.75 0 011.5 0V6h1.25a.75.75 0 010 1.5H7.5v1.25a.75.75 0 01-1.5 0V7.5H4.75a.75.75 0 010-1.5H6V4.75z\" />\n </svg>\n );\n}\n\nexport function IconZoomOut({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM4.75 6a.75.75 0 000 1.5h3.5a.75.75 0 000-1.5h-3.5z\" />\n </svg>\n );\n}\n\nexport function IconReset({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM8 4a.75.75 0 01.75.75v3.19l1.28 1.28a.75.75 0 01-1.06 1.06l-1.5-1.5A.75.75 0 017.25 8V4.75A.75.75 0 018 4z\" />\n </svg>\n );\n}\n\nexport function IconUndo({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2.5 5.5A.5.5 0 013 5h5a5 5 0 110 10H3a.5.5 0 010-1h5a4 4 0 100-8H3.707l1.647 1.646a.5.5 0 01-.708.708l-2.5-2.5a.5.5 0 010-.708l2.5-2.5a.5.5 0 01.708.708L3.207 5H3a.5.5 0 01-.5-.5z\" />\n </svg>\n );\n}\n\nexport function IconRedo({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M13.5 5.5A.5.5 0 0113 5H8a4 4 0 100 8h5a.5.5 0 010 1H8A5 5 0 118 5h4.293l-1.647-1.646a.5.5 0 01.708-.708l2.5 2.5a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708-.708L12.793 6H13a.5.5 0 01.5.5z\" />\n </svg>\n );\n}\n\nexport function IconPlace({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2 2a.5.5 0 01.5-.5h2a.5.5 0 010 1H3v1.5a.5.5 0 01-1 0V2zm11 0a.5.5 0 00-.5-.5h-2a.5.5 0 000 1H12v1.5a.5.5 0 001 0V2zM2 14a.5.5 0 00.5.5h2a.5.5 0 000-1H3v-1.5a.5.5 0 00-1 0V14zm11 0a.5.5 0 01-.5.5h-2a.5.5 0 010-1H12v-1.5a.5.5 0 011 0V14zM8 4.5a.5.5 0 000 1V7H6.5a.5.5 0 000 1H8v1.5a.5.5 0 001 0V8h1.5a.5.5 0 000-1H9V5.5a.5.5 0 00-1 0z\" />\n </svg>\n );\n}\n\nexport function IconErase({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8.086 2.207a2 2 0 012.828 0l2.879 2.878a2 2 0 010 2.83l-7.513 7.51A2 2 0 014.872 16H2.4a1 1 0 01-.966-.741L.8 13.2a2 2 0 01.5-1.946l7.786-9.047zM7.586 5L5 7.586 8.414 11 11 8.414 7.586 5zM6 12L4 10l-1.5 1.5a1 1 0 000 1.414l.587.587A1 1 0 003.793 15H5l1-1-1-1 1-1z\" />\n </svg>\n );\n}\n\nexport function IconDuplicate({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M4 2a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2V4a2 2 0 00-2-2H4zm0 1h8a1 1 0 011 1v8a1 1 0 01-1 1H4a1 1 0 01-1-1V4a1 1 0 011-1z\" />\n <path d=\"M2 5H1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1v-1H9v1H1V6h1V5z\" />\n </svg>\n );\n}\n\nexport function IconWall({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Two parallel lines forming a wall corner — represents wall cross-section */}\n <path strokeWidth=\"2\" d=\"M3 14 L3 2 L14 2\" />\n <path strokeWidth=\"2\" d=\"M6 14 L6 5 L14 5\" />\n </svg>\n );\n}\n\nexport function IconDownload({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z\"/>\n <path d=\"M7.646 11.854a.5.5 0 00.708 0l3-3a.5.5 0 00-.708-.708L8.5 10.293V1.5a.5.5 0 00-1 0v8.793L5.354 8.146a.5.5 0 10-.708.708l3 3z\"/>\n </svg>\n );\n}\n\nexport function IconUpload({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z\"/>\n <path d=\"M7.646 1.146a.5.5 0 01.708 0l3 3a.5.5 0 01-.708.708L8.5 2.707V11.5a.5.5 0 01-1 0V2.707L5.354 4.854a.5.5 0 11-.708-.708l3-3z\"/>\n </svg>\n );\n}\n\nexport function IconPolygon({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"none\" stroke=\"currentColor\" strokeLinejoin=\"round\">\n <path strokeWidth=\"1.5\" d=\"M8 2 L14 6 L12 13 L4 13 L2 6 Z\"/>\n <circle cx=\"8\" cy=\"2\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"14\" cy=\"6\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"12\" cy=\"13\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"4\" cy=\"13\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"2\" cy=\"6\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n </svg>\n );\n}\n\nexport function IconLayers({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8.235 1.559a.5.5 0 0 0-.47 0l-7.5 4a.5.5 0 0 0 0 .882L3.188 8 .265 9.559a.5.5 0 0 0 0 .882l7.5 4a.5.5 0 0 0 .47 0l7.5-4a.5.5 0 0 0 0-.882L12.813 8l2.922-1.559a.5.5 0 0 0 0-.882l-7.5-4zm3.515 7.008L14.438 10 8 13.433 1.562 10 4.25 8.567l3.515 1.874a.5.5 0 0 0 .47 0l3.515-1.874zM8 9.433 1.562 6 8 2.567 14.438 6 8 9.433z\"/>\n </svg>\n );\n}","import { AnimateSpin } from '../icons/icons';\nimport { type ButtonHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'icon' | 'danger' | 'success' | 'outline' | 'nav' | 'custom' | 'link' | 'warning' | 'toggle';\n children: ReactNode;\n isLoading?: boolean;\n loadingText?: string;\n isActive?: boolean;\n}\n\nexport const Button: FC<ButtonProps> = ({\n variant = 'primary',\n children,\n isLoading = false,\n loadingText,\n isActive = false,\n className = '',\n disabled,\n ...props\n}) => {\n const baseClasses = 'transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer';\n\n const variantClasses = {\n primary: 'py-2 px-2 border border-indigo-600/20 dark:border-indigo-500/20 text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n secondary: 'p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-200 dark:hover:bg-gray-800 rounded-md border border-gray-300 dark:border-gray-600 shadow-sm hover:shadow-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n icon: 'p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-200 dark:hover:bg-gray-800 rounded-full focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n danger: 'py-2 px-2 border border-red-600/20 dark:border-red-500/20 text-sm font-medium rounded-md text-white bg-red-600 hover:bg-red-700 dark:bg-red-500 dark:hover:bg-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 dark:focus:ring-red-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n success: 'py-2 px-2 border border-green-600/20 dark:border-green-500/20 text-sm font-medium rounded-md text-white bg-green-600 hover:bg-green-700 dark:bg-green-500 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-500 dark:focus:ring-green-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n outline: 'py-2 px-2 border border-gray-300 dark:border-gray-600 text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n nav: 'w-full flex items-center px-4 py-2 text-sm font-medium rounded-md transition-all duration-200 hover:scale-105 text-gray-700 dark:text-gray-300 dark:hover:text-white hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n custom: \"\",\n link: 'text-sm text-indigo-600 dark:text-indigo-400 hover:text-indigo-700 dark:hover:text-indigo-300 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900 rounded-lg px-2',\n warning: 'py-2 px-2 border border-yellow-600/20 dark:border-yellow-500/20 text-sm font-medium rounded-md text-white bg-yellow-600 hover:bg-yellow-700 dark:bg-yellow-500 dark:hover:bg-yellow-600 focus:outline-none focus:ring-2 focus:ring-yellow-500 dark:focus:ring-yellow-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n toggle: 'px-2 py-2 rounded-lg font-medium transition-all duration-200 disabled:cursor-not-allowed border-2 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900'\n };\n\n let classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\n\n if (variant === 'nav' && isActive) {\n classes += ' bg-indigo-600 dark:bg-indigo-500 hover:bg-indigo-700 dark:hover:bg-indigo-600 text-white shadow-lg scale-105';\n }\n\n if (variant === 'nav' && !isActive) {\n classes += ' hover:bg-white dark:hover:bg-gray-700 hover:shadow-lg';\n }\n\n if (variant === 'toggle') {\n if (isActive) {\n classes += ' bg-indigo-600 text-white border-indigo-600/30 dark:border-indigo-500/30 hover:bg-indigo-700';\n } else {\n classes += ' bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-300 dark:hover:bg-gray-600 hover:border-gray-400 dark:hover:border-gray-500';\n }\n }\n\n return (\n <button\n className={classes}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading ? (\n <>\n <AnimateSpin className=\"h-5 w-5 mr-2 inline-block text-current\" />\n {loadingText || 'Cargando...'}\n </>\n ) : (\n children\n )}\n </button>\n );\n};","import { type InputHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string | ReactNode;\n error?: string;\n helperText?: string;\n icon?: ReactNode;\n iconSide?: 'left' | 'right';\n}\n\nexport const Input: FC<InputProps> = ({\n label,\n error,\n helperText,\n icon,\n iconSide = 'left',\n className = '',\n id,\n type,\n ...props\n}) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n\n // ── Default text input ────────────────────────────────────────────────────\n const baseClasses = 'appearance-none relative block w-full px-3 py-2 border placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white bg-white dark:bg-gray-800 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200';\n const errorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : 'border-gray-300 dark:border-gray-600';\n const iconPaddingLeft = icon && iconSide === 'left' ? 'pl-9' : '';\n const iconPaddingRight = icon && iconSide === 'right' ? 'pr-9' : '';\n const classes = `${baseClasses} ${errorClasses} ${iconPaddingLeft} ${iconPaddingRight} ${className}`.trim();\n\n // ── Checkbox / Radio ──────────────────────────────────────────────────────\n const toggleShape = type === 'radio' ? 'rounded-full' : 'rounded';\n const toggleBaseClasses = `h-4 w-4 ${toggleShape} border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-indigo-600 dark:text-indigo-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 cursor-pointer`;\n const toggleErrorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400' : '';\n const toggleClasses = `${toggleBaseClasses} ${toggleErrorClasses}`.trim();\n\n // ── File input ────────────────────────────────────────────────────────────\n const fileBaseClasses = 'block w-full sm:text-sm text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 border rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 file:mr-4 file:py-2 file:px-4 file:rounded-l-md file:border-0 file:text-sm file:font-medium file:bg-indigo-50 file:text-indigo-700 dark:file:bg-indigo-900/50 dark:file:text-indigo-300 hover:file:bg-indigo-100 dark:hover:file:bg-indigo-800/50 file:transition-colors file:duration-200 file:cursor-pointer';\n const fileErrorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400' : 'border-gray-300 dark:border-gray-600';\n const fileClasses = `${fileBaseClasses} ${fileErrorClasses} ${className}`.trim();\n\n const hasHidden = Boolean(className && /\\bhidden\\b/.test(className));\n const wrapperBase = 'space-y-1 w-full';\n const wrapperClasses = hasHidden ? `${wrapperBase} hidden` : wrapperBase;\n\n const labelNode = label && (\n typeof label === 'string' ? (\n <label htmlFor={inputId} className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n ) : label\n );\n\n const errorNode = error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n );\n\n const helperNode = helperText && !error && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n );\n\n if (type === 'checkbox' || type === 'radio') {\n return (\n <div className={wrapperClasses}>\n <div className=\"flex items-center space-x-2\">\n <input id={inputId} type={type} className={toggleClasses} {...props} />\n {labelNode}\n </div>\n {errorNode}\n {helperNode}\n </div>\n );\n }\n\n if (type === 'file') {\n return (\n <div className={wrapperClasses}>\n {labelNode}\n <input id={inputId} type=\"file\" className={fileClasses} {...props} />\n {errorNode}\n {helperNode}\n </div>\n );\n }\n\n return (\n <div className={wrapperClasses}>\n {labelNode}\n <div className=\"relative\">\n {icon && iconSide === 'left' && (\n <div className=\"pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-gray-400 dark:text-gray-500\">\n {icon}\n </div>\n )}\n <input id={inputId} className={classes} type={type} {...props} />\n {icon && iconSide === 'right' && (\n <div className=\"pointer-events-none absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-gray-400 dark:text-gray-500\">\n {icon}\n </div>\n )}\n </div>\n {errorNode}\n {helperNode}\n </div>\n );\n};\n","import { type TextareaHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string | ReactNode;\n error?: string;\n helperText?: string;\n variant?: 'default' | 'outline' | 'filled' | 'minimal';\n size?: 'small' | 'medium' | 'large';\n}\n\nexport const TextArea: FC<TextAreaProps> = ({\n label,\n error,\n helperText,\n variant = 'default',\n size = 'medium',\n className = '',\n id,\n ...props\n}) => {\n const textAreaId = id || `textarea-${Math.random().toString(36).substring(2, 9)}`;\n\n const sizeClasses = {\n small: 'px-2 py-1 text-xs',\n medium: 'px-3 py-2 text-sm',\n large: 'px-4 py-3 text-base'\n };\n\n const variantClasses = {\n default: 'border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800',\n outline: 'border-2 border-indigo-300 dark:border-indigo-600 bg-transparent',\n filled: 'border-gray-300 dark:border-gray-600 bg-gray-100 dark:bg-gray-700',\n minimal: 'border-0 bg-transparent focus:ring-0 focus:border-0'\n };\n\n const baseClasses = 'appearance-none relative block w-full placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white rounded-md border focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 resize-y';\n\n const errorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : '';\n\n const classes = `${baseClasses} ${sizeClasses[size]} ${variantClasses[variant]} ${errorClasses} ${className}`;\n\n return (\n <div className=\"space-y-1 w-full\">\n {label && typeof label === 'string' ? (\n <label\n htmlFor={textAreaId}\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {label}\n </label>\n ) : (\n label\n )}\n <textarea\n id={textAreaId}\n className={classes}\n {...props}\n />\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n {error}\n </p>\n )}\n {helperText && !error && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {helperText}\n </p>\n )}\n </div>\n );\n};","import { type FormHTMLAttributes, type FC, type FormEvent, type ReactNode } from 'react';\n\ninterface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n children: ReactNode;\n onSubmit?: (e: FormEvent<HTMLFormElement>) => void;\n variant?: 'default' | 'modal' | 'card' | 'inline' | 'compact';\n}\n\nexport const Form: FC<FormProps> = ({ onSubmit, children, variant = 'default', className = '', ...props }) => {\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (onSubmit) {\n onSubmit(e);\n }\n };\n\n const getVariantClasses = () => {\n switch (variant) {\n case 'modal':\n return 'flex-1 px-6 py-4 overflow-y-auto';\n case 'card':\n return 'p-6 space-y-6';\n case 'inline':\n return 'flex flex-wrap gap-4 items-end';\n case 'compact':\n return 'space-y-3';\n case 'default':\n default:\n return 'space-y-4';\n }\n };\n\n const combinedClassName = `${getVariantClasses()} ${className}`.trim();\n\n return (\n <form onSubmit={handleSubmit} className={combinedClassName} {...props}>\n {children}\n </form>\n );\n};","import { type SelectHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface Option {\n value: string | number;\n label: string;\n disabled?: boolean;\n selected?: boolean;\n}\n\ninterface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n options: Option[];\n placeholder?: string;\n variant?: 'default' | 'small';\n error?: boolean;\n helperText?: string;\n label?: string | ReactNode;\n}\n\nexport const Select: FC<SelectProps> = ({\n options,\n placeholder,\n variant = 'default',\n error = false,\n helperText,\n label,\n className = '',\n id,\n ...props\n}) => {\n const selectId = id || `select-${Math.random().toString(36).substring(2, 9)}`;\n\n const getVariantClasses = () => {\n const baseClasses = 'appearance-none relative block w-full px-3 py-2 border placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white bg-white dark:bg-gray-800 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200';\n\n if (variant === 'small') {\n return `${baseClasses.replace('px-3 py-2', 'px-2.5 py-1.5 text-sm')} border-gray-300 dark:border-gray-600`;\n }\n\n return `${baseClasses} border-gray-300 dark:border-gray-600 ${error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : ''}`;\n };\n\n const getOptionClasses = (option: Option) => {\n return `bg-white dark:bg-gray-800 text-gray-900 dark:text-white py-2 ${option.disabled ? 'opacity-50 cursor-not-allowed' : ''}`;\n };\n\n const combinedClassName = `${getVariantClasses()} ${className}`.trim();\n\n return (\n <div className=\"space-y-1 w-full\">\n {label && typeof label === 'string' ? (\n <label htmlFor={selectId} className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n ) : (\n label\n )}\n <select id={selectId} className={combinedClassName} {...props}>\n {placeholder && placeholder.trim() && (\n <option value=\"\" disabled selected className=\"bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 py-2\">\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n selected={option.selected}\n className={getOptionClasses(option)}\n >\n {option.label}\n </option>\n ))}\n </select>\n {helperText && (\n <p className={`text-sm ${error ? 'text-red-600 dark:text-red-400' : 'text-gray-500 dark:text-gray-400'}`}>\n {helperText}\n </p>\n )}\n </div>\n );\n};","import { type ReactNode } from 'react';\n\ninterface TableProps {\n headers: ReactNode[];\n rows: ReactNode[][];\n variant?: 'default' | 'custom';\n className?: string;\n thClassName?: string;\n tdClassName?: string;\n}\n\nexport function Table({\n headers,\n rows,\n variant = 'default',\n className = '',\n thClassName = '',\n tdClassName = ''\n}: TableProps) {\n const baseTableClass = variant === 'default'\n ? 'w-full table-auto border-collapse border border-gray-300 dark:border-gray-600 min-w-full'\n : '';\n\n const baseThClass = variant === 'default'\n ? 'border border-gray-300 dark:border-gray-600 px-4 py-2 text-left text-gray-900 dark:text-white'\n : '';\n\n const baseTdClass = variant === 'default'\n ? 'border border-gray-300 dark:border-gray-600 px-4 py-2 text-gray-900 dark:text-white'\n : '';\n\n const tableClass = `${baseTableClass} ${className}`.trim();\n const thClass = `${baseThClass} ${thClassName}`.trim();\n const tdClass = `${baseTdClass} ${tdClassName}`.trim();\n\n return (\n <div className=\"overflow-x-auto w-full\">\n <table className={tableClass}>\n <thead>\n <tr className={variant === 'default' ? 'bg-gray-100 dark:bg-gray-700' : ''}>\n {headers.map((header, index) => (\n <th key={index} className={thClass}>\n {header}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row, rowIndex) => (\n <tr key={rowIndex} className={variant === 'default' ? 'hover:bg-gray-50 dark:hover:bg-gray-600' : ''}>\n {row.map((cell, cellIndex) => (\n <td key={cellIndex} className={tdClass}>\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}","import { Button } from './Button';\nimport { CloseIcon } from '../icons/icons';\nimport React, { useEffect, useState, forwardRef, useImperativeHandle } from 'react';\n\ninterface ModalProps {\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n maxWidth?: string;\n showCloseButton?: boolean;\n zIndex?: number;\n}\n\nexport interface ModalRef {\n handleClose: () => void;\n}\n\nexport const Modal = forwardRef<ModalRef, ModalProps>(({\n onClose,\n title,\n children,\n footer,\n maxWidth = 'max-w-2xl',\n showCloseButton = true,\n zIndex = 50\n}, ref) => {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n setShow(true);\n }, []);\n\n const handleClose = () => {\n setShow(false);\n setTimeout(() => {\n onClose();\n }, 300);\n };\n\n useImperativeHandle(ref, () => ({\n handleClose\n }));\n\n return (\n <dialog\n open={show}\n className={`fixed inset-0 w-full h-full flex items-center justify-center p-4 ${show && 'opacity-100'} transition-opacity opacity-0 duration-300 bg-gray-900/60 backdrop-blur-sm`}\n style={{ zIndex: zIndex - 10 }}\n >\n <article\n className={`relative bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-2xl w-full ${maxWidth} max-h-[90vh] flex flex-col overflow-hidden`}\n style={{ zIndex }}\n >\n <header className=\"shrink-0 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-6 py-4 flex items-center justify-between\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">{title}</h2>\n {showCloseButton && (\n <Button\n variant='icon'\n onClick={handleClose}\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\n >\n <CloseIcon className=\"w-5 h-5\" />\n </Button>\n )}\n </header>\n <div className=\"flex-1 overflow-y-auto p-6\">\n {children}\n </div>\n {footer && (\n <footer className=\"shrink-0 bg-gray-50 dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 px-6 py-4 flex justify-end gap-3\">\n {footer}\n </footer>\n )}\n </article>\n </dialog>\n );\n});\n\nModal.displayName = 'Modal';","import { type FC } from 'react';\n\ninterface LoadingProps {\n variant?: 'spinner' | 'dots' | 'pulse' | 'bars' | 'ring' | 'cube';\n size?: 'small' | 'medium' | 'large' | 'xl';\n color?: 'primary' | 'white' | 'gray' | 'success' | 'danger' | 'warning';\n label?: string;\n className?: string;\n}\n\nexport const Loading: FC<LoadingProps> = ({\n variant = 'spinner',\n size = 'medium',\n color = 'primary',\n label,\n className = '',\n}) => {\n const sizeClasses = {\n small: 'h-4 w-4',\n medium: 'h-8 w-8',\n large: 'h-12 w-12',\n xl: 'h-16 w-16',\n };\n\n const colorClasses = {\n primary: 'text-indigo-600 dark:text-indigo-400',\n white: 'text-white',\n gray: 'text-gray-500 dark:text-gray-400',\n success: 'text-green-600 dark:text-green-400',\n danger: 'text-red-600 dark:text-red-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n };\n\n const renderIcon = () => {\n const commonClass = `${sizeClasses[size]} ${colorClasses[color]}`;\n\n switch (variant) {\n case 'dots':\n const dotSize = size === 'small' ? 'h-1 w-1' : size === 'medium' ? 'h-2 w-2' : size === 'large' ? 'h-3 w-3' : 'h-4 w-4';\n return (\n <div className={`flex space-x-1 ${colorClasses[color]}`}>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0s' }}></div>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0.15s' }}></div>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0.3s' }}></div>\n </div>\n );\n \n case 'bars':\n return (\n <div className={`flex items-end space-x-1 ${sizeClasses[size]} ${colorClasses[color]}`}>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '60%', animationDelay: '0s' }}></div>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '100%', animationDelay: '0.2s' }}></div>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '60%', animationDelay: '0.4s' }}></div>\n </div>\n );\n\n case 'pulse':\n return (\n <span className={`relative flex ${commonClass}`}>\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75 bg-current\"></span>\n <span className=\"relative inline-flex rounded-full h-full w-full bg-current\"></span>\n </span>\n );\n\n case 'cube':\n return (\n <div className={`${commonClass} grid grid-cols-2 gap-1`}>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '0s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '0.5s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '1.5s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '1s' }}></div>\n </div>\n );\n\n case 'ring':\n return (\n <svg className={`${commonClass} animate-spin`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n );\n\n case 'spinner':\n default:\n return (\n <svg className={`${commonClass} animate-spin`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"></path>\n </svg>\n );\n }\n };\n\n return (\n <div className={`flex flex-col items-center justify-center w-full h-full min-h-[inherit] ${className}`} role=\"status\">\n {renderIcon()}\n {label && (\n <span className={`mt-3 text-sm font-medium ${colorClasses[color]}`}>\n {label}\n </span>\n )}\n </div>\n );\n};\n"]}
1
+ {"version":3,"sources":["../../../src/components/icons/icons.tsx","../../../src/components/html/Button.tsx","../../../src/components/html/Input.tsx","../../../src/components/html/TextArea.tsx","../../../src/components/html/Form.tsx","../../../src/components/html/Select.tsx","../../../src/components/html/Table.tsx","../../../src/components/html/Modal.tsx","../../../src/components/html/Loading.tsx"],"names":["jsxs","jsx","Fragment","forwardRef","useState","useEffect","useImperativeHandle"],"mappings":"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","file":"index.js","sourcesContent":["import type { Props } from \"../../types/types\";\n\n// Spinner de carga animado\nexport function SpinnerIcon({ className = \"\" }: { className?: string }) {\n return (\n <svg className={`animate-spin h-8 w-8 text-indigo-600 mx-auto mb-4 ${className}`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"></path>\n </svg>\n );\n}\n\nexport function AnimateSpin({ className }: Props) {\n return (\n <svg\n className={`animate-spin ${className}`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path className=\"opacity-75\" fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )\n}\nexport function GearIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function CheckIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n}\n\nexport function BackIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M10 19l-7-7m0 0l7-7m-7 7h18\" />\n </svg>\n )\n}\n\nexport function NotFoundIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z\" />\n </svg>\n )\n}\n\nexport function BoxIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n )\n}\n\nexport function ChartIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\"\n />\n </svg>\n )\n}\n\nexport function UsersIcon({ className }: Props) {\n return (\n <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M12 2a5 5 0 1 0 5 5a5 5 0 0 0-5-5m0 8a3 3 0 1 1 3-3a3 3 0 0 1-3 3m9 11v-1a7 7 0 0 0-7-7h-4a7 7 0 0 0-7 7v1h2v-1a5 5 0 0 1 5-5h4a5 5 0 0 1 5 5v1z\" />\n </svg>\n )\n}\n\nexport function DocumentIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\"\n />\n </svg>\n )\n}\n\nexport function LogoutIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1\"\n />\n </svg>\n )\n}\n\nexport function HomeIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6\"\n />\n </svg>\n )\n}\n\nexport function BuildingIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4\"\n />\n </svg>\n )\n}\n\nexport function CashIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z\"\n />\n </svg>\n )\n}\n\nexport function MenuIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M4 6h16M4 12h16M4 18h16\"\n />\n </svg>\n )\n}\n\nexport function CloseIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )\n}\n\nexport function AddIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v16m8-8H4\" />\n </svg>\n )\n}\n\nexport function SearchIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"m21 21-6-6m2-5a7 7 0 1 1-14 0 7 7 0 0 1 14 0Z\"\n />\n </svg>\n )\n}\n\nexport function SaveIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4\"\n />\n </svg>\n )\n}\n\nexport function CancelIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M6 18L18 6M6 6l12 12\"\n />\n </svg>\n )\n}\n\nexport function DeleteIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n )\n}\n\nexport function EditIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z\"\n />\n </svg>\n )\n}\n\nexport function CategorieIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M11.15 3.4L7.43 9.48c-.41.66.07 1.52.85 1.52h7.43c.78 0 1.26-.86.85-1.52L12.85 3.4a.993.993 0 0 0-1.7 0\" /><circle cx=\"17.5\" cy=\"17.5\" r=\"4.5\" fill=\"currentColor\" /><path fill=\"currentColor\" d=\"M4 21.5h6c.55 0 1-.45 1-1v-6c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v6c0 .55.45 1 1 1\" /></svg>\n )\n}\n\nexport function FolderIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z\"\n />\n </svg>\n )\n}\n\nexport function ArrowIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M17.77 3.77L16 2L6 12l10 10l1.77-1.77L9.54 12z\" /></svg>\n )\n}\n\nexport function FilterIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M11.36 20.213L9 21v-8.5L4.52 7.572A2 2 0 0 1 4 6.227V4h16v2.172a2 2 0 0 1-.586 1.414L15 12m0 6a3 3 0 1 0 6 0a3 3 0 1 0-6 0m5.2 2.2L22 22\" /></svg>\n )\n}\n\nexport function QuestionIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function LocationIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 11a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function CalendarIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function InfoIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function MoonIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z\" />\n </svg>\n )\n}\n\nexport function SunIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n )\n}\n\nexport function CamaraIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 13a3 3 0 11-6 0 3 3 0 016 0z\" />\n </svg>\n )\n}\n\nexport function ArrowLeftIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 19l-7-7 7-7\" />\n </svg>\n )\n}\n\nexport function ArrowRightIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5l7 7-7 7\" />\n </svg>\n )\n}\n\nexport function TrashIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" />\n </svg>\n )\n}\n\nexport function MinusIcon({ className }: { className?: string }) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 12H4\" />\n </svg>\n );\n}\n\nexport function MoneyIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function PercentIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function StackIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M4 7h16M4 12h16M4 17h16\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M7 3v18M17 3v18\" />\n </svg>\n )\n}\n\nexport function ClockIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function CheckCircleIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n )\n}\n\nexport function CajasIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z\" />\n </svg>\n )\n}\n\nexport function PrinterIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z\" />\n </svg>\n )\n}\n\nexport function NetworkIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01\" />\n </svg>\n )\n}\n\nexport function TestIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z\" />\n </svg>\n )\n}\n\nexport function FacturacionIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M15 6l4 4\" />\n <text x=\"12\" y=\"16\" fontSize=\"8\" fill=\"currentColor\" textAnchor=\"middle\">$</text>\n </svg>\n )\n}\n\nexport function WhatsAppIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"currentColor\" className={className} viewBox=\"0 0 24 24\"><path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52s.198-.298.298-.497c.099-.198.05-.371-.025-.52s-.669-1.612-.916-2.207c-.242-.579-.487-.5-.669-.51a13 13 0 0 0-.57-.01c-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074s2.096 3.2 5.077 4.487c.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413s.248-1.289.173-1.413c-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.82 9.82 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.82 11.82 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.9 11.9 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.82 11.82 0 0 0-3.478-8.413\" /></svg>\n )\n}\n\nexport function ArchiveIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4\" />\n </svg>\n )\n}\n\nexport function CopyIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n )\n}\n\nexport function PasteIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\" />\n </svg>\n )\n}\n\nexport function RestaurantMenuIcon({ className }: Props) {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className={className} viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M6 22q-.825 0-1.412-.587T4 20v-2q-.425 0-.712-.288T3 17t.288-.712T4 16v-3q-.425 0-.712-.288T3 12t.288-.712T4 11V8q-.425 0-.712-.288T3 7t.288-.712T4 6V4q0-.825.588-1.412T6 2h12q.825 0 1.413.588T20 4v16q0 .825-.587 1.413T18 22zm0-2h12V4H6v2q.425 0 .713.288T7 7t-.288.713T6 8v3q.425 0 .713.288T7 12t-.288.713T6 13v3q.425 0 .713.288T7 17t-.288.713T6 18zm3.5-7v3.25q0 .325.213.538t.537.212.538-.213.212-.537V13q.65-.175 1.075-.712t.425-1.213V7.5q0-.2-.15-.35T12 7t-.35.15-.15.35v3.275h-.75V7.5q0-.2-.15-.35T10.25 7t-.35.15-.15.35v3.275H9V7.5q0-.2-.15-.35T8.5 7t-.35.15T8 7.5v3.575q0 .675.425 1.213T9.5 13m5.5 0v3.25q0 .325.213.538t.537.212.538-.213.212-.537V7.575q0-.275-.187-.425T15.825 7q-.325 0-.712.175t-.738.525q-.425.425-.65.963T13.5 9.825V12q0 .425.288.713T14.5 13zm-9 7V4z\" /></svg>\n )\n}\n\nexport function CloudIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z\" />\n </svg>\n )\n}\n\nexport function ShieldIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z\" />\n </svg>\n )\n}\n\nexport function BarsChartsIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z\" />\n </svg>\n )\n}\n\nexport function LightingIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 10V3L4 14h7v7l9-11h-7z\" />\n </svg>\n )\n}\n\nexport function LifeGuardIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z\" />\n </svg>\n )\n}\n\nexport function MonitorIcon({ className }: Props) {\n return (\n <svg className={className} xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\">\n <path fill=\"currentColor\" d=\"M4 18q-.825 0-1.412-.587T2 16V5q0-.825.588-1.412T4 3h16q.825 0 1.413.588T22 5v11q0 .825-.587 1.413T20 18h-3l.7.7q.15.15.225.338t.075.387V20q0 .425-.288.712T17 21H7q-.425 0-.712-.288T6 20v-.575q0-.2.075-.387T6.3 18.7L7 18zm0-2h16V5H4zm0 0V5z\" />\n </svg>\n )\n}\n\nexport function TruckIcon({ className }: Props) {\n return (\n <svg className={className} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5} d=\"M8.25 18.75a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h6m-9 0H3.375a1.125 1.125 0 0 1-1.125-1.125V14.25m17.25 4.5a1.5 1.5 0 0 1-3 0m3 0a1.5 1.5 0 0 0-3 0m3 0h1.125c.621 0 1.129-.504 1.09-1.124a17.902 17.902 0 0 0-3.213-9.193 2.056 2.056 0 0 0-1.58-.86H14.25M16.5 18.75h-2.25m0-11.177v-.958c0-.568-.422-1.048-.987-1.106a48.554 48.554 0 0 0-10.026 0 1.106 1.106 0 0 0-.987 1.106v7.635m12-6.677v6.677m0 4.5v-4.5m0 0h-12\" />\n </svg>\n )\n}\n\nexport function IconCursor({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2 1l12 5.5-5.5 1.5L7 13.5 2 1z\" />\n </svg>\n );\n}\n\nexport function IconHand({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8 1a1 1 0 011 1v4.586l1.293-1.293a1 1 0 111.414 1.414L8 10.414 4.293 6.707a1 1 0 111.414-1.414L7 6.586V2a1 1 0 011-1z\" />\n <path d=\"M3 8a1 1 0 011-1h.5V4.5a1 1 0 012 0V7h1V3.5a1 1 0 012 0V7h1V4.5a1 1 0 012 0V9a5 5 0 01-5 5H6A3 3 0 013 11V8z\" />\n </svg>\n );\n}\n\nexport function IconGrid({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path\n fillRule=\"evenodd\"\n d=\"M1 1h6v6H1V1zm8 0h6v6H9V1zM1 9h6v6H1V9zm8 0h6v6H9V9z\"\n clipRule=\"evenodd\"\n opacity={0.7}\n />\n </svg>\n );\n}\n\nexport function IconZoomIn({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM6 4.75a.75.75 0 011.5 0V6h1.25a.75.75 0 010 1.5H7.5v1.25a.75.75 0 01-1.5 0V7.5H4.75a.75.75 0 010-1.5H6V4.75z\" />\n </svg>\n );\n}\n\nexport function IconZoomOut({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M6.5 1a5.5 5.5 0 104.39 8.803l3.154 3.153a.75.75 0 001.06-1.06l-3.153-3.154A5.5 5.5 0 006.5 1zM2.5 6.5a4 4 0 118 0 4 4 0 01-8 0zM4.75 6a.75.75 0 000 1.5h3.5a.75.75 0 000-1.5h-3.5z\" />\n </svg>\n );\n}\n\nexport function IconReset({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8 1a7 7 0 100 14A7 7 0 008 1zm0 1.5a5.5 5.5 0 110 11 5.5 5.5 0 010-11zM8 4a.75.75 0 01.75.75v3.19l1.28 1.28a.75.75 0 01-1.06 1.06l-1.5-1.5A.75.75 0 017.25 8V4.75A.75.75 0 018 4z\" />\n </svg>\n );\n}\n\nexport function IconUndo({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2.5 5.5A.5.5 0 013 5h5a5 5 0 110 10H3a.5.5 0 010-1h5a4 4 0 100-8H3.707l1.647 1.646a.5.5 0 01-.708.708l-2.5-2.5a.5.5 0 010-.708l2.5-2.5a.5.5 0 01.708.708L3.207 5H3a.5.5 0 01-.5-.5z\" />\n </svg>\n );\n}\n\nexport function IconRedo({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M13.5 5.5A.5.5 0 0113 5H8a4 4 0 100 8h5a.5.5 0 010 1H8A5 5 0 118 5h4.293l-1.647-1.646a.5.5 0 01.708-.708l2.5 2.5a.5.5 0 010 .708l-2.5 2.5a.5.5 0 01-.708-.708L12.793 6H13a.5.5 0 01.5.5z\" />\n </svg>\n );\n}\n\nexport function IconPlace({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M2 2a.5.5 0 01.5-.5h2a.5.5 0 010 1H3v1.5a.5.5 0 01-1 0V2zm11 0a.5.5 0 00-.5-.5h-2a.5.5 0 000 1H12v1.5a.5.5 0 001 0V2zM2 14a.5.5 0 00.5.5h2a.5.5 0 000-1H3v-1.5a.5.5 0 00-1 0V14zm11 0a.5.5 0 01-.5.5h-2a.5.5 0 010-1H12v-1.5a.5.5 0 011 0V14zM8 4.5a.5.5 0 000 1V7H6.5a.5.5 0 000 1H8v1.5a.5.5 0 001 0V8h1.5a.5.5 0 000-1H9V5.5a.5.5 0 00-1 0z\" />\n </svg>\n );\n}\n\nexport function IconErase({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8.086 2.207a2 2 0 012.828 0l2.879 2.878a2 2 0 010 2.83l-7.513 7.51A2 2 0 014.872 16H2.4a1 1 0 01-.966-.741L.8 13.2a2 2 0 01.5-1.946l7.786-9.047zM7.586 5L5 7.586 8.414 11 11 8.414 7.586 5zM6 12L4 10l-1.5 1.5a1 1 0 000 1.414l.587.587A1 1 0 003.793 15H5l1-1-1-1 1-1z\" />\n </svg>\n );\n}\n\nexport function IconDuplicate({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M4 2a2 2 0 00-2 2v8a2 2 0 002 2h8a2 2 0 002-2V4a2 2 0 00-2-2H4zm0 1h8a1 1 0 011 1v8a1 1 0 01-1 1H4a1 1 0 01-1-1V4a1 1 0 011-1z\" />\n <path d=\"M2 5H1a1 1 0 00-1 1v8a1 1 0 001 1h8a1 1 0 001-1v-1H9v1H1V6h1V5z\" />\n </svg>\n );\n}\n\nexport function IconWall({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n {/* Two parallel lines forming a wall corner — represents wall cross-section */}\n <path strokeWidth=\"2\" d=\"M3 14 L3 2 L14 2\" />\n <path strokeWidth=\"2\" d=\"M6 14 L6 5 L14 5\" />\n </svg>\n );\n}\n\nexport function IconDownload({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z\"/>\n <path d=\"M7.646 11.854a.5.5 0 00.708 0l3-3a.5.5 0 00-.708-.708L8.5 10.293V1.5a.5.5 0 00-1 0v8.793L5.354 8.146a.5.5 0 10-.708.708l3 3z\"/>\n </svg>\n );\n}\n\nexport function IconUpload({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z\"/>\n <path d=\"M7.646 1.146a.5.5 0 01.708 0l3 3a.5.5 0 01-.708.708L8.5 2.707V11.5a.5.5 0 01-1 0V2.707L5.354 4.854a.5.5 0 11-.708-.708l3-3z\"/>\n </svg>\n );\n}\n\nexport function IconPolygon({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"none\" stroke=\"currentColor\" strokeLinejoin=\"round\">\n <path strokeWidth=\"1.5\" d=\"M8 2 L14 6 L12 13 L4 13 L2 6 Z\"/>\n <circle cx=\"8\" cy=\"2\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"14\" cy=\"6\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"12\" cy=\"13\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"4\" cy=\"13\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n <circle cx=\"2\" cy=\"6\" r=\"1.5\" fill=\"currentColor\" stroke=\"none\"/>\n </svg>\n );\n}\n\nexport function IconLayers({ className }: Props) {\n return (\n <svg viewBox=\"0 0 16 16\" className={className} fill=\"currentColor\">\n <path d=\"M8.235 1.559a.5.5 0 0 0-.47 0l-7.5 4a.5.5 0 0 0 0 .882L3.188 8 .265 9.559a.5.5 0 0 0 0 .882l7.5 4a.5.5 0 0 0 .47 0l7.5-4a.5.5 0 0 0 0-.882L12.813 8l2.922-1.559a.5.5 0 0 0 0-.882l-7.5-4zm3.515 7.008L14.438 10 8 13.433 1.562 10 4.25 8.567l3.515 1.874a.5.5 0 0 0 .47 0l3.515-1.874zM8 9.433 1.562 6 8 2.567 14.438 6 8 9.433z\"/>\n </svg>\n );\n}","import { AnimateSpin } from '../icons/icons';\nimport { type ButtonHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: 'primary' | 'secondary' | 'icon' | 'danger' | 'success' | 'outline' | 'nav' | 'custom' | 'link' | 'warning' | 'toggle';\n children: ReactNode;\n isLoading?: boolean;\n loadingText?: string;\n isActive?: boolean;\n}\n\nexport const Button: FC<ButtonProps> = ({\n variant = 'primary',\n children,\n isLoading = false,\n loadingText,\n isActive = false,\n className = '',\n disabled,\n ...props\n}) => {\n const baseClasses = 'transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed cursor-pointer';\n\n const variantClasses = {\n primary: 'py-2 px-2 border border-indigo-600/20 dark:border-indigo-500/20 text-sm font-medium rounded-md text-white bg-indigo-600 hover:bg-indigo-700 dark:bg-indigo-500 dark:hover:bg-indigo-600 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n secondary: 'p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-200 dark:hover:bg-gray-800 rounded-md border border-gray-300 dark:border-gray-600 shadow-sm hover:shadow-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n icon: 'p-2 text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white hover:bg-gray-200 dark:hover:bg-gray-800 rounded-full focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n danger: 'py-2 px-2 border border-red-600/20 dark:border-red-500/20 text-sm font-medium rounded-md text-white bg-red-600 hover:bg-red-700 dark:bg-red-500 dark:hover:bg-red-600 focus:outline-none focus:ring-2 focus:ring-red-500 dark:focus:ring-red-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n success: 'py-2 px-2 border border-green-600/20 dark:border-green-500/20 text-sm font-medium rounded-md text-white bg-green-600 hover:bg-green-700 dark:bg-green-500 dark:hover:bg-green-600 focus:outline-none focus:ring-2 focus:ring-green-500 dark:focus:ring-green-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n outline: 'py-2 px-2 border border-gray-300 dark:border-gray-600 text-sm font-medium rounded-md text-gray-700 dark:text-gray-300 bg-transparent hover:bg-gray-100 dark:hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n nav: 'w-full flex items-center px-4 py-2 text-sm font-medium rounded-md transition-all duration-200 hover:scale-105 text-gray-700 dark:text-gray-300 dark:hover:text-white hover:shadow-lg focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n custom: \"\",\n link: 'text-sm text-indigo-600 dark:text-indigo-400 hover:text-indigo-700 dark:hover:text-indigo-300 transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900 rounded-lg px-2',\n warning: 'py-2 px-2 border border-yellow-600/20 dark:border-yellow-500/20 text-sm font-medium rounded-md text-white bg-yellow-600 hover:bg-yellow-700 dark:bg-yellow-500 dark:hover:bg-yellow-600 focus:outline-none focus:ring-2 focus:ring-yellow-500 dark:focus:ring-yellow-400 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900',\n toggle: 'px-2 py-2 rounded-lg font-medium transition-all duration-200 disabled:cursor-not-allowed border-2 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 focus:ring-offset-gray-50 dark:focus:ring-offset-gray-900'\n };\n\n let classes = `${baseClasses} ${variantClasses[variant]} ${className}`;\n\n if (variant === 'nav' && isActive) {\n classes += ' bg-indigo-600 dark:bg-indigo-500 hover:bg-indigo-700 dark:hover:bg-indigo-600 text-white shadow-lg scale-105';\n }\n\n if (variant === 'nav' && !isActive) {\n classes += ' hover:bg-white dark:hover:bg-gray-700 hover:shadow-lg';\n }\n\n if (variant === 'toggle') {\n if (isActive) {\n classes += ' bg-indigo-600 text-white border-indigo-600/30 dark:border-indigo-500/30 hover:bg-indigo-700';\n } else {\n classes += ' bg-gray-200 dark:bg-gray-700 text-gray-700 dark:text-gray-300 border-gray-300 dark:border-gray-600 hover:bg-gray-300 dark:hover:bg-gray-600 hover:border-gray-400 dark:hover:border-gray-500';\n }\n }\n\n return (\n <button\n className={classes}\n disabled={disabled || isLoading}\n {...props}\n >\n {isLoading ? (\n <>\n <AnimateSpin className=\"h-5 w-5 mr-2 inline-block text-current\" />\n {loadingText || 'Cargando...'}\n </>\n ) : (\n children\n )}\n </button>\n );\n};","import { type InputHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface InputProps extends InputHTMLAttributes<HTMLInputElement> {\n label?: string | ReactNode;\n error?: string;\n helperText?: string;\n icon?: ReactNode;\n iconSide?: 'left' | 'right';\n}\n\nexport const Input: FC<InputProps> = ({\n label,\n error,\n helperText,\n icon,\n iconSide = 'left',\n className = '',\n id,\n type,\n ...props\n}) => {\n const inputId = id || `input-${Math.random().toString(36).substring(2, 9)}`;\n\n // ── Default text input ────────────────────────────────────────────────────\n const baseClasses = 'appearance-none relative block w-full px-3 py-2 border placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white bg-white dark:bg-gray-800 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200';\n const errorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : 'border-gray-300 dark:border-gray-600';\n const iconPaddingLeft = icon && iconSide === 'left' ? 'pl-9' : '';\n const iconPaddingRight = icon && iconSide === 'right' ? 'pr-9' : '';\n const classes = `${baseClasses} ${errorClasses} ${iconPaddingLeft} ${iconPaddingRight} ${className}`.trim();\n\n // ── Checkbox / Radio ──────────────────────────────────────────────────────\n const toggleShape = type === 'radio' ? 'rounded-full' : 'rounded';\n const toggleBaseClasses = `h-4 w-4 ${toggleShape} border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800 text-indigo-600 dark:text-indigo-400 focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-gray-900 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 cursor-pointer`;\n const toggleErrorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400' : '';\n const toggleClasses = `${toggleBaseClasses} ${toggleErrorClasses}`.trim();\n\n // ── File input ────────────────────────────────────────────────────────────\n const fileBaseClasses = 'block w-full sm:text-sm text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 border rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 file:mr-4 file:py-2 file:px-4 file:rounded-l-md file:border-0 file:text-sm file:font-medium file:bg-indigo-50 file:text-indigo-700 dark:file:bg-indigo-900/50 dark:file:text-indigo-300 hover:file:bg-indigo-100 dark:hover:file:bg-indigo-800/50 file:transition-colors file:duration-200 file:cursor-pointer';\n const fileErrorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400' : 'border-gray-300 dark:border-gray-600';\n const fileClasses = `${fileBaseClasses} ${fileErrorClasses} ${className}`.trim();\n\n const hasHidden = Boolean(className && /\\bhidden\\b/.test(className));\n const wrapperBase = 'space-y-1 w-full';\n const wrapperClasses = hasHidden ? `${wrapperBase} hidden` : wrapperBase;\n\n const labelNode = label && (\n typeof label === 'string' ? (\n <label htmlFor={inputId} className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n ) : label\n );\n\n const errorNode = error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">{error}</p>\n );\n\n const helperNode = helperText && !error && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">{helperText}</p>\n );\n\n if (type === 'checkbox' || type === 'radio') {\n return (\n <div className={wrapperClasses}>\n <div className=\"flex items-center space-x-2\">\n <input id={inputId} type={type} className={toggleClasses} {...props} />\n {labelNode}\n </div>\n {errorNode}\n {helperNode}\n </div>\n );\n }\n\n if (type === 'file') {\n return (\n <div className={wrapperClasses}>\n {labelNode}\n <input id={inputId} type=\"file\" className={fileClasses} {...props} />\n {errorNode}\n {helperNode}\n </div>\n );\n }\n\n return (\n <div className={wrapperClasses}>\n {labelNode}\n <div className=\"relative\">\n {icon && iconSide === 'left' && (\n <div className=\"pointer-events-none absolute inset-y-0 left-0 z-10 flex items-center pl-3 text-gray-400 dark:text-gray-500\">\n {icon}\n </div>\n )}\n <input id={inputId} className={classes} type={type} {...props} />\n {icon && iconSide === 'right' && (\n <div className=\"pointer-events-none absolute inset-y-0 right-0 z-10 flex items-center pr-3 text-gray-400 dark:text-gray-500\">\n {icon}\n </div>\n )}\n </div>\n {errorNode}\n {helperNode}\n </div>\n );\n};\n","import { type TextareaHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n label?: string | ReactNode;\n error?: string;\n helperText?: string;\n variant?: 'default' | 'outline' | 'filled' | 'minimal';\n size?: 'small' | 'medium' | 'large';\n}\n\nexport const TextArea: FC<TextAreaProps> = ({\n label,\n error,\n helperText,\n variant = 'default',\n size = 'medium',\n className = '',\n id,\n ...props\n}) => {\n const textAreaId = id || `textarea-${Math.random().toString(36).substring(2, 9)}`;\n\n const sizeClasses = {\n small: 'px-2 py-1 text-xs',\n medium: 'px-3 py-2 text-sm',\n large: 'px-4 py-3 text-base'\n };\n\n const variantClasses = {\n default: 'border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-800',\n outline: 'border-2 border-indigo-300 dark:border-indigo-600 bg-transparent',\n filled: 'border-gray-300 dark:border-gray-600 bg-gray-100 dark:bg-gray-700',\n minimal: 'border-0 bg-transparent focus:ring-0 focus:border-0'\n };\n\n const baseClasses = 'appearance-none relative block w-full placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white rounded-md border focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200 resize-y';\n\n const errorClasses = error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : '';\n\n const classes = `${baseClasses} ${sizeClasses[size]} ${variantClasses[variant]} ${errorClasses} ${className}`;\n\n return (\n <div className=\"space-y-1 w-full\">\n {label && typeof label === 'string' ? (\n <label\n htmlFor={textAreaId}\n className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {label}\n </label>\n ) : (\n label\n )}\n <textarea\n id={textAreaId}\n className={classes}\n {...props}\n />\n {error && (\n <p className=\"text-sm text-red-600 dark:text-red-400\" role=\"alert\">\n {error}\n </p>\n )}\n {helperText && !error && (\n <p className=\"text-sm text-gray-500 dark:text-gray-400\">\n {helperText}\n </p>\n )}\n </div>\n );\n};","import { type FormHTMLAttributes, type FC, type FormEvent, type ReactNode } from 'react';\n\ninterface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n children: ReactNode;\n onSubmit?: (e: FormEvent<HTMLFormElement>) => void;\n variant?: 'default' | 'modal' | 'card' | 'inline' | 'compact';\n}\n\nexport const Form: FC<FormProps> = ({ onSubmit, children, variant = 'default', className = '', ...props }) => {\n const handleSubmit = (e: FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n if (onSubmit) {\n onSubmit(e);\n }\n };\n\n const getVariantClasses = () => {\n switch (variant) {\n case 'modal':\n return 'flex-1 px-6 py-4 overflow-y-auto';\n case 'card':\n return 'p-6 space-y-6';\n case 'inline':\n return 'flex flex-wrap gap-4 items-end';\n case 'compact':\n return 'space-y-3';\n case 'default':\n default:\n return 'space-y-4';\n }\n };\n\n const combinedClassName = `${getVariantClasses()} ${className}`.trim();\n\n return (\n <form onSubmit={handleSubmit} className={combinedClassName} {...props}>\n {children}\n </form>\n );\n};","import { type SelectHTMLAttributes, type FC, type ReactNode } from 'react';\n\ninterface Option {\n value: string | number;\n label: string;\n disabled?: boolean;\n selected?: boolean;\n}\n\ninterface SelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>, 'size'> {\n options: Option[];\n placeholder?: string;\n variant?: 'default' | 'small';\n error?: boolean;\n helperText?: string;\n label?: string | ReactNode;\n}\n\nexport const Select: FC<SelectProps> = ({\n options,\n placeholder,\n variant = 'default',\n error = false,\n helperText,\n label,\n className = '',\n id,\n ...props\n}) => {\n const selectId = id || `select-${Math.random().toString(36).substring(2, 9)}`;\n\n const getVariantClasses = () => {\n const baseClasses = 'appearance-none relative block w-full px-3 py-2 border placeholder-gray-500 dark:placeholder-gray-400 text-gray-900 dark:text-white bg-white dark:bg-gray-800 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-500 dark:focus:ring-indigo-400 focus:border-indigo-500 focus:z-10 sm:text-sm disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200';\n\n if (variant === 'small') {\n return `${baseClasses.replace('px-3 py-2', 'px-2.5 py-1.5 text-sm')} border-gray-300 dark:border-gray-600`;\n }\n\n return `${baseClasses} border-gray-300 dark:border-gray-600 ${error ? 'border-red-300 dark:border-red-600 focus:ring-red-500 dark:focus:ring-red-400 focus:border-red-500' : ''}`;\n };\n\n const getOptionClasses = (option: Option) => {\n return `bg-white dark:bg-gray-800 text-gray-900 dark:text-white py-2 ${option.disabled ? 'opacity-50 cursor-not-allowed' : ''}`;\n };\n\n const combinedClassName = `${getVariantClasses()} ${className}`.trim();\n\n return (\n <div className=\"space-y-1 w-full\">\n {label && typeof label === 'string' ? (\n <label htmlFor={selectId} className=\"block text-sm font-medium text-gray-700 dark:text-gray-300\">\n {label}\n </label>\n ) : (\n label\n )}\n <select id={selectId} className={combinedClassName} {...props}>\n {placeholder && placeholder.trim() && (\n <option value=\"\" disabled selected className=\"bg-white dark:bg-gray-800 text-gray-500 dark:text-gray-400 py-2\">\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n selected={option.selected}\n className={getOptionClasses(option)}\n >\n {option.label}\n </option>\n ))}\n </select>\n {helperText && (\n <p className={`text-sm ${error ? 'text-red-600 dark:text-red-400' : 'text-gray-500 dark:text-gray-400'}`}>\n {helperText}\n </p>\n )}\n </div>\n );\n};","import { type ReactNode, type CSSProperties } from 'react';\n\ntype TableVariant = 'default' | 'striped' | 'bordered' | 'minimal' | 'custom';\ntype TableSize = 'sm' | 'md' | 'lg';\n\ninterface ColumnDef {\n /** Contenido del encabezado */\n header: ReactNode;\n /** Clase CSS adicional para toda la columna (th + td) */\n className?: string;\n /** Alinear el contenido de esta columna */\n align?: 'left' | 'center' | 'right';\n}\n\ninterface TableProps {\n /**\n * Definición de columnas con encabezado y opciones por columna.\n * Si pasas strings simples, los usa como encabezados sin configuración extra.\n */\n columns: (ColumnDef | ReactNode)[];\n\n /** Filas de la tabla. Cada fila es un arreglo de celdas. */\n rows: ReactNode[][];\n\n /** Estilo visual de la tabla. Default: 'default' */\n variant?: TableVariant;\n\n /** Tamaño de padding de celdas. Default: 'md' */\n size?: TableSize;\n\n /** Clase CSS adicional para el wrapper `<div>` externo */\n className?: string;\n\n /** Clase CSS adicional para el `<table>` */\n tableClassName?: string;\n\n /** Clase CSS adicional para cada `<th>` */\n thClassName?: string;\n\n /** Clase CSS adicional para cada `<td>` */\n tdClassName?: string;\n\n /** Clase CSS adicional para cada `<tr>` del body */\n trClassName?: string | ((rowIndex: number) => string);\n\n /** Texto o nodo a mostrar cuando `rows` está vacío */\n emptyState?: ReactNode;\n\n /** Callback al hacer click en una fila */\n onRowClick?: (rowIndex: number) => void;\n\n /** Si true, no muestra thead */\n hideHeader?: boolean;\n\n /** Estilos inline para el `<table>` */\n style?: CSSProperties;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction isColumnDef(col: ColumnDef | ReactNode): col is ColumnDef {\n return typeof col === 'object' && col !== null && 'header' in (col as object);\n}\n\nfunction resolveColumn(col: ColumnDef | ReactNode): ColumnDef {\n if (isColumnDef(col)) return col;\n return { header: col };\n}\n\nconst ALIGN_CLASS: Record<string, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n};\n\nconst SIZE_TH: Record<TableSize, string> = {\n sm: 'px-2 py-1.5 text-xs',\n md: 'px-3 py-2.5 text-xs',\n lg: 'px-4 py-3.5 text-sm',\n};\n\nconst SIZE_TD: Record<TableSize, string> = {\n sm: 'px-2 py-1.5 text-xs',\n md: 'px-3 py-2.5 text-sm',\n lg: 'px-4 py-3.5 text-sm',\n};\n\nconst VARIANT_TABLE: Record<TableVariant, string> = {\n default: 'w-full min-w-full table-auto',\n striped: 'w-full min-w-full table-auto',\n bordered: 'w-full min-w-full table-auto border border-gray-300 dark:border-gray-600',\n minimal: 'w-full min-w-full table-auto',\n custom: 'w-full min-w-full table-auto',\n};\n\nconst VARIANT_THEAD: Record<TableVariant, string> = {\n default: 'bg-gray-100 dark:bg-gray-700',\n striped: 'bg-gray-100 dark:bg-gray-700',\n bordered: 'bg-gray-100 dark:bg-gray-700',\n minimal: '',\n custom: '',\n};\n\nconst VARIANT_TH: Record<TableVariant, string> = {\n default: 'font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300',\n striped: 'font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300',\n bordered: 'font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300 border border-gray-300 dark:border-gray-600',\n minimal: 'font-semibold text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700',\n custom: '',\n};\n\nconst VARIANT_TR: Record<TableVariant, (i: number) => string> = {\n default: () => 'bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/60 transition-colors',\n striped: (i) => `${i % 2 === 0 ? 'bg-white dark:bg-gray-800' : 'bg-gray-50 dark:bg-gray-700/40'} hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-colors`,\n bordered: () => 'bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/60 transition-colors',\n minimal: () => 'hover:bg-gray-50 dark:hover:bg-gray-800/60 transition-colors',\n custom: () => '',\n};\n\nconst VARIANT_TD: Record<TableVariant, string> = {\n default: 'text-gray-700 dark:text-gray-300',\n striped: 'text-gray-700 dark:text-gray-300',\n bordered: 'text-gray-700 dark:text-gray-300 border border-gray-200 dark:border-gray-700',\n minimal: 'text-gray-700 dark:text-gray-300 border-b border-gray-100 dark:border-gray-800',\n custom: '',\n};\n\nconst VARIANT_TBODY_DIVIDER: Record<TableVariant, string> = {\n default: 'divide-y divide-gray-200 dark:divide-gray-700',\n striped: '',\n bordered: '',\n minimal: '',\n custom: '',\n};\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport function Table({\n columns,\n rows,\n variant = 'default',\n size = 'md',\n className = '',\n tableClassName = '',\n thClassName = '',\n tdClassName = '',\n trClassName,\n emptyState,\n onRowClick,\n hideHeader = false,\n style,\n}: TableProps) {\n const cols = columns.map(resolveColumn);\n\n const resolvedTrClass = (i: number): string => {\n const variantCls = VARIANT_TR[variant](i);\n const clickCls = onRowClick ? 'cursor-pointer' : '';\n const customCls = typeof trClassName === 'function' ? trClassName(i) : (trClassName ?? '');\n return `${variantCls} ${clickCls} ${customCls}`.trim();\n };\n\n return (\n <div className={`overflow-x-auto w-full ${className}`.trim()}>\n <table\n className={`${VARIANT_TABLE[variant]} ${tableClassName}`.trim()}\n style={style}\n >\n {!hideHeader && (\n <thead className={VARIANT_THEAD[variant]}>\n <tr>\n {cols.map((col, i) => (\n <th\n key={i}\n className={[\n SIZE_TH[size],\n VARIANT_TH[variant],\n ALIGN_CLASS[col.align ?? 'left'],\n col.className ?? '',\n thClassName,\n ].filter(Boolean).join(' ')}\n >\n {col.header}\n </th>\n ))}\n </tr>\n </thead>\n )}\n <tbody className={VARIANT_TBODY_DIVIDER[variant]}>\n {rows.length === 0 ? (\n <tr>\n <td\n colSpan={cols.length}\n className={`${SIZE_TD[size]} text-center text-gray-400 dark:text-gray-500 py-8`}\n >\n {emptyState ?? 'Sin datos'}\n </td>\n </tr>\n ) : (\n rows.map((row, rowIndex) => (\n <tr\n key={rowIndex}\n className={resolvedTrClass(rowIndex)}\n onClick={onRowClick ? () => onRowClick(rowIndex) : undefined}\n >\n {row.map((cell, cellIndex) => {\n const col = cols[cellIndex];\n return (\n <td\n key={cellIndex}\n className={[\n SIZE_TD[size],\n VARIANT_TD[variant],\n ALIGN_CLASS[col?.align ?? 'left'],\n col?.className ?? '',\n tdClassName,\n ].filter(Boolean).join(' ')}\n >\n {cell}\n </td>\n );\n })}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}","import { Button } from './Button';\nimport { CloseIcon } from '../icons/icons';\nimport React, { useEffect, useState, forwardRef, useImperativeHandle } from 'react';\n\ninterface ModalProps {\n onClose: () => void;\n title: string;\n children: React.ReactNode;\n footer?: React.ReactNode;\n maxWidth?: string;\n showCloseButton?: boolean;\n zIndex?: number;\n}\n\nexport interface ModalRef {\n handleClose: () => void;\n}\n\nexport const Modal = forwardRef<ModalRef, ModalProps>(({\n onClose,\n title,\n children,\n footer,\n maxWidth = 'max-w-2xl',\n showCloseButton = true,\n zIndex = 50\n}, ref) => {\n const [show, setShow] = useState(false);\n\n useEffect(() => {\n setShow(true);\n }, []);\n\n const handleClose = () => {\n setShow(false);\n setTimeout(() => {\n onClose();\n }, 300);\n };\n\n useImperativeHandle(ref, () => ({\n handleClose\n }));\n\n return (\n <dialog\n open={show}\n className={`fixed inset-0 w-full h-full flex items-center justify-center p-4 ${show && 'opacity-100'} transition-opacity opacity-0 duration-300 bg-gray-900/60 backdrop-blur-sm`}\n style={{ zIndex: zIndex - 10 }}\n >\n <article\n className={`relative bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg shadow-2xl w-full ${maxWidth} max-h-[90vh] flex flex-col overflow-hidden`}\n style={{ zIndex }}\n >\n <header className=\"shrink-0 bg-gray-50 dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 px-6 py-4 flex items-center justify-between\">\n <h2 className=\"text-2xl font-bold text-gray-900 dark:text-white\">{title}</h2>\n {showCloseButton && (\n <Button\n variant='icon'\n onClick={handleClose}\n className=\"text-gray-400 hover:text-gray-600 dark:hover:text-gray-300\"\n >\n <CloseIcon className=\"w-5 h-5\" />\n </Button>\n )}\n </header>\n <div className=\"flex-1 overflow-y-auto p-6\">\n {children}\n </div>\n {footer && (\n <footer className=\"shrink-0 bg-gray-50 dark:bg-gray-800 border-t border-gray-200 dark:border-gray-700 px-6 py-4 flex justify-end gap-3\">\n {footer}\n </footer>\n )}\n </article>\n </dialog>\n );\n});\n\nModal.displayName = 'Modal';","import { type FC } from 'react';\n\ninterface LoadingProps {\n variant?: 'spinner' | 'dots' | 'pulse' | 'bars' | 'ring' | 'cube';\n size?: 'small' | 'medium' | 'large' | 'xl';\n color?: 'primary' | 'white' | 'gray' | 'success' | 'danger' | 'warning';\n label?: string;\n className?: string;\n}\n\nexport const Loading: FC<LoadingProps> = ({\n variant = 'spinner',\n size = 'medium',\n color = 'primary',\n label,\n className = '',\n}) => {\n const sizeClasses = {\n small: 'h-4 w-4',\n medium: 'h-8 w-8',\n large: 'h-12 w-12',\n xl: 'h-16 w-16',\n };\n\n const colorClasses = {\n primary: 'text-indigo-600 dark:text-indigo-400',\n white: 'text-white',\n gray: 'text-gray-500 dark:text-gray-400',\n success: 'text-green-600 dark:text-green-400',\n danger: 'text-red-600 dark:text-red-400',\n warning: 'text-yellow-600 dark:text-yellow-400',\n };\n\n const renderIcon = () => {\n const commonClass = `${sizeClasses[size]} ${colorClasses[color]}`;\n\n switch (variant) {\n case 'dots':\n const dotSize = size === 'small' ? 'h-1 w-1' : size === 'medium' ? 'h-2 w-2' : size === 'large' ? 'h-3 w-3' : 'h-4 w-4';\n return (\n <div className={`flex space-x-1 ${colorClasses[color]}`}>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0s' }}></div>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0.15s' }}></div>\n <div className={`rounded-full bg-current animate-bounce ${dotSize}`} style={{ animationDelay: '0.3s' }}></div>\n </div>\n );\n \n case 'bars':\n return (\n <div className={`flex items-end space-x-1 ${sizeClasses[size]} ${colorClasses[color]}`}>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '60%', animationDelay: '0s' }}></div>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '100%', animationDelay: '0.2s' }}></div>\n <div className=\"w-1/4 bg-current animate-[pulse_1s_ease-in-out_infinite]\" style={{ height: '60%', animationDelay: '0.4s' }}></div>\n </div>\n );\n\n case 'pulse':\n return (\n <span className={`relative flex ${commonClass}`}>\n <span className=\"animate-ping absolute inline-flex h-full w-full rounded-full opacity-75 bg-current\"></span>\n <span className=\"relative inline-flex rounded-full h-full w-full bg-current\"></span>\n </span>\n );\n\n case 'cube':\n return (\n <div className={`${commonClass} grid grid-cols-2 gap-1`}>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '0s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '0.5s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '1.5s' }}></div>\n <div className=\"bg-current animate-[pulse_2s_ease-in-out_infinite]\" style={{ animationDelay: '1s' }}></div>\n </div>\n );\n\n case 'ring':\n return (\n <svg className={`${commonClass} animate-spin`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n );\n\n case 'spinner':\n default:\n return (\n <svg className={`${commonClass} animate-spin`} xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"></path>\n </svg>\n );\n }\n };\n\n return (\n <div className={`flex flex-col items-center justify-center w-full h-full min-h-[inherit] ${className}`} role=\"status\">\n {renderIcon()}\n {label && (\n <span className={`mt-3 text-sm font-medium ${colorClasses[color]}`}>\n {label}\n </span>\n )}\n </div>\n );\n};\n"]}
@@ -259,24 +259,147 @@ var Select = ({
259
259
  helperText && /* @__PURE__ */ jsx("p", { className: `text-sm ${error ? "text-red-600 dark:text-red-400" : "text-gray-500 dark:text-gray-400"}`, children: helperText })
260
260
  ] });
261
261
  };
262
+ function isColumnDef(col) {
263
+ return typeof col === "object" && col !== null && "header" in col;
264
+ }
265
+ function resolveColumn(col) {
266
+ if (isColumnDef(col)) return col;
267
+ return { header: col };
268
+ }
269
+ var ALIGN_CLASS = {
270
+ left: "text-left",
271
+ center: "text-center",
272
+ right: "text-right"
273
+ };
274
+ var SIZE_TH = {
275
+ sm: "px-2 py-1.5 text-xs",
276
+ md: "px-3 py-2.5 text-xs",
277
+ lg: "px-4 py-3.5 text-sm"
278
+ };
279
+ var SIZE_TD = {
280
+ sm: "px-2 py-1.5 text-xs",
281
+ md: "px-3 py-2.5 text-sm",
282
+ lg: "px-4 py-3.5 text-sm"
283
+ };
284
+ var VARIANT_TABLE = {
285
+ default: "w-full min-w-full table-auto",
286
+ striped: "w-full min-w-full table-auto",
287
+ bordered: "w-full min-w-full table-auto border border-gray-300 dark:border-gray-600",
288
+ minimal: "w-full min-w-full table-auto",
289
+ custom: "w-full min-w-full table-auto"
290
+ };
291
+ var VARIANT_THEAD = {
292
+ default: "bg-gray-100 dark:bg-gray-700",
293
+ striped: "bg-gray-100 dark:bg-gray-700",
294
+ bordered: "bg-gray-100 dark:bg-gray-700",
295
+ minimal: "",
296
+ custom: ""
297
+ };
298
+ var VARIANT_TH = {
299
+ default: "font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300",
300
+ striped: "font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300",
301
+ bordered: "font-semibold uppercase tracking-wider text-gray-600 dark:text-gray-300 border border-gray-300 dark:border-gray-600",
302
+ minimal: "font-semibold text-gray-500 dark:text-gray-400 border-b border-gray-200 dark:border-gray-700",
303
+ custom: ""
304
+ };
305
+ var VARIANT_TR = {
306
+ default: () => "bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/60 transition-colors",
307
+ striped: (i) => `${i % 2 === 0 ? "bg-white dark:bg-gray-800" : "bg-gray-50 dark:bg-gray-700/40"} hover:bg-blue-50 dark:hover:bg-blue-900/20 transition-colors`,
308
+ bordered: () => "bg-white dark:bg-gray-800 hover:bg-gray-50 dark:hover:bg-gray-700/60 transition-colors",
309
+ minimal: () => "hover:bg-gray-50 dark:hover:bg-gray-800/60 transition-colors",
310
+ custom: () => ""
311
+ };
312
+ var VARIANT_TD = {
313
+ default: "text-gray-700 dark:text-gray-300",
314
+ striped: "text-gray-700 dark:text-gray-300",
315
+ bordered: "text-gray-700 dark:text-gray-300 border border-gray-200 dark:border-gray-700",
316
+ minimal: "text-gray-700 dark:text-gray-300 border-b border-gray-100 dark:border-gray-800",
317
+ custom: ""
318
+ };
319
+ var VARIANT_TBODY_DIVIDER = {
320
+ default: "divide-y divide-gray-200 dark:divide-gray-700",
321
+ striped: "",
322
+ bordered: "",
323
+ minimal: "",
324
+ custom: ""
325
+ };
262
326
  function Table({
263
- headers,
327
+ columns,
264
328
  rows,
265
329
  variant = "default",
330
+ size = "md",
266
331
  className = "",
332
+ tableClassName = "",
267
333
  thClassName = "",
268
- tdClassName = ""
334
+ tdClassName = "",
335
+ trClassName,
336
+ emptyState,
337
+ onRowClick,
338
+ hideHeader = false,
339
+ style
269
340
  }) {
270
- const baseTableClass = variant === "default" ? "w-full table-auto border-collapse border border-gray-300 dark:border-gray-600 min-w-full" : "";
271
- const baseThClass = variant === "default" ? "border border-gray-300 dark:border-gray-600 px-4 py-2 text-left text-gray-900 dark:text-white" : "";
272
- const baseTdClass = variant === "default" ? "border border-gray-300 dark:border-gray-600 px-4 py-2 text-gray-900 dark:text-white" : "";
273
- const tableClass = `${baseTableClass} ${className}`.trim();
274
- const thClass = `${baseThClass} ${thClassName}`.trim();
275
- const tdClass = `${baseTdClass} ${tdClassName}`.trim();
276
- return /* @__PURE__ */ jsx("div", { className: "overflow-x-auto w-full", children: /* @__PURE__ */ jsxs("table", { className: tableClass, children: [
277
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { className: variant === "default" ? "bg-gray-100 dark:bg-gray-700" : "", children: headers.map((header, index) => /* @__PURE__ */ jsx("th", { className: thClass, children: header }, index)) }) }),
278
- /* @__PURE__ */ jsx("tbody", { children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx("tr", { className: variant === "default" ? "hover:bg-gray-50 dark:hover:bg-gray-600" : "", children: row.map((cell, cellIndex) => /* @__PURE__ */ jsx("td", { className: tdClass, children: cell }, cellIndex)) }, rowIndex)) })
279
- ] }) });
341
+ const cols = columns.map(resolveColumn);
342
+ const resolvedTrClass = (i) => {
343
+ const variantCls = VARIANT_TR[variant](i);
344
+ const clickCls = onRowClick ? "cursor-pointer" : "";
345
+ const customCls = typeof trClassName === "function" ? trClassName(i) : trClassName ?? "";
346
+ return `${variantCls} ${clickCls} ${customCls}`.trim();
347
+ };
348
+ return /* @__PURE__ */ jsx("div", { className: `overflow-x-auto w-full ${className}`.trim(), children: /* @__PURE__ */ jsxs(
349
+ "table",
350
+ {
351
+ className: `${VARIANT_TABLE[variant]} ${tableClassName}`.trim(),
352
+ style,
353
+ children: [
354
+ !hideHeader && /* @__PURE__ */ jsx("thead", { className: VARIANT_THEAD[variant], children: /* @__PURE__ */ jsx("tr", { children: cols.map((col, i) => /* @__PURE__ */ jsx(
355
+ "th",
356
+ {
357
+ className: [
358
+ SIZE_TH[size],
359
+ VARIANT_TH[variant],
360
+ ALIGN_CLASS[col.align ?? "left"],
361
+ col.className ?? "",
362
+ thClassName
363
+ ].filter(Boolean).join(" "),
364
+ children: col.header
365
+ },
366
+ i
367
+ )) }) }),
368
+ /* @__PURE__ */ jsx("tbody", { className: VARIANT_TBODY_DIVIDER[variant], children: rows.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
369
+ "td",
370
+ {
371
+ colSpan: cols.length,
372
+ className: `${SIZE_TD[size]} text-center text-gray-400 dark:text-gray-500 py-8`,
373
+ children: emptyState ?? "Sin datos"
374
+ }
375
+ ) }) : rows.map((row, rowIndex) => /* @__PURE__ */ jsx(
376
+ "tr",
377
+ {
378
+ className: resolvedTrClass(rowIndex),
379
+ onClick: onRowClick ? () => onRowClick(rowIndex) : void 0,
380
+ children: row.map((cell, cellIndex) => {
381
+ const col = cols[cellIndex];
382
+ return /* @__PURE__ */ jsx(
383
+ "td",
384
+ {
385
+ className: [
386
+ SIZE_TD[size],
387
+ VARIANT_TD[variant],
388
+ ALIGN_CLASS[col?.align ?? "left"],
389
+ col?.className ?? "",
390
+ tdClassName
391
+ ].filter(Boolean).join(" "),
392
+ children: cell
393
+ },
394
+ cellIndex
395
+ );
396
+ })
397
+ },
398
+ rowIndex
399
+ )) })
400
+ ]
401
+ }
402
+ ) });
280
403
  }
281
404
  var Modal = forwardRef(({
282
405
  onClose,