{"_id":"@abhishek-sah/authman","_rev":"4-9a5182d6c1e96c2ee99b68a54e321438","name":"@abhishek-sah/authman","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@abhishek-sah/authman","version":"1.0.0","keywords":["auth","react","ui","storybook","login","signup"],"author":{"name":"Abhishek Sah"},"license":"ISC","_id":"@abhishek-sah/authman@1.0.0","maintainers":[{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"}],"dist":{"shasum":"c33370dba8aa60dae8739f1f4468ba8e90c4756d","tarball":"https://registry.npmjs.org/@abhishek-sah/authman/-/authman-1.0.0.tgz","fileCount":3,"integrity":"sha512-LIQDuKNkQiopAby1AK0btag0PYl+y8dSiswSLCyzBZKwDYIezbytFmbgE4WtRtOQeJsOHsWuRB3PEUpq2HXTuA==","signatures":[{"sig":"MEQCIE/BA4HY+2ho41GFx3nPzUXaxOs0BSq2rc0e0x/iw0CmAiBMoo5aMvs6/HgynGScKCMZ/aR2DMQnt0y2M5WBeJDNTg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141808},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.es.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"vite build","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"},"_npmVersion":"10.9.2","description":"Authentication UI components and utilities for React apps","directories":{},"_nodeVersion":"22.17.0","dependencies":{"init":"^0.1.2","axios":"^1.12.2","lucide-react":"^0.546.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.10","vitest":"^3.2.4","postcss":"^8.5.6","playwright":"^1.56.1","prop-types":"^15.8.1","tailwindcss":"^3.4.18","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^5.0.4","@storybook/addon-a11y":"^9.1.13","@storybook/addon-docs":"^9.1.13","@storybook/react-vite":"^9.1.13","@storybook/addon-vitest":"^9.1.13","@chromatic-com/storybook":"^4.1.1","@storybook/addon-onboarding":"^9.1.13"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authman_1.0.0_1760927831022_0.6921011833491153","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@abhishek-sah/authman","version":"1.0.1","keywords":["auth","react","ui","storybook","login","signup"],"author":{"name":"Abhishek Sah"},"license":"ISC","_id":"@abhishek-sah/authman@1.0.1","maintainers":[{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"}],"dist":{"shasum":"df3bb0c9c1286b7f4c26cc68450c39d6375c4288","tarball":"https://registry.npmjs.org/@abhishek-sah/authman/-/authman-1.0.1.tgz","fileCount":4,"integrity":"sha512-Sxij3mmaZR+/uW9oQHKH0BacyRR4aQ6MQo658fPhlaYDyaK378CfAMlPZAXVW4AlCGL4tup3ZzFk9QSVPSAkqA==","signatures":[{"sig":"MEYCIQDV7Z0AGU6o273l2iLcVMRGN5DYkd73/srtNiX9EgNRQwIhAMKOktbZK9f7CTTG19oKdApGOiNhPFy6qTnjWcohS5te","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":153075},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"4ab7b08b13e131cfa3a1748537fed0314e8c0720","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"vite build","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"},"_npmVersion":"10.9.2","description":"Authentication UI components and utilities for React apps","directories":{},"_nodeVersion":"22.17.0","dependencies":{"init":"^0.1.2","axios":"^1.12.2","lucide-react":"^0.546.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.10","vitest":"^3.2.4","postcss":"^8.5.6","playwright":"^1.56.1","prop-types":"^15.8.1","tailwindcss":"^3.4.18","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^5.0.4","@storybook/addon-a11y":"^9.1.13","@storybook/addon-docs":"^9.1.13","@storybook/react-vite":"^9.1.13","@storybook/addon-vitest":"^9.1.13","@chromatic-com/storybook":"^4.1.1","@storybook/addon-onboarding":"^9.1.13"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authman_1.0.1_1760968468500_0.25266678797021","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@abhishek-sah/authman","version":"1.0.2","keywords":["auth","react","ui","storybook","login","signup"],"author":{"name":"Abhishek Sah"},"license":"ISC","_id":"@abhishek-sah/authman@1.0.2","maintainers":[{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"}],"dist":{"shasum":"144ce574c2a2fa58370dfca43a3057cc93cbe776","tarball":"https://registry.npmjs.org/@abhishek-sah/authman/-/authman-1.0.2.tgz","fileCount":4,"integrity":"sha512-Ji9h5205F6pkNRdIrJIo7gKimYHLJjkkn1MdABnUO44ybDrUCKVw1s4Qsu6ynD1iOhQMhyyIh8DGpoMPl9U7/w==","signatures":[{"sig":"MEUCIQDSOBG6OQGIXnipWKh+M7qGWvwwywpBrrTj5L0E2Tx+4AIgWcvBaeSfoQt/J/QuOYYB6Z/9/4LXOdum9GfYT3dD+HI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":154527},"main":"dist/index.cjs.js","types":"dist/index.d.ts","module":"dist/index.es.js","gitHead":"4ab7b08b13e131cfa3a1748537fed0314e8c0720","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"vite build","storybook":"storybook dev -p 6006","build-storybook":"storybook build"},"_npmUser":{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"},"_npmVersion":"10.9.2","description":"Authentication UI components and utilities for React apps","directories":{},"_nodeVersion":"22.17.0","dependencies":{"init":"^0.1.2","axios":"^1.12.2","lucide-react":"^0.546.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.10","vitest":"^3.2.4","postcss":"^8.5.6","playwright":"^1.56.1","prop-types":"^15.8.1","tailwindcss":"^3.4.18","autoprefixer":"^10.4.21","@vitest/browser":"^3.2.4","@vitest/coverage-v8":"^3.2.4","@vitejs/plugin-react":"^5.0.4","@storybook/addon-a11y":"^9.1.13","@storybook/addon-docs":"^9.1.13","@storybook/react-vite":"^9.1.13","@storybook/addon-vitest":"^9.1.13","@chromatic-com/storybook":"^4.1.1","@storybook/addon-onboarding":"^9.1.13"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/authman_1.0.2_1760968823695_0.1313104551835973","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@abhishek-sah/authman","version":"1.0.3","main":"dist/index.cjs.js","module":"dist/index.es.js","types":"dist/index.d.ts","description":"Authentication UI components and utilities for React apps","author":{"name":"Abhishek Sah"},"license":"ISC","keywords":["auth","react","ui","storybook","login","signup"],"repository":{"type":"git","url":"git+https://github.com/sah-abhishek/authman.git"},"homepage":"https://github.com/sah-abhishek/authman#readme","bugs":{"url":"https://github.com/sah-abhishek/authman/issues"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","storybook":"storybook dev -p 6006","build-storybook":"storybook build","build":"vite build"},"dependencies":{"axios":"^1.12.2","init":"^0.1.2","lucide-react":"^0.546.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},"devDependencies":{"@chromatic-com/storybook":"^4.1.1","@storybook/addon-a11y":"^9.1.13","@storybook/addon-docs":"^9.1.13","@storybook/addon-onboarding":"^9.1.13","@storybook/addon-vitest":"^9.1.13","@storybook/react-vite":"^9.1.13","@vitejs/plugin-react":"^5.0.4","@vitest/browser":"^3.2.4","@vitest/coverage-v8":"^3.2.4","autoprefixer":"^10.4.21","playwright":"^1.56.1","postcss":"^8.5.6","prop-types":"^15.8.1","tailwindcss":"^3.4.18","vite":"^7.1.10","vitest":"^3.2.4"},"publishConfig":{"access":"public"},"_id":"@abhishek-sah/authman@1.0.3","gitHead":"4ab7b08b13e131cfa3a1748537fed0314e8c0720","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-HV+l4Bsy1iJMZttrl1+fdtdWhcGuh9Esfza5nZM9yHCXtKc1DenNCRMEKiADsL27WHk3jYIa4eRHfP56ZF33Eg==","shasum":"757dac63e09bf6c286b0e363e344d0a3f0058510","tarball":"https://registry.npmjs.org/@abhishek-sah/authman/-/authman-1.0.3.tgz","fileCount":4,"unpackedSize":154763,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBpAheNxg8+aUuBRMM2ej8STgriZhX39nUomnTtT3IjvAiEAmIOWYSDoz0XSZQs6z78CSwAVaw0/LkOsr3nuO0JIQdU="}]},"_npmUser":{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"},"directories":{},"maintainers":[{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/authman_1.0.3_1760969216059_0.1228406719552515"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-20T02:37:10.904Z","modified":"2025-10-20T14:06:56.464Z","1.0.0":"2025-10-20T02:37:11.203Z","1.0.1":"2025-10-20T13:54:28.694Z","1.0.2":"2025-10-20T14:00:23.877Z","1.0.3":"2025-10-20T14:06:56.255Z"},"author":{"name":"Abhishek Sah"},"license":"ISC","keywords":["auth","react","ui","storybook","login","signup"],"description":"Authentication UI components and utilities for React apps","maintainers":[{"name":"abhishek-sah","email":"abhisheksah3333@gmail.com"}],"readme":"# @abhishek-sah/authman\n\nA modern, customizable React authentication package with pre-built Login and Signup components. AuthMan provides beautiful, production-ready UI components combined with a robust authentication service layer to streamline user authentication in your applications.\n\n## Features\n\n✨ **Pre-built Components**\n- Modern, responsive Login component with email validation and password visibility toggle\n- Feature-rich Signup component with password confirmation and custom fields support\n- Beautiful UI built with Tailwind CSS with smooth animations and transitions\n\n🔒 **Authentication Service**\n- Simple API integration with configurable base URL\n- Token-based authentication (localStorage/sessionStorage)\n- User data persistence\n- Error handling with meaningful messages\n- Remember me functionality for login sessions\n\n🎨 **Customizable**\n- Dynamic form fields for signup\n- Custom headings and subheadings\n- Support for multiple field types (email, text, tel, etc.)\n- Flexible callback handlers for form submission\n\n📱 **Responsive Design**\n- Mobile-first approach\n- Works seamlessly on all screen sizes\n- Accessible form elements with proper labels and ARIA attributes\n\n## Installation\n\n```bash\nnpm install @abhishek-sah/authman\n```\n\nor with yarn:\n\n```bash\nyarn add @abhishek-sah/authman\n```\n\n## Quick Start\n\n### 1. Configure the Authentication Service\n\nInitialize the authentication service with your backend URL at the start of your application:\n\n```jsx\nimport { configureAuthService } from '@abhishek-sah/authman';\n\nconfigureAuthService({\n  baseURL: 'https://your-api.com',\n  headers: {\n    // optional custom headers\n  }\n});\n```\n\n### 2. Use the Login Component\n\n```jsx\nimport { Login } from '@abhishek-sah/authman';\nimport { login } from '@abhishek-sah/authman';\n\nexport default function LoginPage() {\n  const handleLogin = async (formData, rememberMe) => {\n    try {\n      const response = await login('/auth/login', formData, rememberMe);\n      console.log('Login successful:', response);\n      // Handle successful login (redirect, etc.)\n    } catch (error) {\n      console.error('Login failed:', error.message);\n    }\n  };\n\n  return (\n    <div className=\"flex items-center justify-center min-h-screen bg-gray-100\">\n      <Login\n        onSubmit={handleLogin}\n        heading=\"Welcome Back\"\n        subheading=\"Sign in to your account to continue\"\n        fields={[\n          { name: 'email', type: 'email', label: 'Email' }\n        ]}\n      />\n    </div>\n  );\n}\n```\n\n### 3. Use the Signup Component\n\n```jsx\nimport { Signup } from '@abhishek-sah/authman';\nimport { signup } from '@abhishek-sah/authman';\n\nexport default function SignupPage() {\n  const handleSignup = async (formData) => {\n    try {\n      const response = await signup('/auth/signup', formData);\n      console.log('Signup successful:', response);\n      // Handle successful signup (redirect to login, etc.)\n    } catch (error) {\n      console.error('Signup failed:', error.message);\n    }\n  };\n\n  return (\n    <div className=\"flex items-center justify-center min-h-screen bg-gray-100\">\n      <Signup\n        onSubmit={handleSignup}\n        heading=\"Create Account\"\n        subheading=\"Join us today and start your journey\"\n        fields={[\n          { name: 'email', type: 'email', label: 'Email' },\n          { name: 'firstName', type: 'text', label: 'First Name' },\n          { name: 'lastName', type: 'text', label: 'Last Name' },\n          { name: 'mobileNumber', type: 'tel', label: 'Mobile Number' }\n        ]}\n      />\n    </div>\n  );\n}\n```\n\n## API Reference\n\n### Components\n\n#### Login Component\n\nA customizable login form component with email and password fields.\n\n**Props:**\n\n```typescript\ninterface LoginProps {\n  onSubmit: (formData: object, rememberMe: boolean) => void | Promise<void>;\n  heading?: string;           // Default: \"Welcome Back\"\n  subheading?: string;        // Default: \"Sign in to your account to continue\"\n  fields?: Array<{\n    name: string;\n    type: string;            // 'email', 'text', etc.\n    label: string;\n  }>;\n}\n```\n\n**Features:**\n- Email validation\n- Password field with show/hide toggle\n- Remember me checkbox\n- \"Forgot password?\" link\n- Sign up redirect link\n- Form validation with error messages\n\n#### Signup Component\n\nA feature-rich signup form with password confirmation and custom fields.\n\n**Props:**\n\n```typescript\ninterface SignupProps {\n  onSubmit: (formData: object) => void | Promise<void>;\n  heading?: string;          // Default: \"Create Account\"\n  subheading?: string;       // Default: \"Join us today and start your journey\"\n  fields?: Array<{\n    name: string;\n    type: string;           // 'email', 'text', 'tel', etc.\n    label: string;\n  }>;\n}\n```\n\n**Features:**\n- Dynamic custom fields support\n- Email validation\n- Password and confirm password fields with visibility toggle\n- Password strength validation (minimum 6 characters)\n- Password match validation\n- Security badges (Secure & Encrypted, Privacy Protected)\n- Sign in redirect link\n\n### Authentication Service\n\n#### `configureAuthService(config)`\n\nInitialize the authentication service with your API configuration.\n\n**Parameters:**\n\n```typescript\ninterface Config {\n  baseURL: string;                  // Your API base URL\n  headers?: Record<string, string>; // Optional custom headers\n}\n```\n\n**Example:**\n\n```jsx\nconfigureAuthService({\n  baseURL: 'https://api.example.com',\n  headers: {\n    'X-Custom-Header': 'value'\n  }\n});\n```\n\n#### `login(endpoint, formData, rememberMe?)`\n\nAuthenticate a user with email and password.\n\n**Parameters:**\n- `endpoint` (string): API endpoint (e.g., '/auth/login')\n- `formData` (object): Form data containing email and password\n- `rememberMe` (boolean, optional): If true, uses localStorage; otherwise uses sessionStorage\n\n**Returns:** Promise that resolves to response data\n\n**Response Data:**\n```javascript\n{\n  token: \"jwt_token_here\",\n  user: {\n    id: \"user_id\",\n    email: \"user@example.com\",\n    // ... other user fields\n  }\n}\n```\n\n**Example:**\n\n```jsx\ntry {\n  const response = await login('/auth/login', \n    { email: 'user@example.com', password: 'password123' }, \n    true // remember me\n  );\n  console.log(response.token);\n} catch (error) {\n  console.error(error.message);\n}\n```\n\n#### `signup(endpoint, formData)`\n\nRegister a new user account.\n\n**Parameters:**\n- `endpoint` (string): API endpoint (e.g., '/auth/signup')\n- `formData` (object): Form data with user information\n\n**Returns:** Promise that resolves to response data\n\n**Example:**\n\n```jsx\ntry {\n  const response = await signup('/auth/signup', {\n    email: 'newuser@example.com',\n    firstName: 'John',\n    lastName: 'Doe',\n    password: 'securePassword123',\n    mobileNumber: '+1234567890'\n  });\n  console.log('Account created:', response);\n} catch (error) {\n  console.error(error.message);\n}\n```\n\n#### `logout()`\n\nClear authentication tokens and user data from both localStorage and sessionStorage.\n\n**Example:**\n\n```jsx\nimport { logout } from '@abhishek-sah/authman';\n\nfunction LogoutButton() {\n  const handleLogout = () => {\n    logout();\n    // Redirect to login page\n    window.location.href = '/login';\n  };\n\n  return <button onClick={handleLogout}>Logout</button>;\n}\n```\n\n## Backend Integration\n\nYour backend API should handle the following endpoints:\n\n### POST `/auth/login`\n\n**Request:**\n```json\n{\n  \"email\": \"user@example.com\",\n  \"password\": \"password123\"\n}\n```\n\n**Response:**\n```json\n{\n  \"token\": \"jwt_token_here\",\n  \"user\": {\n    \"id\": \"user_id\",\n    \"email\": \"user@example.com\",\n    \"firstName\": \"John\",\n    \"lastName\": \"Doe\"\n  }\n}\n```\n\n### POST `/auth/signup`\n\n**Request:**\n```json\n{\n  \"email\": \"newuser@example.com\",\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"password\": \"securePassword123\",\n  \"mobileNumber\": \"+1234567890\"\n}\n```\n\n**Response:**\n```json\n{\n  \"message\": \"User created successfully\",\n  \"user\": {\n    \"id\": \"new_user_id\",\n    \"email\": \"newuser@example.com\"\n  }\n}\n```\n\n## Error Handling\n\nThe authentication service includes built-in error handling. Errors are caught and converted to meaningful messages:\n\n```jsx\ntry {\n  await login('/auth/login', formData, true);\n} catch (error) {\n  // error.message will contain one of:\n  // - Server error message (from response.data.message)\n  // - \"No response from the server\"\n  // - Network error message\n  console.error(error.message);\n}\n```\n\n## Styling\n\nThe components are built with Tailwind CSS core utilities. To ensure proper styling:\n\n1. Install Tailwind CSS in your project:\n   ```bash\n   npm install -D tailwindcss postcss autoprefixer\n   ```\n\n2. Configure your Tailwind CSS setup (see [Tailwind documentation](https://tailwindcss.com/docs/installation))\n\n3. Import Tailwind CSS in your main CSS file:\n   ```css\n   @tailwind base;\n   @tailwind components;\n   @tailwind utilities;\n   ```\n\n## Advanced Usage\n\n### Custom Form Fields\n\nExtend the signup form with additional fields:\n\n```jsx\n<Signup\n  fields={[\n    { name: 'email', type: 'email', label: 'Email Address' },\n    { name: 'username', type: 'text', label: 'Username' },\n    { name: 'company', type: 'text', label: 'Company' },\n    { name: 'phone', type: 'tel', label: 'Phone Number' },\n    { name: 'country', type: 'text', label: 'Country' }\n  ]}\n  onSubmit={handleSignup}\n/>\n```\n\n### Custom Headers\n\nAdd custom headers for your API requests:\n\n```jsx\nconfigureAuthService({\n  baseURL: 'https://api.example.com',\n  headers: {\n    'Authorization': 'Bearer token',\n    'X-API-Key': 'your-api-key',\n    'X-Client-ID': 'your-client-id'\n  }\n});\n```\n\n### Form Submission with Loading States\n\n```jsx\nconst [isLoading, setIsLoading] = useState(false);\n\nconst handleLogin = async (formData, rememberMe) => {\n  setIsLoading(true);\n  try {\n    const response = await login('/auth/login', formData, rememberMe);\n    // Handle success\n  } catch (error) {\n    // Handle error\n  } finally {\n    setIsLoading(false);\n  }\n};\n```\n\n## Browser Storage\n\nBy default, the `login` function uses:\n- **localStorage** when `rememberMe` is `true` (persistent across sessions)\n- **sessionStorage** when `rememberMe` is `false` (cleared when tab closes)\n\nRetrieve stored authentication data:\n\n```jsx\n// Get token\nconst token = localStorage.getItem('auth_token');\n\n// Get user\nconst user = JSON.parse(localStorage.getItem('user'));\n```\n\n## Validation Rules\n\n### Login Form\n- **Email**: Required, must be valid email format\n- **Password**: Required, minimum 6 characters\n\n### Signup Form\n- **Email**: Required, must be valid email format\n- **Password**: Required, minimum 6 characters\n- **Confirm Password**: Required, must match password\n- **Custom Fields**: Required based on configuration\n\n## Browser Support\n\n- Chrome (latest)\n- Firefox (latest)\n- Safari (latest)\n- Edge (latest)\n\n## Dependencies\n\n- React 16.8+ (hooks support required)\n- Tailwind CSS 3.0+\n- Axios 0.27+\n- lucide-react 0.263.1+\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! I'd love to have your help in improving AuthMan. Here's how you can contribute:\n\n### Steps to Contribute\n\n1. Fork the repository on [GitHub](https://github.com/sah-abhishek/authman)\n2. Clone your forked repository\n   ```bash\n   git clone https://github.com/sah-abhishek/authman.git\n   cd authman\n   ```\n3. Create a new branch for your feature or bugfix\n   ```bash\n   git checkout -b feature/your-feature-name\n   ```\n4. Make your changes and test thoroughly\n5. Commit your changes with clear messages\n   ```bash\n   git commit -m \"Add feature: description of your changes\"\n   ```\n6. Push to your forked repository\n   ```bash\n   git push origin feature/your-feature-name\n   ```\n7. Submit a Pull Request to the main repository\n\n### Guidelines\n\n- Follow the existing code style and structure\n- Add tests for new features\n- Update documentation if needed\n- Keep commit messages clear and descriptive\n- One feature per pull request\n\n## Support & Contact\n\n### GitHub Issues\n\nFor bug reports, feature requests, or issues, please open an issue on the [GitHub repository](https://github.com/abhishek-sah/authman/issues).\n\n### Get in Touch\n\n- **GitHub**: [@sah-abhishek](https://github.com/sah-abhishek)\n- **Email**: [abhisheksah3333@gmail.com](mailto:abhisheksah3333@gmail.com)\n- **Twitter**: [@abhish_x](https://x.com/abhish_x)\n\nFeel free to reach out if you have questions, suggestions, or just want to say hi!\n\n## Sponsorship\n\nIf you find AuthMan helpful, consider supporting the project. Your support motivates me to keep improving and maintaining this package.\n\n---\n\nMade with ❤️ by Abhishek Sah\n\n## Changelog\n\n### Version 1.0.2\n- Initial release\n- Login and Signup components\n- Authentication service with token management\n- Form validation\n- Remember me functionality\n- Error handling\n\n---\n\nMade with ❤️ by Abhishek Sah\n","readmeFilename":"README.md","homepage":"https://github.com/sah-abhishek/authman#readme","repository":{"type":"git","url":"git+https://github.com/sah-abhishek/authman.git"},"bugs":{"url":"https://github.com/sah-abhishek/authman/issues"}}