{"_id":"@alimcosoft/flexy-flag","_rev":"5-10916e0a6ab849d9a85ca42f19f911ef","name":"@alimcosoft/flexy-flag","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.0":{"name":"@alimcosoft/flexy-flag","version":"1.0.0","keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","_id":"@alimcosoft/flexy-flag@1.0.0","maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"dist":{"shasum":"28bdeef2520c7751518c526addef90f4c4e5da76","tarball":"https://registry.npmjs.org/@alimcosoft/flexy-flag/-/flexy-flag-1.0.0.tgz","fileCount":25,"integrity":"sha512-R5vf+N5Rb69w3aaynVyqeNillrrqh909gF/bzF0w/XfyJlHM6TjSv4I1jnqQkfDSPV9X0dqZ7k8N3JsOfDPC/Q==","signatures":[{"sig":"MEUCIBHveAIBuzlqxLJ3Amd4E4gxN1rpDADoh1Rq1KaTRGvTAiEAsZy74un4eNor1+msyrRdx4X5YPfH/nBcOTfLGSndbdQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":459023},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"90d59b7f415150d68f93586ed9db429982411de5","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","prepare":"husky install","lint:fix":"eslint src --ext .ts,.tsx --fix","validate":"npm run typecheck && npm run lint && npm run format:check && npm run test","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","test:coverage":"jest --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"ihassansattar","email":"i.hassansattar@gmail.com"},"repository":{"url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.0.0","husky":"^8.0.3","react":"^18.3.1","tslib":"^2.8.1","eslint":"^8.54.0","rollup":"^4.6.1","ts-jest":"^29.1.1","prettier":"^3.1.0","react-dom":"^18.3.1","typescript":"5.3.3","@types/jest":"^29.5.8","lint-staged":"^15.2.0","@types/react":"^18.2.38","@commitlint/cli":"^18.4.3","@types/react-dom":"^18.2.17","rollup-plugin-dts":"^6.1.0","@rollup/plugin-url":"^8.0.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-jsdoc":"^46.9.0","eslint-plugin-react":"^7.33.2","jest-svg-transformer":"^1.0.0","rollup-plugin-string":"^3.0.0","@testing-library/react":"^14.3.1","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.12.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.2.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.12.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/flexy-flag_1.0.0_1755882415906_0.5619022056091636","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alimcosoft/flexy-flag","version":"1.0.1","keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","_id":"@alimcosoft/flexy-flag@1.0.1","maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"dist":{"shasum":"d4965daa62a150758ff4e270ea2f085a90f65dea","tarball":"https://registry.npmjs.org/@alimcosoft/flexy-flag/-/flexy-flag-1.0.1.tgz","fileCount":25,"integrity":"sha512-QZdBZ9KLBILP/LZYz8mlRNIBjvbkUkD/1J7d8zq9EVd9b8JKBcSvNhgGWd3qxRVyhc3xvxnhsKGcaN/Tzi+Vew==","signatures":[{"sig":"MEUCIC8/bCR57+M337OaohTSZ6je69IRFIYDF00CBt2EWm+KAiEAtAObKaqCCbnWQP81OWh0iA8+rrdwWx3BnEcN5bZ0ORI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":459289},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"9dd90651ad9b2c17546b7ac31c3cd3dfe2552ca2","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","prepare":"husky install","lint:fix":"eslint src --ext .ts,.tsx --fix","validate":"npm run typecheck && npm run lint && npm run format:check && npm run test","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","test:coverage":"jest --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"ihassansattar","email":"i.hassansattar@gmail.com"},"repository":{"url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.0.0","husky":"^8.0.3","react":"^18.3.1","tslib":"^2.8.1","eslint":"^8.54.0","rollup":"^4.6.1","ts-jest":"^29.1.1","prettier":"^3.1.0","react-dom":"^18.3.1","typescript":"5.3.3","@types/jest":"^29.5.8","lint-staged":"^15.2.0","@types/react":"^18.2.38","@commitlint/cli":"^18.4.3","@types/react-dom":"^18.2.17","rollup-plugin-dts":"^6.1.0","@rollup/plugin-url":"^8.0.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-jsdoc":"^46.9.0","eslint-plugin-react":"^7.33.2","jest-svg-transformer":"^1.0.0","rollup-plugin-string":"^3.0.0","@testing-library/react":"^14.3.1","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.12.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.2.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.12.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/flexy-flag_1.0.1_1755883054196_0.4308766007702971","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@alimcosoft/flexy-flag","version":"1.0.2","keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","_id":"@alimcosoft/flexy-flag@1.0.2","maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"dist":{"shasum":"46f7fa2b1a74d7bd00571b8d4b74f422500f8ed3","tarball":"https://registry.npmjs.org/@alimcosoft/flexy-flag/-/flexy-flag-1.0.2.tgz","fileCount":298,"integrity":"sha512-No4GC8G92OJYMN3HhrZUPSuLKVPPYARx6nBTo/kGJP+aLVrgXj6LiPCMQUe9o4n+bAe6PmEzX9AR44JobG4iHA==","signatures":[{"sig":"MEYCIQC/xc/plRS0nYTU95MXFX0Ce7/TIQBuV0soGaB4ItfwnAIhAM19ibnTrOAk48DdFAKzV1lXYHxlK/nO7WABnAOE3IEX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2464584},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"b6784bb6ee534485a7f1848ddbebb7e3ec4bb434","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","prepare":"husky install","lint:fix":"eslint src --ext .ts,.tsx --fix","validate":"npm run typecheck && npm run lint && npm run format:check && npm run test","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","test:coverage":"jest --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"ihassansattar","email":"i.hassansattar@gmail.com"},"repository":{"url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.0.0","husky":"^8.0.3","react":"^18.3.1","tslib":"^2.8.1","eslint":"^8.54.0","rollup":"^4.6.1","ts-jest":"^29.1.1","prettier":"^3.1.0","react-dom":"^18.3.1","typescript":"5.3.3","@types/jest":"^29.5.8","lint-staged":"^15.2.0","@types/react":"^18.2.38","@commitlint/cli":"^18.4.3","@types/react-dom":"^18.2.17","rollup-plugin-dts":"^6.1.0","@rollup/plugin-url":"^8.0.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-jsdoc":"^46.9.0","eslint-plugin-react":"^7.33.2","jest-svg-transformer":"^1.0.0","rollup-plugin-string":"^3.0.0","@testing-library/react":"^14.3.1","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.12.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.2.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.12.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/flexy-flag_1.0.2_1755883276401_0.09598795029680107","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alimcosoft/flexy-flag","version":"1.1.0","keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","_id":"@alimcosoft/flexy-flag@1.1.0","maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"dist":{"shasum":"640b8eb6cf9ab0a80527c28c6fe99532b86c06b5","tarball":"https://registry.npmjs.org/@alimcosoft/flexy-flag/-/flexy-flag-1.1.0.tgz","fileCount":25,"integrity":"sha512-NMjO0oQtli1WHgumkuc2hCTh+QfaJk+Cs5MqY4kTLS73bnYIKhyJT1zhHkwoEuKzECZhQKN+Y8JipPPCAhWgTQ==","signatures":[{"sig":"MEUCIDUi1/fhyziHAZw4RDfWg4MtDj5ALPGqEWd8FBVXxxNtAiEAsrRrPIq00aYb3YEjnK5OPaE9Boc/YHFdnuxyTgVvBfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":459961},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.js"}},"gitHead":"b6784bb6ee534485a7f1848ddbebb7e3ec4bb434","scripts":{"dev":"vite","lint":"eslint src --ext .ts,.tsx","test":"jest","build":"rollup -c","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","prepare":"husky install","lint:fix":"eslint src --ext .ts,.tsx --fix","validate":"npm run typecheck && npm run lint && npm run format:check && npm run test","typecheck":"tsc --noEmit","test:watch":"jest --watch","build:watch":"rollup -c -w","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","test:coverage":"jest --coverage","prepublishOnly":"npm run validate && npm run build"},"_npmUser":{"name":"ihassansattar","email":"i.hassansattar@gmail.com"},"repository":{"url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git","type":"git"},"_npmVersion":"10.9.2","description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","directories":{},"_nodeVersion":"22.13.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","vite":"^5.0.0","husky":"^8.0.3","react":"^18.3.1","tslib":"^2.8.1","eslint":"^8.54.0","rollup":"^4.6.1","ts-jest":"^29.1.1","prettier":"^3.1.0","react-dom":"^18.3.1","typescript":"5.3.3","@types/jest":"^29.5.8","lint-staged":"^15.2.0","@types/react":"^18.2.38","@commitlint/cli":"^18.4.3","@types/react-dom":"^18.2.17","rollup-plugin-dts":"^6.1.0","@rollup/plugin-url":"^8.0.2","rollup-plugin-copy":"^3.5.0","eslint-plugin-jsdoc":"^46.9.0","eslint-plugin-react":"^7.33.2","jest-svg-transformer":"^1.0.0","rollup-plugin-string":"^3.0.0","@testing-library/react":"^14.3.1","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-typescript":"^11.1.5","@testing-library/jest-dom":"^6.1.5","@typescript-eslint/parser":"^6.12.0","eslint-plugin-react-hooks":"^4.6.0","@rollup/plugin-node-resolve":"^15.2.3","@commitlint/config-conventional":"^18.4.3","@typescript-eslint/eslint-plugin":"^6.12.0"},"peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/flexy-flag_1.1.0_1755890615604_0.8321176463840314","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alimcosoft/flexy-flag","version":"1.1.1","description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"rollup -c","build:watch":"rollup -c -w","dev":"vite","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts,.tsx","lint:fix":"eslint src --ext .ts,.tsx --fix","format":"prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","format:check":"prettier --check \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"","typecheck":"tsc --noEmit","validate":"npm run typecheck && npm run lint && npm run format:check && npm run test","prepare":"husky install","prepublishOnly":"npm run validate && npm run build"},"keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git"},"bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","peerDependencies":{"react":">=16.8.0","react-dom":">=16.8.0"},"devDependencies":{"@commitlint/cli":"^18.4.3","@commitlint/config-conventional":"^18.4.3","@rollup/plugin-commonjs":"^25.0.7","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-typescript":"^11.1.5","@rollup/plugin-url":"^8.0.2","@testing-library/jest-dom":"^6.1.5","@testing-library/react":"^14.3.1","@types/jest":"^29.5.8","@types/react":"^18.2.38","@types/react-dom":"^18.2.17","@typescript-eslint/eslint-plugin":"^6.12.0","@typescript-eslint/parser":"^6.12.0","eslint":"^8.54.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsdoc":"^46.9.0","eslint-plugin-prettier":"^5.0.1","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","husky":"^8.0.3","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","jest-svg-transformer":"^1.0.0","lint-staged":"^15.2.0","prettier":"^3.1.0","react":"^18.3.1","react-dom":"^18.3.1","rollup":"^4.6.1","rollup-plugin-copy":"^3.5.0","rollup-plugin-dts":"^6.1.0","rollup-plugin-string":"^3.0.0","ts-jest":"^29.1.1","tslib":"^2.8.1","typescript":"5.3.3","vite":"^5.0.0"},"_id":"@alimcosoft/flexy-flag@1.1.1","gitHead":"3ef85205e462b56fdbfc60ab821d5eff71deca84","_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-3HWgrHzYa1XG5GSWurxaHLrwyUcSF82QC5mUDxIV4D0tDDUgIq1dxLIWqOLZ/uTBUA9+fw/ICaMGc6wunSxE7w==","shasum":"21b19f0c5421a01f7e96528af09788ff86d2aaf6","tarball":"https://registry.npmjs.org/@alimcosoft/flexy-flag/-/flexy-flag-1.1.1.tgz","fileCount":25,"unpackedSize":468267,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDiIwjgLFolXwtgtyC/05PMJrc6NTN11Onjv4r0+4FfQwIgH4TLUiozZPT4teJCddk+Q8KrsYywVf80U04EWFUFX1o="}]},"_npmUser":{"name":"ihassansattar","email":"i.hassansattar@gmail.com"},"directories":{},"maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flexy-flag_1.1.1_1755895419065_0.5787528753450955"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-22T17:06:55.793Z","modified":"2025-08-22T20:43:39.504Z","1.0.0":"2025-08-22T17:06:56.161Z","1.0.1":"2025-08-22T17:17:34.384Z","1.0.2":"2025-08-22T17:21:16.682Z","1.1.0":"2025-08-22T19:23:35.865Z","1.1.1":"2025-08-22T20:43:39.284Z"},"bugs":{"url":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag/issues"},"author":{"name":"Hassan Sattar","email":"i.hassansattar@gmail.com"},"license":"MIT","homepage":"https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag#readme","keywords":["flags","country-flags","react","svg","typescript","nextjs","flexible","shapes","accessibility"],"repository":{"type":"git","url":"git+https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag.git"},"description":"Flexible, accessible country flags for React with customizable shapes, sizes, and aspect ratios","maintainers":[{"name":"ihassansattar","email":"i.hassansattar@gmail.com"}],"readme":"# @alimcosoft/flexy-flag\n\n[![npm version](https://badge.fury.io/js/@alimcosoft%2Fflexy-flag.svg)](https://badge.fury.io/js/@alimcosoft%2Fflexy-flag) [![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Downloads](https://img.shields.io/npm/dw/@alimcosoft/flexy-flag.svg)](https://www.npmjs.com/package/@alimcosoft/flexy-flag)\n\nA modern, flexible React component library for displaying country flags using authentic, high-quality SVG assets. Features 272+ real flag designs with intelligent scaling, shape transformations, and perfect rendering across all container sizes.\n\n**Key differentiators:**\n\n- ✅ **Real SVG Assets**: Authentic flag designs with accurate colors (not simplified recreations)\n- ✅ **Smart Scaling**: Flags automatically scale to fill containers perfectly without cropping\n- ✅ **Stroke-Aware**: Special handling for flags with stripes (like USA) to preserve visual accuracy\n- ✅ **Shape Flexibility**: Circle, square, rounded, pill shapes with optimized rendering\n- ✅ **CDN Optimized**: Dynamic loading from Vercel Edge Network for ultra-fast delivery\n- ✅ **Tiny Bundle**: 113KB package (94% smaller) with on-demand SVG loading\n\n## Features\n\n- **Real SVG Flags**: 272+ authentic, high-quality SVG flags with accurate colors and designs\n- **Flexible Shapes**: Rectangle, square, circle, rounded, pill with optimized rendering\n- **Perfect Scaling**: Intelligent SVG optimization ensures flags fill containers without distortion\n- **Custom Aspect Ratios**: 1:1, 3:2, 4:3, or any custom ratio with automatic aspect preservation\n- **Any Size**: Responsive sizing that adapts perfectly to any container dimensions\n- **Smart Rendering**: Automatic detection of stroke-based flags (like USA) for proper stripe rendering\n- **Performance**: Dynamic CDN loading with intelligent caching and tree-shaking support\n- **Accessibility**: Built-in `aria-label`, `title`, and role attributes with screen reader support\n- **SSR-Safe**: Works perfectly with Next.js, Vite, and all modern React frameworks\n- **TypeScript**: Full TypeScript support with comprehensive type definitions\n- **Utilities**: Search, filter, and find countries by code, name, or nationality\n\n## Installation\n\n```bash\nnpm install @alimcosoft/flexy-flag\n```\n\nFor React projects, ensure you have React 16+ installed.\n\n## Quick Start\n\n```tsx\nimport React from 'react';\nimport { Flag } from '@alimcosoft/flexy-flag';\n\nconst App = () => (\n  <div>\n    <Flag code='us' size='48px' />\n    <Flag code='gb' shape='circle' size='32px' />\n    <Flag code='ca' shape='rounded' ratio='1:1' size='40px' />\n  </div>\n);\n\nexport default App;\n```\n\n## API Reference\n\n### Flag Component Props\n\n| Prop        | Type                                                         | Default       | Description                                                                   |\n| ----------- | ------------------------------------------------------------ | ------------- | ----------------------------------------------------------------------------- |\n| `code`      | `string` (required)                                          | -             | ISO alpha-2 country code (e.g., 'us', 'fr'). Case-insensitive.                |\n| `shape`     | `'rectangle' \\| 'square' \\| 'circle' \\| 'rounded' \\| 'pill'` | `'rectangle'` | Shape of the flag container.                                                  |\n| `ratio`     | `'1:1' \\| '3:2' \\| '4:3' \\| string`                          | `'3:2'`       | Aspect ratio. Can be standard ratios or custom (e.g., '5:3').                 |\n| `size`      | `string`                                                     | -             | Width/height (e.g., '24px', '2rem'). For circle/square, sets both dimensions. |\n| `width`     | `string`                                                     | -             | Explicit width. Overrides `size` if provided.                                 |\n| `height`    | `string`                                                     | -             | Explicit height. Usually not needed with `ratio`.                             |\n| `style`     | `React.CSSProperties \\| string`                              | -             | Custom styles as object or string.                                            |\n| `alt`       | `string`                                                     | Country name  | Accessibility text. Defaults to full country name.                            |\n| `className` | `string`                                                     | -             | CSS class for styling.                                                        |\n| `lazy`      | `boolean`                                                    | `false`       | Enable lazy loading using IntersectionObserver.                               |\n| `fallback`  | `'emoji' \\| 'none'`                                          | `'none'`      | Fallback if SVG fails. 'emoji' shows Unicode flag emoji.                      |\n| `title`     | `string`                                                     | -             | Tooltip title for the flag.                                                   |\n\n## Examples\n\n### Basic Shapes\n\n```tsx\n<Flag code=\"us\" shape=\"rectangle\" size=\"48px\" />\n<Flag code=\"us\" shape=\"square\" size=\"48px\" />\n<Flag code=\"us\" shape=\"circle\" size=\"48px\" />\n<Flag code=\"us\" shape=\"rounded\" size=\"48px\" />\n<Flag code=\"us\" shape=\"pill\" size=\"48px\" />\n```\n\n### Custom Styling\n\n```tsx\n<Flag\n  code='fr'\n  size='64px'\n  shape='rounded'\n  style={{\n    boxShadow: '0 4px 8px rgba(0,0,0,0.2)',\n    border: '2px solid #333',\n    transition: 'transform 0.3s',\n  }}\n  className='hover:scale-110'\n/>\n```\n\n### Lazy Loading for Performance\n\n```tsx\n<Flag code='ca' size='32px' lazy />\n```\n\n### Next.js SSR Example\n\n```tsx\nimport dynamic from 'next/dynamic';\n\nconst Flag = dynamic(\n  () => import('@alimcosoft/flexy-flag').then(mod => mod.Flag),\n  {\n    ssr: false,\n  }\n);\n\nexport default function MyPage() {\n  return <Flag code='au' size='48px' />;\n}\n```\n\n### Country Search and Selection\n\n```tsx\nimport { useState } from 'react';\nimport { Flag, searchCountries } from '@alimcosoft/flexy-flag';\n\nfunction CountryPicker() {\n  const [query, setQuery] = useState('');\n  const [selected, setSelected] = useState('us');\n\n  const results = searchCountries(query, 10);\n\n  return (\n    <div>\n      <input\n        value={query}\n        onChange={e => setQuery(e.target.value)}\n        placeholder='Search countries...'\n      />\n\n      <div\n        style={{\n          display: 'grid',\n          gridTemplateColumns: 'repeat(5, 1fr)',\n          gap: '8px',\n        }}\n      >\n        {results.map(country => (\n          <div\n            key={country.iso}\n            onClick={() => setSelected(country.iso)}\n            style={{ cursor: 'pointer', textAlign: 'center' }}\n          >\n            <Flag code={country.iso} size='32px' shape='rounded' />\n            <p>{country.name}</p>\n          </div>\n        ))}\n      </div>\n\n      <div>\n        <h3>Selected:</h3>\n        <Flag code={selected} size='64px' shape='circle' />\n      </div>\n    </div>\n  );\n}\n```\n\n## Utility Functions\n\n```tsx\nimport {\n  getAllCountries,\n  getCountryByCode,\n  searchCountries,\n  flagExists,\n} from '@alimcosoft/flexy-flag';\n\n// Get all countries\nconst allCountries = getAllCountries();\n\n// Find specific country\nconst usa = getCountryByCode('US');\n\n// Search countries\nconst results = searchCountries('united', 5);\n\n// Check if flag exists\nconst hasFlag = flagExists('GB');\n```\n\n## Advanced Usage\n\n### Custom Animations\n\nAdd CSS animations to create engaging flag interactions:\n\n```css\n.waving-flag {\n  animation: wave 2s infinite;\n}\n\n@keyframes wave {\n  0%,\n  100% {\n    transform: translateY(0);\n  }\n  50% {\n    transform: translateY(-3px);\n  }\n}\n```\n\n```tsx\n<Flag code='jp' className='waving-flag' size='48px' />\n```\n\n### Integration with Form Libraries\n\n```tsx\nimport { Flag, getAllCountries } from '@alimcosoft/flexy-flag';\nimport Select from 'react-select';\n\nconst countryOptions = getAllCountries().map(country => ({\n  value: country.iso,\n  label: country.name,\n  flag: <Flag code={country.iso} size='20px' shape='circle' />,\n}));\n\nconst CustomOption = ({ innerProps, label, data }) => (\n  <div\n    {...innerProps}\n    style={{ display: 'flex', alignItems: 'center', gap: '8px' }}\n  >\n    {data.flag}\n    {label}\n  </div>\n);\n\n<Select options={countryOptions} components={{ Option: CustomOption }} />;\n```\n\n## CDN Architecture\n\n@alimcosoft/flexy-flag uses a high-performance CDN architecture for optimal loading:\n\n- **SVG Assets**: Hosted on Vercel Edge Network at `https://flexy-flag.vercel.app/flags/`\n- **Global Distribution**: Ultra-fast delivery via Vercel's global CDN\n- **Smart Caching**: Automatic client-side caching with fallback placeholders\n- **Small Bundle**: Only 113KB package size (SVGs load dynamically)\n\n### CDN Benefits:\n\n- ⚡ **Lightning Fast**: Sub-100ms flag loading globally\n- 📦 **Tiny Package**: 94% smaller than bundled alternatives\n- 🌍 **Global CDN**: Vercel's edge network for worldwide speed\n- 🔄 **Smart Fallbacks**: Colored placeholders if CDN unavailable\n\n## TypeScript Support\n\n@alimcosoft/flexy-flag is built with TypeScript and includes comprehensive type definitions:\n\n```tsx\nimport type { FlagProps, FlagShape, Country } from '@alimcosoft/flexy-flag';\n\nconst customFlag: FlagProps = {\n  code: 'us',\n  shape: 'circle',\n  size: '48px',\n};\n```\n\n## Technical Architecture\n\n### SVG Optimization\n\n- **Static Bundle**: All 272+ SVGs are statically imported and bundled for reliable access\n- **Smart Scaling**: Automatic `preserveAspectRatio` optimization based on flag content\n- **Stroke Detection**: Special handling for stroke-based flags (USA stripes, etc.) to prevent distortion\n- **Container Fitting**: Flags intelligently scale to fill containers without cropping\n\n### Performance Features\n\n- **Tree Shaking**: Import only the components and utilities you need\n- **Lazy Loading**: Optional IntersectionObserver-based lazy loading\n- **SVG Caching**: Built-in caching prevents duplicate SVG processing\n- **Bundle Optimization**: Rollup-optimized build with proper externalization\n\n## Performance Tips\n\n- Use `lazy` prop for long lists of flags\n- Leverage tree-shaking by importing only what you need\n- Combine with `React.memo` for frequently re-rendered flag lists\n- Use appropriate `shape` and `size` combinations for your UI\n\n## Browser Support\n\n- Modern browsers with ES2015+ support\n- React 16.8+ (hooks support required)\n- SSR frameworks like Next.js, Gatsby\n\n## Contributing\n\nContributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n1. Fork the repository\n2. Create a feature branch\n3. Make your changes\n4. Add tests for new functionality\n5. Submit a pull request\n\n## License\n\nMIT © [Hassan Sattar](https://github.com/ALIMCOSOFT-SMC-PVT-LTD)\n\n---\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build package\nnpm run build\n\n# Run example in development\nnpm run dev\n```\n\n## 🚀 Custom CDN Deployment\n\nWant to host flags on your own CDN? Use our deployment scripts:\n\n### GitHub Pages\n\n```bash\n./deploy-flags.sh\n# Follow the prompts to deploy to GitHub Pages\n```\n\n### Vercel\n\n```bash\n./setup-vercel-cdn.sh\n# Creates a Vercel-ready project with your flags\n```\n\nThese scripts help you set up your own flag CDN for maximum control and performance.\n\nFor more examples and documentation, visit our [GitHub repository](https://github.com/ALIMCOSOFT-SMC-PVT-LTD/flexy-flag).\n","readmeFilename":"README.md"}