@insforge/react 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/lib.js CHANGED
@@ -40,7 +40,7 @@ function validateEmail(email) {
40
40
  if (result.success) {
41
41
  return { valid: true };
42
42
  }
43
- return { valid: false, error: result.error.errors[0]?.message };
43
+ return { valid: false, error: result.error.message };
44
44
  }
45
45
  function validatePassword(password, options) {
46
46
  const schema = createPasswordSchema(options);
@@ -48,7 +48,7 @@ function validatePassword(password, options) {
48
48
  if (result.success) {
49
49
  return { valid: true };
50
50
  }
51
- return { valid: false, error: result.error.errors[0]?.message };
51
+ return { valid: false, error: result.error.message };
52
52
  }
53
53
  function checkPasswordStrength(password) {
54
54
  const feedback = [];
package/dist/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/lib/validation.ts"],"names":["twMerge","clsx","z"],"mappings":"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","file":"lib.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Utility function to merge Tailwind CSS classes with clsx\r\n * Handles conditional classes and prevents style conflicts\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n","import { z } from 'zod';\r\n\r\n/**\r\n * Email validation schema\r\n */\r\nexport const emailSchema = z\r\n .string()\r\n .min(1, 'Email is required')\r\n .email('Invalid email address');\r\n\r\n/**\r\n * Password validation schema with configurable requirements\r\n */\r\nexport function createPasswordSchema(options?: {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecialChar?: boolean;\r\n}) {\r\n const {\r\n minLength = 6,\r\n requireUppercase = false,\r\n requireLowercase = false,\r\n requireNumber = false,\r\n requireSpecialChar = false,\r\n } = options || {};\r\n\r\n let schema = z.string().min(minLength, `Password must be at least ${minLength} characters`);\r\n\r\n if (requireUppercase) {\r\n schema = schema.regex(/[A-Z]/, 'Password must contain at least one uppercase letter');\r\n }\r\n\r\n if (requireLowercase) {\r\n schema = schema.regex(/[a-z]/, 'Password must contain at least one lowercase letter');\r\n }\r\n\r\n if (requireNumber) {\r\n schema = schema.regex(/\\d/, 'Password must contain at least one number');\r\n }\r\n\r\n if (requireSpecialChar) {\r\n schema = schema.regex(\r\n /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/,\r\n 'Password must contain at least one special character'\r\n );\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Default password schema (minimum 6 characters)\r\n */\r\nexport const passwordSchema = createPasswordSchema();\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function validateEmail(email: string): { valid: boolean; error?: string } {\r\n const result = emailSchema.safeParse(email);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.errors[0]?.message };\r\n}\r\n\r\n/**\r\n * Validate password format\r\n */\r\nexport function validatePassword(\r\n password: string,\r\n options?: Parameters<typeof createPasswordSchema>[0]\r\n): { valid: boolean; error?: string } {\r\n const schema = createPasswordSchema(options);\r\n const result = schema.safeParse(password);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.errors[0]?.message };\r\n}\r\n\r\n/**\r\n * Validate password strength based on multiple criteria\r\n */\r\nexport function checkPasswordStrength(password: string): {\r\n score: number;\r\n feedback: string[];\r\n} {\r\n const feedback: string[] = [];\r\n let score = 0;\r\n\r\n if (password.length >= 8) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use at least 8 characters');\r\n }\r\n\r\n if (password.length >= 12) {\r\n score += 1;\r\n }\r\n\r\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use both uppercase and lowercase letters');\r\n }\r\n\r\n if (/\\d/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one number');\r\n }\r\n\r\n if (/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one special character');\r\n }\r\n\r\n return { score, feedback };\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/lib/validation.ts"],"names":["twMerge","clsx","z"],"mappings":"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","file":"lib.js","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Utility function to merge Tailwind CSS classes with clsx\r\n * Handles conditional classes and prevents style conflicts\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n","import { z } from 'zod';\r\n\r\n/**\r\n * Email validation schema\r\n */\r\nexport const emailSchema = z\r\n .string()\r\n .min(1, 'Email is required')\r\n .email('Invalid email address');\r\n\r\n/**\r\n * Password validation schema with configurable requirements\r\n */\r\nexport function createPasswordSchema(options?: {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecialChar?: boolean;\r\n}) {\r\n const {\r\n minLength = 6,\r\n requireUppercase = false,\r\n requireLowercase = false,\r\n requireNumber = false,\r\n requireSpecialChar = false,\r\n } = options || {};\r\n\r\n let schema = z.string().min(minLength, `Password must be at least ${minLength} characters`);\r\n\r\n if (requireUppercase) {\r\n schema = schema.regex(/[A-Z]/, 'Password must contain at least one uppercase letter');\r\n }\r\n\r\n if (requireLowercase) {\r\n schema = schema.regex(/[a-z]/, 'Password must contain at least one lowercase letter');\r\n }\r\n\r\n if (requireNumber) {\r\n schema = schema.regex(/\\d/, 'Password must contain at least one number');\r\n }\r\n\r\n if (requireSpecialChar) {\r\n schema = schema.regex(\r\n /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/,\r\n 'Password must contain at least one special character'\r\n );\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Default password schema (minimum 6 characters)\r\n */\r\nexport const passwordSchema = createPasswordSchema();\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function validateEmail(email: string): { valid: boolean; error?: string } {\r\n const result = emailSchema.safeParse(email);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.message };\r\n}\r\n\r\n/**\r\n * Validate password format\r\n */\r\nexport function validatePassword(\r\n password: string,\r\n options?: Parameters<typeof createPasswordSchema>[0]\r\n): { valid: boolean; error?: string } {\r\n const schema = createPasswordSchema(options);\r\n const result = schema.safeParse(password);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.message };\r\n}\r\n\r\n/**\r\n * Validate password strength based on multiple criteria\r\n */\r\nexport function checkPasswordStrength(password: string): {\r\n score: number;\r\n feedback: string[];\r\n} {\r\n const feedback: string[] = [];\r\n let score = 0;\r\n\r\n if (password.length >= 8) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use at least 8 characters');\r\n }\r\n\r\n if (password.length >= 12) {\r\n score += 1;\r\n }\r\n\r\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use both uppercase and lowercase letters');\r\n }\r\n\r\n if (/\\d/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one number');\r\n }\r\n\r\n if (/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one special character');\r\n }\r\n\r\n return { score, feedback };\r\n}\r\n\r\n"]}
package/dist/lib.mjs CHANGED
@@ -38,7 +38,7 @@ function validateEmail(email) {
38
38
  if (result.success) {
39
39
  return { valid: true };
40
40
  }
41
- return { valid: false, error: result.error.errors[0]?.message };
41
+ return { valid: false, error: result.error.message };
42
42
  }
43
43
  function validatePassword(password, options) {
44
44
  const schema = createPasswordSchema(options);
@@ -46,7 +46,7 @@ function validatePassword(password, options) {
46
46
  if (result.success) {
47
47
  return { valid: true };
48
48
  }
49
- return { valid: false, error: result.error.errors[0]?.message };
49
+ return { valid: false, error: result.error.message };
50
50
  }
51
51
  function checkPasswordStrength(password) {
52
52
  const feedback = [];
package/dist/lib.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/lib/validation.ts"],"names":[],"mappings":"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","file":"lib.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Utility function to merge Tailwind CSS classes with clsx\r\n * Handles conditional classes and prevents style conflicts\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n","import { z } from 'zod';\r\n\r\n/**\r\n * Email validation schema\r\n */\r\nexport const emailSchema = z\r\n .string()\r\n .min(1, 'Email is required')\r\n .email('Invalid email address');\r\n\r\n/**\r\n * Password validation schema with configurable requirements\r\n */\r\nexport function createPasswordSchema(options?: {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecialChar?: boolean;\r\n}) {\r\n const {\r\n minLength = 6,\r\n requireUppercase = false,\r\n requireLowercase = false,\r\n requireNumber = false,\r\n requireSpecialChar = false,\r\n } = options || {};\r\n\r\n let schema = z.string().min(minLength, `Password must be at least ${minLength} characters`);\r\n\r\n if (requireUppercase) {\r\n schema = schema.regex(/[A-Z]/, 'Password must contain at least one uppercase letter');\r\n }\r\n\r\n if (requireLowercase) {\r\n schema = schema.regex(/[a-z]/, 'Password must contain at least one lowercase letter');\r\n }\r\n\r\n if (requireNumber) {\r\n schema = schema.regex(/\\d/, 'Password must contain at least one number');\r\n }\r\n\r\n if (requireSpecialChar) {\r\n schema = schema.regex(\r\n /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/,\r\n 'Password must contain at least one special character'\r\n );\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Default password schema (minimum 6 characters)\r\n */\r\nexport const passwordSchema = createPasswordSchema();\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function validateEmail(email: string): { valid: boolean; error?: string } {\r\n const result = emailSchema.safeParse(email);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.errors[0]?.message };\r\n}\r\n\r\n/**\r\n * Validate password format\r\n */\r\nexport function validatePassword(\r\n password: string,\r\n options?: Parameters<typeof createPasswordSchema>[0]\r\n): { valid: boolean; error?: string } {\r\n const schema = createPasswordSchema(options);\r\n const result = schema.safeParse(password);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.errors[0]?.message };\r\n}\r\n\r\n/**\r\n * Validate password strength based on multiple criteria\r\n */\r\nexport function checkPasswordStrength(password: string): {\r\n score: number;\r\n feedback: string[];\r\n} {\r\n const feedback: string[] = [];\r\n let score = 0;\r\n\r\n if (password.length >= 8) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use at least 8 characters');\r\n }\r\n\r\n if (password.length >= 12) {\r\n score += 1;\r\n }\r\n\r\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use both uppercase and lowercase letters');\r\n }\r\n\r\n if (/\\d/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one number');\r\n }\r\n\r\n if (/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one special character');\r\n }\r\n\r\n return { score, feedback };\r\n}\r\n\r\n"]}
1
+ {"version":3,"sources":["../src/lib/utils.ts","../src/lib/validation.ts"],"names":[],"mappings":"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","file":"lib.mjs","sourcesContent":["import { type ClassValue, clsx } from 'clsx';\r\nimport { twMerge } from 'tailwind-merge';\r\n\r\n/**\r\n * Utility function to merge Tailwind CSS classes with clsx\r\n * Handles conditional classes and prevents style conflicts\r\n */\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n","import { z } from 'zod';\r\n\r\n/**\r\n * Email validation schema\r\n */\r\nexport const emailSchema = z\r\n .string()\r\n .min(1, 'Email is required')\r\n .email('Invalid email address');\r\n\r\n/**\r\n * Password validation schema with configurable requirements\r\n */\r\nexport function createPasswordSchema(options?: {\r\n minLength?: number;\r\n requireUppercase?: boolean;\r\n requireLowercase?: boolean;\r\n requireNumber?: boolean;\r\n requireSpecialChar?: boolean;\r\n}) {\r\n const {\r\n minLength = 6,\r\n requireUppercase = false,\r\n requireLowercase = false,\r\n requireNumber = false,\r\n requireSpecialChar = false,\r\n } = options || {};\r\n\r\n let schema = z.string().min(minLength, `Password must be at least ${minLength} characters`);\r\n\r\n if (requireUppercase) {\r\n schema = schema.regex(/[A-Z]/, 'Password must contain at least one uppercase letter');\r\n }\r\n\r\n if (requireLowercase) {\r\n schema = schema.regex(/[a-z]/, 'Password must contain at least one lowercase letter');\r\n }\r\n\r\n if (requireNumber) {\r\n schema = schema.regex(/\\d/, 'Password must contain at least one number');\r\n }\r\n\r\n if (requireSpecialChar) {\r\n schema = schema.regex(\r\n /[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/,\r\n 'Password must contain at least one special character'\r\n );\r\n }\r\n\r\n return schema;\r\n}\r\n\r\n/**\r\n * Default password schema (minimum 6 characters)\r\n */\r\nexport const passwordSchema = createPasswordSchema();\r\n\r\n/**\r\n * Validate email format\r\n */\r\nexport function validateEmail(email: string): { valid: boolean; error?: string } {\r\n const result = emailSchema.safeParse(email);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.message };\r\n}\r\n\r\n/**\r\n * Validate password format\r\n */\r\nexport function validatePassword(\r\n password: string,\r\n options?: Parameters<typeof createPasswordSchema>[0]\r\n): { valid: boolean; error?: string } {\r\n const schema = createPasswordSchema(options);\r\n const result = schema.safeParse(password);\r\n if (result.success) {\r\n return { valid: true };\r\n }\r\n return { valid: false, error: result.error.message };\r\n}\r\n\r\n/**\r\n * Validate password strength based on multiple criteria\r\n */\r\nexport function checkPasswordStrength(password: string): {\r\n score: number;\r\n feedback: string[];\r\n} {\r\n const feedback: string[] = [];\r\n let score = 0;\r\n\r\n if (password.length >= 8) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use at least 8 characters');\r\n }\r\n\r\n if (password.length >= 12) {\r\n score += 1;\r\n }\r\n\r\n if (/[a-z]/.test(password) && /[A-Z]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Use both uppercase and lowercase letters');\r\n }\r\n\r\n if (/\\d/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one number');\r\n }\r\n\r\n if (/[!@#$%^&*()_+\\-=[\\]{};':\"\\\\|,.<>/?]/.test(password)) {\r\n score += 1;\r\n } else {\r\n feedback.push('Include at least one special character');\r\n }\r\n\r\n return { score, feedback };\r\n}\r\n\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@insforge/react",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Framework-agnostic React authentication UI components for Insforge - reusable across all frameworks",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -72,27 +72,27 @@
72
72
  "author": "Insforge",
73
73
  "license": "MIT",
74
74
  "peerDependencies": {
75
- "react": "^18.0.0 || ^19.0.0",
76
- "react-dom": "^18.0.0 || ^19.0.0",
77
- "react-router-dom": "^6.0.0"
75
+ "react": "^19.0.0",
76
+ "react-dom": "^19.0.0",
77
+ "react-router-dom": "^7.9.5"
78
78
  },
79
79
  "dependencies": {
80
80
  "@insforge/sdk": "0.0.58-dev.6",
81
81
  "@insforge/shared-schemas": "^1.1.16",
82
82
  "clsx": "^2.1.1",
83
- "lucide-react": "^0.546.0",
83
+ "lucide-react": "^0.552.0",
84
84
  "tailwind-merge": "^3.3.1",
85
- "zod": "^3.23.8"
85
+ "zod": "^4.1.12"
86
86
  },
87
87
  "devDependencies": {
88
88
  "@tailwindcss/postcss": "^4.1.16",
89
- "@types/node": "^20.19.24",
90
- "@types/react": "^19.0.0",
91
- "@types/react-dom": "^19.0.0",
89
+ "@types/node": "^24.9.2",
90
+ "@types/react": "^19.2.2",
91
+ "@types/react-dom": "^19.2.2",
92
92
  "concurrently": "^9.2.1",
93
- "rimraf": "^6.0.1",
93
+ "rimraf": "^6.1.0",
94
94
  "tailwindcss": "^4.1.16",
95
- "tsup": "^8.0.0",
96
- "typescript": "^5.3.0"
95
+ "tsup": "^8.5.0",
96
+ "typescript": "^5.9.3"
97
97
  }
98
98
  }