{"_id":"expo-masonry-layout","_rev":"33-8306684ef334b238f5a81c2495016259","name":"expo-masonry-layout","dist-tags":{"latest":"57.0.0"},"versions":{"1.0.0":{"name":"expo-masonry-layout","version":"1.0.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"51123654ad81943991b496eed7873c19524730af","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.0.tgz","fileCount":19,"integrity":"sha512-CXNJpxryPuibOQ4OIm3XpEDdOalEI16Vm+wKYikOO54gJISmCIV8cW0v2cnMK494qKZa8zrtUWeITXEVwq5lpQ==","signatures":[{"sig":"MEUCIGVwN+sDPxcjFAwf3b9jFtCR9L75L8Oj1NqpCwJS2nEoAiEA8jYLVYGsGgJnqp+mHjFxkj7PBBwQ9MpIQBlrbqsZ6uU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43901},"main":"lib/index.js","types":"lib/index.d.ts","module":"lib/index.js","engines":{"node":">=16.0.0"},"gitHead":"1d46a69aa54a243abe923c9f5095fb7832d17e4b","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"_nodeVersion":"22.2.0","_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.0_1754700682767_0.18890124940467712","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"expo-masonry-layout","version":"1.0.1","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.1","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"ab80d099bfd1c45191a15a5ee463b67bf8ba7611","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.1.tgz","fileCount":19,"integrity":"sha512-7XtNwGsuDtr4Yi6FFbHUqjNhtU7KQcRoS/wIGofHvFGkgEuenR4gwzlgJEjjETPpB+bDOJayLKoUfqu+57gXRQ==","signatures":[{"sig":"MEUCIFwMGTEQv/NEH0swUCGIih+BLSKWiVjcAN87aXCAS4E/AiEA6fw6rNvAOWzG1/SzY0eyneib0SAqwzTiolJ8cNTYRm4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44105},"main":"lib/index.js","types":"lib/index.d.ts","module":"lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","default":"./lib/index.js"}},"gitHead":"f0aa9317e089a01c381e8347a86b738aff4c1c75","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.1_1754701141631_0.8561876124960901","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"expo-masonry-layout","version":"1.0.2","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.2","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"d5c6c21ed4e69ca94163207d5ae7d74a802152c9","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.2.tgz","fileCount":19,"integrity":"sha512-tfdEaN6tWqxR8TiYdPMSx8Y3OXuaiEnIqoiUWH0Cdc0qEqhscxjP8DuUZG0YJaK2cGaklubR2jI9s/1cOGBNfw==","signatures":[{"sig":"MEUCIQChyRj5z3g8X6MvvS7+kq8lMDt1mZP0OMSW1bGTCi9rXAIgLcvem72eUHHWwaRPLaYpuQi5VJEuELNaoGET5cfntIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44263},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"6ae30ec4ab82e82257e3ed6ce421bb095b28f152","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.2_1754701651510_0.4002919136835883","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"expo-masonry-layout","version":"1.0.3","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.3","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"54b40cc6270883ebb42b410f332c73a6051f510f","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.3.tgz","fileCount":19,"integrity":"sha512-g13ZKqld19dJgpsitOym3DNZa5h8wL/liLqECrp2yQmiLsWYDGc8QP7W/G1SBSjD2ICM8Yze+kVi7HDQxr5UBg==","signatures":[{"sig":"MEUCIQDUCdYnLsmC0rFGj9MDsNysAsh4A5vNaFe0fFQ+FotIUAIgLzZHFwTnGXMfI8YcSI54X6a3t5Z8v6wcMEEZ6OcsO2Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47981},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"d2108c9f7f32a0b62f3ec22cb3b28114500c8453","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.3_1754785132787_0.7826977970718254","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"expo-masonry-layout","version":"1.0.4","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.4","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"2c533673f4bd982428f8f19c6090acded8ae3624","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.4.tgz","fileCount":19,"integrity":"sha512-7oRJTLKwUfH3+tvBrkfPFbM98+LZza44Jzod2hq/C1tQBb/5qRmfbWjPt3jQ0IK3w8N+YtFHopHGIwm9K/MzyA==","signatures":[{"sig":"MEUCIE1C6gcGbOf3uu7mKJqIznuv3+jcrNPJ855brH1nH8eIAiEAjqYEG3qGoUbk1+d5mBpI2CIz0jWCz4dJXJzySSiERcs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47893},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"5afb7e0614be42cd0d5e102c799e2dedbe6723c1","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.4_1754785375329_0.7863845433723475","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"expo-masonry-layout","version":"1.0.5","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.5","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"b40039d7ca0f241ea367107ca23dbad10a4fb7c9","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.5.tgz","fileCount":19,"integrity":"sha512-W5y0QcuX90DmtUEhSsHATTk9XvgbyezG5O1cuC5lwBgGalabSyfviVbrcYYyebliUQq5dg/tet889L/y/+1p+Q==","signatures":[{"sig":"MEYCIQDxAx2Fl34tDuKI2Z1zyWZQ8lpjrQ9eeeKBTRAMRSQ8IgIhAPs9DZCqFdTCZIknE946wZaeaRP2UiAGFPWJVSB/HW7w","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47891},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"04d276439e765f92f96a8c10ff85d040db626657","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.5_1754785766975_0.8452467304372178","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"expo-masonry-layout","version":"1.0.6","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.6","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"cebca946a0e8c11ad8212e094edb9741cd021acd","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.6.tgz","fileCount":19,"integrity":"sha512-Rm+hGqM7FcpD06P3KSd3+xkV33O4kdedxvjjSdY/00iPjIj7K/rmLJ5uWralBa07TKmNjgEdISLWOIfs6U/wAw==","signatures":[{"sig":"MEQCIBTxyw3Cbvio7ogHBHdoWOF67ieiIRfrjQtZhjM5qlTCAiBlb4A6bu51CfwVQZ5A6SY1K9ZppTUtQJ9jVL0eDES17w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50454},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"3beb3c8ca02a0e3be642cd32444a26c1b13b7ecd","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.6_1754831096465_0.8263898593346626","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"expo-masonry-layout","version":"1.0.7","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.7","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"f8a6d5888e5114e4f0e2a7ecedc8f162e6244b85","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.7.tgz","fileCount":19,"integrity":"sha512-lezRJHpd63lm8p4N3xC0K2WQ1uoU7dEIPjWLVnnuOKCQVdhW21CmyDzgIvUHMnr0qzaJqmbr/InPHlAw2fhYJw==","signatures":[{"sig":"MEUCIQC0XnPflx0EyxQ3fWrd5W0M7sTnA6YbDLyhMsBJpppBTQIgbKOvTVe251TuW7ipbylGP/Tv1C4QDxGDew2A/b2Ovn8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48314},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"3beb3c8ca02a0e3be642cd32444a26c1b13b7ecd","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.7_1755303427544_0.24770033720437135","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"expo-masonry-layout","version":"1.0.8","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.8","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"586f9519cdc42021470166371204185994359672","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.8.tgz","fileCount":19,"integrity":"sha512-dl7xYogyh9pmtoO1p+M7VBOa55IJVoDhtO/JDWBSnZwBqk/PBitrSUt1sXwKD2LvQskBcwXG8G0uNXY9ruoHKw==","signatures":[{"sig":"MEQCIHecuIZwdkvlI9T03fnWYJFan2J5y2llzo+Rlo4+Cag8AiAzzjBptJg5wUGUfFCWkp444EeDgD5B2z3lTuqVgZ76hw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48293},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"d114650c371d011a078483625dbdf6fa44ae81fa","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.8_1755303629405_0.9340706825561527","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"expo-masonry-layout","version":"1.0.9","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.0.9","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"5f4f705698578917467d5b116a14c5b289c5b7a5","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.0.9.tgz","fileCount":19,"integrity":"sha512-i7NRGXLWwZzKL0V+WlVT7usKsUZHRItdblvdG3LRcPRrE3purFdauREVYl7orlrPqmSJ2vUla5Oi+/ptWhfS9g==","signatures":[{"sig":"MEUCIQDBSrAkSs1T9S89RY4WBZmwnmrfWSemzKKwxdIsstY+QgIgdWXZjKVF16GJVhmpg+kF2qbUHZ1a4jPdye9uAolx+gY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48209},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"7c979dd7be42e45eb8e86d02e670ca540b6a81a7","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.0.9_1755304309722_0.3745897924156485","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"expo-masonry-layout","version":"1.1.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"f1d17bfb948e576bfb5a455956fa9c267b38dadd","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.0.tgz","fileCount":19,"integrity":"sha512-Jw3ke73eG5PBvPpC+Jvx6DZbX2RONWfuJ8Ou7O1xx/Rv0QKpQlj5WOlehFzNJ+7+eP/cQEj0TGnX0jkEtFTdeQ==","signatures":[{"sig":"MEYCIQCt8QJ2OKHTHLXBfPwmwRugS1VooZJQhsGaWCRBOrmzFwIhAM/TGqbz3/ouz9pkREaTJXpYfOQtJVzBCY3/g/eXRntD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56801},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"b64fd061bf725a7971c5f218c94b9760eee4cf6c","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.0_1756068333694_0.776265348148345","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"expo-masonry-layout","version":"1.1.1","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.1","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"5be798f5328b9c88d781f437a873aafd2b6ae985","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.1.tgz","fileCount":19,"integrity":"sha512-z3Aj1qxK75FRo+vn0ZuRjxyv9G6qK55B0iqYCxdqISW9W8X2dMRydzHKvtT3DztEYuLLgoLWZIZZAKJse2a8YQ==","signatures":[{"sig":"MEUCIDU/qs2z8W6PpILFXiaORV+tO+5ZPryhKYuBFMxD/SqDAiEAylz1qVoMBPjIfrbHtxKJv4b0AzGMOwdnoeco5k26jKk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57745},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"b64fd061bf725a7971c5f218c94b9760eee4cf6c","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.1_1756407250758_0.86075440667496","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"expo-masonry-layout","version":"1.1.2","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.2","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"d21d4f30d7e6a604ddcc7a3b359d9d1486382779","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.2.tgz","fileCount":19,"integrity":"sha512-s2+g2gG23+nbnb6evMUu1xBmbwZXUKZ3C309uw5/aRV0DYIhqqUFgHJtsnnHoEKxUcgH4Piw9OXbDqwemaD9qw==","signatures":[{"sig":"MEUCIQC5sG1tX9LD5uJ/Wu50xdaElbckDKBe3LMlNk8uLV4uEAIgD+c6htlUSY2IYauk7cywRfb6DxY04T4Q2zTi5M0wl6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56801},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"3c091a0a90574c127dbba72e59817efede248270","scripts":{"lint":"eslint src --ext .ts,.tsx","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"eslint src --ext .ts,.tsx --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.0.0","eslint":"^8.0.0","prettier":"^3.0.0","typescript":"^5.0.0","@types/react":"^18.2.0","@types/react-native":"^0.72.0","eslint-plugin-react":"^7.33.0","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^6.0.0","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-react-native":"^4.1.0","@typescript-eslint/eslint-plugin":"^6.0.0","@react-native-community/eslint-config":"^3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.2_1756407659040_0.950929953349847","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"expo-masonry-layout","version":"1.1.3","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.3","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"c82b4852b016aaed3aa1fef565fa6e71f56edd97","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.3.tgz","fileCount":19,"integrity":"sha512-YDZvQkb9irp9E63KmNjo6yFGATbf9OnlbJ9Bg2c3AJjF7stnqr4zFRRop04M6gYqfU/QOUovPqEwX1/ez5TBzA==","signatures":[{"sig":"MEYCIQDebmeXwEGy7KovRHgx+dbbpX8JwAjqD7imBKe+2Ru1FQIhAO7ZApkhAiCTJDAADKqZMuQCng1HWd7lKUXDZi786HwC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54678},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"93b26a58831a2b7c30572b0906c3d420d7b856f6","scripts":{"lint":"eslint .","test":"jest","build":"tsc","clean":"rm -rf lib","format":"prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"","lint:fix":"eslint . --fix","build:watch":"tsc --watch","format:check":"prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"8.57.1","prettier":"3.4.2","typescript":"5.7.2","@babel/core":"^7.28.4","@types/react":"18.2.0","@eslint/eslintrc":"^3.0.0","@babel/preset-env":"^7.28.3","@types/react-native":"0.72.0","eslint-plugin-react":"7.37.2","@babel/eslint-parser":"^7.23.0","eslint-plugin-import":"^2.29.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@babel/preset-typescript":"^7.27.1","@typescript-eslint/parser":"6.0.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"4.6.2","eslint-plugin-react-native":"4.1.0","@typescript-eslint/eslint-plugin":"6.0.0","@react-native-community/eslint-config":"3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.3_1760217821677_0.5596773788903722","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"expo-masonry-layout","version":"1.1.4","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.4","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"8b10f147e3b7a020e3e13967a66dd0f9f4acc1ac","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.4.tgz","fileCount":19,"integrity":"sha512-uDBW6Hlc+SBm2Sis/k5mK4V/qdZEpXQsKa9cg2vZUuLo0Koynm+NJ4YLuEP/hOAkT0VzqNpT3bkxMXml4DT52g==","signatures":[{"sig":"MEYCIQCQLH4lmu5uJirakJww9pteLnkQHvSFYuqW9bRZkVs3aAIhAMhBe+GK0GgFdmV0bzpozqFb6iKIAmc4xRKNuNdnpK2U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52484},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"cfe2ce7bf9ea7e035cbef40cd5e4a5f5fbb2f984","scripts":{"lint":"eslint .","test":"jest","build":"tsc","clean":"rm -rf lib","format":"prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"","lint:fix":"eslint . --fix","build:watch":"tsc --watch","format:check":"prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"8.57.1","prettier":"3.4.2","typescript":"5.7.2","@babel/core":"^7.28.4","@types/react":"18.2.0","@eslint/eslintrc":"^3.0.0","@babel/preset-env":"^7.28.3","@types/react-native":"0.72.0","eslint-plugin-react":"7.37.2","@babel/eslint-parser":"^7.23.0","eslint-plugin-import":"^2.29.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@babel/preset-typescript":"^7.27.1","@typescript-eslint/parser":"6.0.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"4.6.2","eslint-plugin-react-native":"4.1.0","@typescript-eslint/eslint-plugin":"6.0.0","@react-native-community/eslint-config":"3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.4_1760218380834_0.33466881915440627","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"expo-masonry-layout","version":"1.1.5","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.5","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"92a171e9c140d70d30959cc767039041300c74bc","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.5.tgz","fileCount":19,"integrity":"sha512-qvZc6IMB9saodzwMr88oAYjFaam9y5z89POnEcIvsxtoDRwgmxcrVE276eB3xXqlWmF0/jgg7KCz0RzIXFt9Tg==","signatures":[{"sig":"MEUCIG8eaAs69EtojbTaA7ToQ9P5o2M6E6l5ENbXNX/nx+SCAiEAwbOI2ZWlb1cdFbjB6B316bX3YPNhtU8/EigaCR7hX3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53228},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"b62367c031368940a0df38fc177e2bcca9d2baa3","scripts":{"lint":"eslint .","test":"jest","build":"tsc","clean":"rm -rf lib","format":"prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"","lint:fix":"eslint . --fix","build:watch":"tsc --watch","format:check":"prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\"","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"8.57.1","prettier":"3.4.2","typescript":"5.7.2","@babel/core":"^7.28.4","@types/react":"18.2.0","@eslint/eslintrc":"^3.0.0","@babel/preset-env":"^7.28.3","@types/react-native":"0.72.0","eslint-plugin-react":"7.37.2","@babel/eslint-parser":"^7.23.0","eslint-plugin-import":"^2.29.0","eslint-config-prettier":"9.1.0","eslint-plugin-prettier":"5.2.1","@babel/preset-typescript":"^7.27.1","@typescript-eslint/parser":"6.0.0","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"4.6.2","eslint-plugin-react-native":"4.1.0","@typescript-eslint/eslint-plugin":"6.0.0","@react-native-community/eslint-config":"3.2.0"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.5_1760219886199_0.5503643486808594","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"expo-masonry-layout","version":"1.1.6","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.6","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"16607d64585dacf9416a8ee0d921a4f80c4d307c","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.6.tgz","fileCount":19,"integrity":"sha512-P68jc65NfiexdYDX7If0XPG9m6JxGGHapbXXJsbjQPCeHyIgsNIZsYTA5bfeU36X8IN+XXc9B3YSQUVFMEgkjA==","signatures":[{"sig":"MEYCIQCjI+XWkvkgsyJZKbroGik6RGdlkNKm9Y0sVOS/xfqEMwIhAOYNApqfO0sru1eR35pjWmM6e/s8RIDRAYmfDpnDX0pJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53511},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"7c512dea0eae7302f627cefdebc07826e0339135","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"^5.7.2","@babel/core":"^7.28.4","ts-standard":"^12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"^16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"^2.32.0","eslint-plugin-promise":"^6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.6_1760305555772_0.7211513144608563","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"expo-masonry-layout","version":"1.1.7","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.7","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"ce6bea183163425c20105f6f0de9c31e8386d083","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.7.tgz","fileCount":19,"integrity":"sha512-2MT4zvchJ2IgnwGO+xk8qzqGBFYRr9A0hjZN+Zrg/ev5rPv77noQH8HrbeABl8yQMEn3A7iKXvdPpUKnWU4Bzg==","signatures":[{"sig":"MEUCIQCYaxNLTv3L4TAWncsEqNpCNEC1VtdvJsOd0VKv04Go4QIgJbOnw6/95CnHJ5Rl6Nkp2SajHG5B2s8NUpIXtlI+QAU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53511},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"d418901b27aad63d7abb7d6cdbb6d2698a241320","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"^5.7.2","@babel/core":"^7.28.4","ts-standard":"^12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"^16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"^2.32.0","eslint-plugin-promise":"^6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0","react-native":">=0.70.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.7_1760312053314_0.07371065804361043","host":"s3://npm-registry-packages-npm-production"}},"1.1.8":{"name":"expo-masonry-layout","version":"1.1.8","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.8","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"b65fc30cc4188faab1ad64c409657aa92c598791","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.8.tgz","fileCount":19,"integrity":"sha512-sag1t/N5hAaYn6pTpwM/ATMi71dKs6GwVO377o/6e6CT0wQ/xUl8272B8UJmNpENGn9w45acoAWPG6fLFhB9ow==","signatures":[{"sig":"MEQCIE37d1OI7gcToNJb8qzL4Wxcy1W4tsL38jZp0wLg89F5AiAcLqly3kiVR7WVka81jXf/j4dhKfSfH+QsI5t5Vb9q3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55043},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"8e5c69fbfcf5ddcc3fc9110482e4b371d40ab0f9","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"5.7.2","@babel/core":"^7.28.4","ts-standard":"12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.8_1760398529873_0.2929603935991638","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"expo-masonry-layout","version":"1.1.9","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.9","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"48bb641de78b5a5fbf95fc4271dcdb6de6b25815","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.9.tgz","fileCount":19,"integrity":"sha512-WXsC853sS1ftihKBX9st7nKNjwn+dF8OfoAyo+r18qx8Y+NU70jjnau8Bo1mr7Aua3A5bSdGMtM3i6Zbb4Q5wA==","signatures":[{"sig":"MEUCIQCXs4IVKEtCpf4V5qqe0tLfnWyBME8uAPcmHpEAdA0zBwIgUedCxiQFa0Wn3p91ekzPYfyWEZFrPwk05hZNxYwNRYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50412},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"b7733f0e0d359a01e996a9e9060fa2c478cfca6f","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"5.7.2","@babel/core":"^7.28.4","ts-standard":"12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.9_1760399134638_0.7428063597055106","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"expo-masonry-layout","version":"1.1.10","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.10","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"a6d36b6bd470207b39f80b02b900d66200c12b47","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.10.tgz","fileCount":19,"integrity":"sha512-2IsJNzigXL/a2d9vcVGTyr8i56wp7fCMevBG75guMER5h9FEc1IoFlDAawdFu7FH4QCxoBjdv12sMUCMFrQkCg==","signatures":[{"sig":"MEUCIGKgbu7lvzNq1MDuoMuvGA5nRdbZxbuztmFHdvkJkxxiAiEA6ZfP7Hv3g3fsccI5o4yovTN93SK2rF5IhExLsxyGDCA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50420},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"ad4b3cd4f9599d6bfef0e73845f3647c61f6bdab","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"5.7.2","@babel/core":"^7.28.4","ts-standard":"12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.10_1760399280469_0.45620377948381874","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"expo-masonry-layout","version":"1.1.11","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.1.11","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"746ce989c060863f12c726b106032f815b69b0c4","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.1.11.tgz","fileCount":19,"integrity":"sha512-2/neDuhMFTuquwNJzYKqidE9tshON25Vslnn8XhW7K5bCOvcIHSTF20zpBhmcNjewDs8cMrykt8iQmWqtHEwhw==","signatures":[{"sig":"MEUCIQDF71GLR48Kz5GjIkVdIXSvkGc9Gq53/xXjgXD3YwpWFwIgNqpQGsHTMtuILtejAuUQ4nSO6cX7fCHDgupvxCjgL9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47295},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"3315603933f890e7218a9a4d6ed2eaae1d2b1c09","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"10.7.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","typescript":"5.7.2","@babel/core":"^7.28.4","ts-standard":"12.0.2","@types/react":"^19.0.0","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.28.3","@types/react-native":"^0.72.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.27.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.1.11_1760399876049_0.679180514186825","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"expo-masonry-layout","version":"1.2.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@1.2.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"26e4b109b8383b46e171fa9931a9eb98bbd980a3","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-1.2.0.tgz","fileCount":19,"integrity":"sha512-EpbEykOjPJahO+vYMb7x2Xct8lluGCjv8M1F/VZ5/hV7C8k91UtpADjw1c9nXekfsFi6XU86iK0L90eXxCSdBA==","signatures":[{"sig":"MEQCIGvoGce/pIhSff1hycectmThJjDISf+199XzOD3wOc5tAiAiqjSvT659C/4wM4bfCplaTBBsyXBsXcu1yP9cRrkxQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47372},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"d9729ff34e6ee95d71d8159aa7f58875a372b51b","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_1.2.0_1772797935671_0.6716902636387332","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"expo-masonry-layout","version":"2.0.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"0ddbc4bbf292c7ed125f42ef01ea9d7ccd0e8db8","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.0.tgz","fileCount":19,"integrity":"sha512-AM3K/mrxH7/ogN9qcNtriwXQi8DRMZsVD08Ck+w1a5r4ry8yEcO2myFu8jjO5ABO8e/I56lz889aEmSLxsTL7Q==","signatures":[{"sig":"MEQCIBSnlzmC64Sx85IJ+ryp3NBOotijO/bcExAxRQkXC2UNAiBaGtCsYsEJqFYsrPqeYlrdxAFW+jpMQhVtumfOii9MTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80790},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"46163c2f0f810a016ae14c241cdc6dbbb9e48427","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.0_1776976473702_0.7305531468818061","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"expo-masonry-layout","version":"2.0.1","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.1","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"a886f31e7605725b9675111903ca3105409e5fef","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.1.tgz","fileCount":19,"integrity":"sha512-0y9+/Km8z37R+bWwKz/K3v7LUNfsMURz1Chl3HmIGC21v+M0RLZrEGWz5S4IVzFRmNhNEnvNGCYgoXc7DjmO3Q==","signatures":[{"sig":"MEQCIEqP6ylgk8CRRPY55sETngmmlsIRZnpVjszv+fJgyHN2AiAjC2Yg1xBglsH8eB1QrlM5s6SVKXeHW3mS/AMGdqhNUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80741},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"a6a24c4b651f9acca34ade94faa55d0f7fc9e7fa","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.1_1776988621144_0.8743014679024375","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"expo-masonry-layout","version":"2.0.2","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.2","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"964b2c265e638dacc1f08c5b15685d8394778cee","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.2.tgz","fileCount":19,"integrity":"sha512-hCegGvQkqf2I7uvAXXt0XGrHC4CDcaMiWkJJDZAHazA62tsBSISqdAztZO+LUq6+KK8VBWBr8FUceM6SYeTPow==","signatures":[{"sig":"MEUCIDsB7EEE3A54qf/UmGfJtgx29C7ttTzGvhNvzJTGoJmCAiEA1g5UsJYTLCUS4333J56R/0GZkIlHkh6pQ6wFvcNjMoQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81888},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"0b240a133701e92d5e59c37301f50030ce0690dc","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.2_1777048802432_0.3974006173130351","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"expo-masonry-layout","version":"2.0.3","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.3","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"6cd9f1745b3e2b712c95f5e10db82de7e8651a75","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.3.tgz","fileCount":19,"integrity":"sha512-gFg6Q9+F/cBNRyRiTjM843dMAEeaICn7uJvr1cy/IicW+plpVnxesNBFuHSn4Y/+hZaOZMvFWDCtS/Rvj1VzUQ==","signatures":[{"sig":"MEUCIBZ24Me5fhkb0pjf3mnNds542kjMSE9RysuEpRA4wAAXAiEAgQMW7jidQriMcbvK1soe1E2964fZZUMZiga9E0n8Xtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82523},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"d76d4861efc79114c60762e0b4dab67659911c8d","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.3_1777049727028_0.1819377220459244","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"expo-masonry-layout","version":"2.0.4","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.4","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"408b17e55db83844136550de9e93b613ca417551","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.4.tgz","fileCount":19,"integrity":"sha512-UUF3SHDsv26rGJwAD5m4df7CR8H4tvWcMuR+g4yFlKVL4uXhBrTXDceMamjLcrIbekX1Xxuahpfm9n+GmnSzHA==","signatures":[{"sig":"MEQCIA4UlC48eS1LiGTUdwmfwxjVQLLgJKU58MefNLl3C7iPAiBGNSmGz6PzNAHBA2DtpClFaqqOEpfqTYxzrKw1w0tx4w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":85096},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"cad5e7b784d370c17de549d368141f458c149b8f","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.4_1777051735482_0.5269045942547343","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"expo-masonry-layout","version":"2.0.5","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.0.5","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"85a8b5faf03bcece1715161ed733731df3fc1075","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.0.5.tgz","fileCount":19,"integrity":"sha512-99NPWNaJRqlsjCNiVZl0Udh67xtVv5naQ/eGETgv0AjrAL526CtL4dHodIIRxPUStyt0+Mqh71KxTwYU5VZNsw==","signatures":[{"sig":"MEQCIE7Sd0XG04HuEe/zQpgOSdbF1Qm+x85TdD1FDcqK4KSGAiAsoValI3NKYtkLx9DqACvIm2QtTpcK2q6jhNTILjEVbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":99817},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"e6fbdeef2b399931f45e2688338894c0556ecc6f","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.0.5_1777053326439_0.5989383280421545","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"expo-masonry-layout","version":"2.1.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.1.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"39ffcfc7ae2ad6001f613645feb9237080c88791","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.1.0.tgz","fileCount":19,"integrity":"sha512-reXKzCeAMr7XfG1ISfairCflZEtoMD2JjxPUIOc7BAYSM4bJc75flj34jqaXeUuJRTYjOT8nVzsOMIUICyc50w==","signatures":[{"sig":"MEUCIGgeLawjVxNFzH76HxLZmdIyyhQNpsmh8egvCDM1Tl7DAiEAtlAsGTLvAR4oBEXYaCvURifpePwAzrUn+sFbM93vJ+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":111706},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"e955f563c5c8700aad918f61028992ccb0e2d0aa","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.1.0_1777822008830_0.7449447984693645","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"expo-masonry-layout","version":"2.1.1","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@2.1.1","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"26c6a555f711153ee5895cbb14214d50d3bedb48","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-2.1.1.tgz","fileCount":19,"integrity":"sha512-SufvHA+l2oM8HF7fttGauB0FrwZ32N744v5adcPDzErqOdnufqMYPOF6YdE0HPIFnPfbihxAzh2lQ2U6Sx6Piw==","signatures":[{"sig":"MEQCIGUWjtnOdrO/WO1KtWI9DmiE5K/Rsx3DYnoDTJUASmgEAiAduXrGTmatDSVOUdXzEjfV5elEQAGPZMVOR0G5XSRDrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113628},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"bc344f4c414e166686012031b9dba10f890cc43a","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"5.9.3","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.1.1","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.56.1","@typescript-eslint/eslint-plugin":"^8.56.1"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.70.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_2.1.1_1777822251935_0.2832337026437639","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"expo-masonry-layout","version":"3.0.0","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","_id":"expo-masonry-layout@3.0.0","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"dist":{"shasum":"4f42d7ad96b973f26d752593d5800c0283c36b5e","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-3.0.0.tgz","fileCount":19,"integrity":"sha512-w5/8wTR/IM0U2l6u0YCPBS00GF6487+cq06GSKjukzgubpNPit4oJxTI6/JSNkpdR6F1y+snts4cS6K64nDP2g==","signatures":[{"sig":"MEQCICHyTvGmL0jmB4g+zJ6EbY3XGjVwE6PzHYddAzFgS3j2AiA7VuNEVfqDkdPjOweEPyvcBTow/NU0SJvwmWFFjBS+1Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":113629},"main":"./lib/index.js","types":"./lib/index.d.ts","module":"./lib/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js"}},"gitHead":"f2a612d243472d9146b49bd3dd69eb0813e2d48e","scripts":{"lint":"npx ts-standard","test":"jest","build":"tsc","clean":"rm -rf lib","lint:fix":"npx ts-standard --fix","build:watch":"tsc --watch","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"repository":{"url":"git+https://github.com/echowaves/expo-masonry-layout.git","type":"git"},"_npmVersion":"11.9.0","description":"High-performance masonry layout component for React Native and Expo applications","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","browserslist":["> 1%","last 2 versions"],"react-native":"./lib/index.js","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"29.7.0","eslint":"^8.57.1","typescript":"7.0.2","@babel/core":"^7.29.0","ts-standard":"^12.0.2","@types/react":"^19.2.18","eslint-plugin-n":"16.6.2","@babel/preset-env":"^7.29.0","@types/react-native":"0.73.0","eslint-plugin-import":"2.32.0","eslint-plugin-promise":"6.6.0","@babel/preset-typescript":"^7.28.5","@typescript-eslint/parser":"^8.66.0","@typescript-eslint/eslint-plugin":"^8.66.0"},"peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.79.0 <1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/expo-masonry-layout_3.0.0_1786144517202_0.02339584831929198","host":"s3://npm-registry-packages-npm-production"}},"57.0.0":{"name":"expo-masonry-layout","version":"57.0.0","description":"High-performance masonry layout component for React Native and Expo applications","main":"./lib/index.js","module":"./lib/index.js","types":"./lib/index.d.ts","react-native":"./lib/index.js","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","require":"./lib/index.js","react-native":"./lib/index.js","default":"./lib/index.js"}},"sideEffects":false,"publishConfig":{"access":"public"},"scripts":{"build":"tsc","build:watch":"tsc --watch","clean":"rm -rf lib","prepublishOnly":"npm run clean && npm run build","test":"jest","lint":"npx ts-standard","lint:fix":"npx ts-standard --fix"},"keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"author":{"name":"Echowaves Corp."},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/echowaves/expo-masonry-layout.git"},"bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"homepage":"https://github.com/echowaves/expo-masonry-layout#readme","peerDependencies":{"react":">=18.0.0 <20.0.0","react-native":">=0.79.0 <1.0.0"},"devDependencies":{"@babel/core":"^7.29.0","@babel/preset-env":"^7.29.0","@babel/preset-typescript":"^7.28.5","@types/react":"^19.2.18","@types/react-native":"0.73.0","@typescript-eslint/eslint-plugin":"^8.66.0","@typescript-eslint/parser":"^8.66.0","eslint":"^8.57.1","eslint-plugin-import":"2.32.0","eslint-plugin-n":"16.6.2","eslint-plugin-promise":"6.6.0","jest":"29.7.0","ts-standard":"^12.0.2","typescript":"7.0.2"},"engines":{"node":">=18.0.0"},"browserslist":["> 1%","last 2 versions"],"gitHead":"f2a612d243472d9146b49bd3dd69eb0813e2d48e","_id":"expo-masonry-layout@57.0.0","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-Q1ZQqIPhGq06h1z9OS75fU9S7U7HhvfBhGrycTqStsMZxuz4KXogX0PMCISDLp/IOv4crkUwCm1Cp9zdCfKTBg==","shasum":"fdd1fe8ee5452d4c26bfe57670463e7779666c7a","tarball":"https://registry.npmjs.org/expo-masonry-layout/-/expo-masonry-layout-57.0.0.tgz","fileCount":19,"unpackedSize":113630,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAXINc06Qvr52xFof/aNA0V1b0Mlu6SxRX6uCcIgB5OqAiEAyIOnVPhdNjEXnmUGVjCeF5rMEd19dsLCC6pSXdJ54dg="}]},"_npmUser":{"name":"echowaves","email":"dmitry@echowaves.com"},"directories":{},"maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/expo-masonry-layout_57.0.0_1786144676031_0.6905705781547631"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-09T00:51:22.766Z","modified":"2026-08-07T23:17:56.331Z","1.0.0":"2025-08-09T00:51:22.945Z","1.0.1":"2025-08-09T00:59:01.824Z","1.0.2":"2025-08-09T01:07:31.757Z","1.0.3":"2025-08-10T00:18:52.984Z","1.0.4":"2025-08-10T00:22:55.594Z","1.0.5":"2025-08-10T00:29:27.159Z","1.0.6":"2025-08-10T13:04:56.656Z","1.0.7":"2025-08-16T00:17:07.719Z","1.0.8":"2025-08-16T00:20:29.585Z","1.0.9":"2025-08-16T00:31:49.911Z","1.1.0":"2025-08-24T20:45:33.880Z","1.1.1":"2025-08-28T18:54:10.966Z","1.1.2":"2025-08-28T19:00:59.288Z","1.1.3":"2025-10-11T21:23:41.849Z","1.1.4":"2025-10-11T21:33:01.023Z","1.1.5":"2025-10-11T21:58:06.396Z","1.1.6":"2025-10-12T21:45:55.992Z","1.1.7":"2025-10-12T23:34:13.549Z","1.1.8":"2025-10-13T23:35:30.057Z","1.1.9":"2025-10-13T23:45:34.871Z","1.1.10":"2025-10-13T23:48:00.649Z","1.1.11":"2025-10-13T23:57:56.229Z","1.2.0":"2026-03-06T11:52:15.853Z","2.0.0":"2026-04-23T20:34:33.856Z","2.0.1":"2026-04-23T23:57:01.324Z","2.0.2":"2026-04-24T16:40:02.664Z","2.0.3":"2026-04-24T16:55:27.179Z","2.0.4":"2026-04-24T17:28:55.630Z","2.0.5":"2026-04-24T17:55:26.637Z","2.1.0":"2026-05-03T15:26:48.948Z","2.1.1":"2026-05-03T15:30:52.069Z","3.0.0":"2026-08-07T23:15:17.357Z","57.0.0":"2026-08-07T23:17:56.182Z"},"bugs":{"url":"https://github.com/echowaves/expo-masonry-layout/issues"},"author":{"name":"Echowaves Corp."},"license":"MIT","homepage":"https://github.com/echowaves/expo-masonry-layout#readme","keywords":["react-native","expo","masonry","layout","grid","virtualized","performance"],"repository":{"type":"git","url":"git+https://github.com/echowaves/expo-masonry-layout.git"},"description":"High-performance masonry layout component for React Native and Expo applications","maintainers":[{"name":"echowaves","email":"dmitry@echowaves.com"}],"readme":"# expo-masonry-layout\n\n<p align=\"center\">\n  <img src=\"./assets/simulator_screenshot_B5DA2B98-A4BA-4B8A-8917-45AE7F50F97A.png\" alt=\"Expo Masonry Layout Demo\" width=\"300\" />\n</p>\n\n<p align=\"center\">\n  <strong>A high-performance masonry layout component for React Native and Expo applications</strong>\n</p>\n\n<p align=\"center\">\n  <em>✨ Used in production by <a href=\"https://github.com/echowaves/WiSaw\">WiSaw</a> - a location-based photo sharing app</em>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/expo-masonry-layout\">\n    <img src=\"https://img.shields.io/npm/v/expo-masonry-layout.svg\" alt=\"npm version\" />\n  </a>\n  <a href=\"https://www.npmjs.com/package/expo-masonry-layout\">\n    <img src=\"https://img.shields.io/npm/dm/expo-masonry-layout.svg\" alt=\"npm downloads\" />\n  </a>\n  <a href=\"https://github.com/echowaves/expo-masonry-layout/blob/main/LICENSE\">\n    <img src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"license\" />\n  </a>\n</p>\n\n## ✨ Features\n\n- 🚀 **High Performance**: Uses VirtualizedList for optimal performance with large datasets\n- 📱 **Responsive**: Automatically adapts to screen size and orientation changes\n- 🎨 **Flexible**: Supports custom aspect ratios and layout configurations\n- 🔄 **Interactive**: Built-in pull-to-refresh and infinite scroll support\n- 📐 **Dual Layout Modes**: Row-based masonry with justified alignment and column-based masonry with shortest-column placement\n- 📊 **Responsive Columns**: Column mode supports responsive breakpoints for adaptive column counts\n- 📝 **Extra Height**: `getExtraHeight` callback for adding dynamic per-item content (captions, badges, buttons) below images\n- 🔍 **Inline Expand**: Expand items to full-width detail view inline, with multi-expand support and automatic height measurement\n- 📏 **Dynamic Height Measurement**: Expanded items auto-measure their rendered height — supports dynamic content like accordions, comment lists, and reply forms\n- � **Shadow-Friendly**: Item containers don't clip overflow, so shadows, badges, and decorations render correctly\n- �🎯 **TypeScript**: Full TypeScript support with comprehensive types\n- ⚡ **Optimized**: Minimal re-renders with memoized calculations\n\n## 🌟 Real-world Usage\n\nThis component is actively used in production by:\n\n- **[WiSaw](https://github.com/echowaves/WiSaw)** - A location-based photo sharing mobile app that displays thousands of user-generated photos in a beautiful masonry layout. WiSaw demonstrates the component's ability to handle large datasets with smooth scrolling and optimal performance.\n\nThe screenshot above is taken directly from the WiSaw app, showcasing real-world usage with actual user photos.\n\n## 🚀 Installation\n\n````bash\nnpm install expo-masonry-layout\n# or\nyarn add expo-masonry-layout\n\n\n## 📖 Quick Start\n\n```tsx\nimport React from 'react';\nimport { View, Image, Text } from 'react-native';\nimport ExpoMasonryLayout from 'expo-masonry-layout';\n\nconst MyMasonryGrid = () => {\n  const data = [\n    { id: '1', uri: 'https://example.com/image1.jpg', width: 300, height: 400 },\n    { id: '2', uri: 'https://example.com/image2.jpg', width: 400, height: 300 },\n    { id: '3', uri: 'https://example.com/image3.jpg', width: 300, height: 300 },\n    // ... more items\n  ];\n\n  const renderItem = ({ item, dimensions }) => (\n    <View style={{ width: dimensions.width, height: dimensions.height }}>\n      <Image\n        source={{ uri: item.uri }}\n        style={{ width: '100%', height: '100%' }}\n        resizeMode=\"cover\"\n      />\n    </View>\n  );\n\n  return (\n    <ExpoMasonryLayout\n      data={data}\n      renderItem={renderItem}\n      spacing={6}\n      keyExtractor={item => item.id}\n    />\n  );\n};\n````\n\n## 🖼️ Using with Expo Cached Image\n\nFor better performance with remote images, we recommend using [`expo-cached-image`](https://github.com/kanzitelli/expo-cached-image) alongside the masonry layout:\n\n```bash\nnpm install expo-cached-image\n# or\nyarn add expo-cached-image\n```\n\nHere's how to integrate it:\n\n```tsx\nimport React from 'react';\nimport { View, Dimensions } from 'react-native';\nimport ExpoMasonryLayout from 'expo-masonry-layout';\nimport { CachedImage } from 'expo-cached-image';\n\nconst CachedMasonryGrid = () => {\n  const data = [\n    { id: '1', uri: 'https://example.com/image1.jpg', width: 300, height: 400 },\n    { id: '2', uri: 'https://example.com/image2.jpg', width: 400, height: 300 },\n    { id: '3', uri: 'https://example.com/image3.jpg', width: 300, height: 300 }\n    // ... more items\n  ];\n\n  const renderItem = ({ item, dimensions }) => (\n    <View style={{ width: dimensions.width, height: dimensions.height }}>\n      <CachedImage\n        source={{ uri: item.uri }}\n        style={{ width: '100%', height: '100%' }}\n        resizeMode=\"cover\"\n        cacheKey={`masonry-${item.id}`} // Unique cache key\n        placeholderContent={\n          <View\n            style={{\n              flex: 1,\n              backgroundColor: '#f0f0f0',\n              justifyContent: 'center',\n              alignItems: 'center'\n            }}\n          />\n        }\n      />\n    </View>\n  );\n\n  return (\n    <ExpoMasonryLayout\n      data={data}\n      renderItem={renderItem}\n      spacing={6}\n      keyExtractor={(item) => item.id}\n    />\n  );\n};\n```\n\n### Benefits of Using Expo Cached Image:\n\n- **Automatic Caching**: Images are cached locally after first load\n- **Placeholder Support**: Shows placeholder while loading\n- **Better Performance**: Reduces network requests for repeated views\n- **Memory Management**: Efficient image memory handling\n- **Progressive Loading**: Smooth loading experience\n\n### Performance Tips with Cached Images:\n\n1. **Use Unique Cache Keys**: Ensure each image has a unique `cacheKey` prop\n2. **Optimize Image Sizes**: Use appropriately sized images for your layout\n3. **Implement Placeholders**: Provide placeholder content for better UX\n4. **Clear Cache When Needed**: Implement cache clearing for updated content\n\n```tsx\n// Example with cache management\nimport { CachedImage } from 'expo-cached-image';\n\nconst clearImageCache = async () => {\n  await CachedImage.clearCache();\n};\n\n// Clear cache for specific images\nconst clearSpecificCache = async (imageId) => {\n  await CachedImage.clearCache(`masonry-${imageId}`);\n};\n```\n\n## � Column Layout Mode\n\nColumn-based masonry places items into columns of equal width, filling the shortest column first — the standard Pinterest-style layout:\n\n```tsx\nimport ExpoMasonryLayout from 'expo-masonry-layout';\n\nconst ColumnMasonryGrid = () => (\n  <ExpoMasonryLayout\n    data={data}\n    renderItem={renderItem}\n    layoutMode=\"column\"\n    columns={3}\n    spacing={8}\n  />\n);\n```\n\n### Responsive Column Count\n\nUse breakpoints to adapt column count to screen width. Breakpoints are width ceilings evaluated from smallest up:\n\n```tsx\nimport ExpoMasonryLayout, { ColumnsConfig } from 'expo-masonry-layout';\n\n// 1 column on phones (≤400), 2 on tablets (≤768), 3 on wider screens\nconst columns: ColumnsConfig = {\n  default: 3,\n  768: 2,\n  400: 1,\n};\n\nconst ResponsiveGrid = () => (\n  <ExpoMasonryLayout\n    data={data}\n    renderItem={renderItem}\n    layoutMode=\"column\"\n    columns={columns}\n    spacing={8}\n  />\n);\n```\n\n## 📝 Extra Height (getExtraHeight)\n\nAdd dynamic content below each item's image area using the `getExtraHeight` callback. Works in both row and column modes:\n\n```tsx\nimport ExpoMasonryLayout, { MasonryItem, MasonryRenderItemInfo } from 'expo-masonry-layout';\n\n// Calculate extra height for caption text\nconst getExtraHeight = (item: MasonryItem, computedWidth: number): number => {\n  if (!item.caption) return 0;\n  const charsPerLine = Math.floor(computedWidth / 8);\n  const numLines = Math.ceil((item.caption as string).length / charsPerLine);\n  return numLines * 18 + 16; // lineHeight * lines + padding\n};\n\nconst renderItem = ({ item, dimensions, extraHeight }: MasonryRenderItemInfo) => {\n  const imageHeight = dimensions.height - extraHeight;\n  return (\n    <View style={{ width: dimensions.width, height: dimensions.height }}>\n      <Image\n        source={{ uri: item.imageUrl }}\n        style={{ width: dimensions.width, height: imageHeight }}\n        resizeMode=\"cover\"\n      />\n      {item.caption ? (\n        <Text style={{ padding: 8 }}>{item.caption as string}</Text>\n      ) : null}\n    </View>\n  );\n};\n\nconst CaptionGrid = () => (\n  <ExpoMasonryLayout\n    data={data}\n    renderItem={renderItem}\n    layoutMode=\"column\"\n    columns={2}\n    spacing={8}\n    getExtraHeight={getExtraHeight}\n  />\n);\n```\n\n**How it works:**\n- In **row mode**: row height becomes `max(imageHeight + extraHeight)` across all items in the row. Item widths are computed first (two-pass), then `getExtraHeight` is called with the final width.\n- In **column mode**: each item's total height is `scaledImageHeight + extraHeight`, stacked independently per column. Width is known upfront (`screenWidth / numColumns`).\n- `extraHeight` is passed in `MasonryRenderItemInfo` so your `renderItem` knows the image/extra split.\n\n## 🔍 Inline Expand\n\nExpand items to a full-width detail view inline within the layout. Works in both **column mode** and **row mode**. Multiple items can be expanded simultaneously — the layout recalculates on each expand/collapse.\n\nExpanded items are automatically measured after rendering, so `getExpandedHeight` is optional — provide it for a better initial estimate, but the layout self-corrects once the content renders:\n\n```tsx\nimport React, { useState, useCallback } from 'react';\nimport { Image, Text, View, TouchableOpacity } from 'react-native';\nimport ExpoMasonryLayout, { MasonryItem, MasonryRenderItemInfo } from 'expo-masonry-layout';\n\nconst getExpandedHeight = (item: MasonryItem, fullWidth: number): number => {\n  const imageHeight = Math.floor(fullWidth / ((item.width ?? 300) / (item.height ?? 300)));\n  return imageHeight + 200; // image + details area\n};\n\nconst InlineExpandGrid = () => {\n  const [expandedIds, setExpandedIds] = useState<string[]>([]);\n\n  const toggleExpand = useCallback((id: string) => {\n    setExpandedIds((prev) =>\n      prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]\n    );\n  }, []);\n\n  const renderItem = useCallback(\n    ({ item, dimensions, isExpanded }: MasonryRenderItemInfo) => {\n      if (isExpanded) {\n        const imageH = Math.floor(\n          dimensions.width / ((item.width ?? 300) / (item.height ?? 300))\n        );\n        return (\n          <TouchableOpacity onPress={() => toggleExpand(item.id)}>\n            <Image\n              source={{ uri: item.imageUrl }}\n              style={{ width: dimensions.width, height: imageH }}\n            />\n            <View style={{ padding: 12 }}>\n              <Text style={{ fontSize: 18 }}>{item.title}</Text>\n              <Text>{item.description}</Text>\n            </View>\n          </TouchableOpacity>\n        );\n      }\n\n      return (\n        <TouchableOpacity onPress={() => toggleExpand(item.id)}>\n          <Image\n            source={{ uri: item.imageUrl }}\n            style={{ width: dimensions.width, height: dimensions.height }}\n          />\n        </TouchableOpacity>\n      );\n    },\n    [toggleExpand]\n  );\n\n  return (\n    <ExpoMasonryLayout\n      data={data}\n      renderItem={renderItem}\n      layoutMode=\"column\"\n      columns={3}\n      spacing={8}\n      expandedItemIds={expandedIds}\n      getExpandedHeight={getExpandedHeight}\n      autoScrollOnExpand\n    />\n  );\n};\n```\n\n**How it works:**\n- In **column mode**: all columns flush to the waterline (max column height), the item spans full width, then columns resume below.\n- In **row mode**: the current row is flushed, the expanded item becomes a solo full-width row, then row packing resumes.\n- `isExpanded` is passed in `MasonryRenderItemInfo` so `renderItem` can branch between collapsed/expanded views.\n- When expanded, `dimensions.width` is the full grid width and `dimensions.height` comes from auto-measurement (or the `getExpandedHeight` estimate before measurement).\n- **Auto-measurement**: Expanded items are rendered without a fixed height constraint and measured via `onLayout`. The layout automatically recalculates when the measured height differs from the estimate. This means dynamic content (accordions, comment threads, reply forms) triggers re-layout automatically.\n- `getExpandedHeight` is **optional** — it provides an initial estimate before measurement. When omitted, `screenWidth` is used as the default estimate.\n- `getExtraHeight` is not applied to expanded items — the expanded height replaces the normal layout entirely.\n- `autoScrollOnExpand` automatically scrolls to items when they are expanded or collapsed. Pass `{ animated: false }` to disable animation, or `{ viewOffset: 50 }` to add padding above the item.\n- Use `onExpandedItemLayout` for custom scroll logic, or a ref with `scrollToItem(id)` for full control.\n\n### Imperative Height Notification\n\nFor cases where you need to programmatically notify the layout of a height change (e.g., after an async data load completes), use the `notifyHeightChanged` method on the ref:\n\n```tsx\nconst ref = useRef<ExpoMasonryLayoutHandle>(null);\n\n// After loading comments, tell the layout the new height\nconst onCommentsLoaded = (itemId: string, newHeight: number) => {\n  ref.current?.notifyHeightChanged(itemId, newHeight);\n};\n```\n\nIn most cases auto-measurement handles everything — `notifyHeightChanged` is only needed when you know the height before the next `onLayout` fires.\n\n## �🔧 Advanced Usage\n\nHere's a comprehensive example inspired by the WiSaw app implementation:\n\n```tsx\nimport React, { useState, useCallback } from 'react';\nimport { TouchableOpacity, Image, Text, View } from 'react-native';\nimport ExpoMasonryLayout, { MasonryRenderItemInfo } from 'expo-masonry-layout';\n\n// Example data structure similar to WiSaw's photo feed\nconst PhotoMasonryGrid = () => {\n  const [photos, setPhotos] = useState(initialPhotos);\n  const [refreshing, setRefreshing] = useState(false);\n  const [loading, setLoading] = useState(false);\n\n  // Photo item renderer similar to WiSaw's implementation\n  const renderPhotoItem = useCallback(\n    ({ item, dimensions }: MasonryRenderItemInfo) => (\n      <TouchableOpacity\n        style={{\n          width: dimensions.width,\n          height: dimensions.height,\n          borderRadius: 12,\n          overflow: 'hidden',\n          backgroundColor: '#f0f0f0',\n          shadowColor: '#000',\n          shadowOffset: { width: 0, height: 2 },\n          shadowOpacity: 0.1,\n          shadowRadius: 4,\n          elevation: 3\n        }}\n        onPress={() => handlePhotoPress(item)}\n        activeOpacity={0.9}\n      >\n        <Image\n          source={{ uri: item.imageUrl }}\n          style={{\n            width: '100%',\n            height: '85%'\n          }}\n          resizeMode=\"cover\"\n          loadingIndicatorSource={require('./placeholder.png')}\n        />\n        <View\n          style={{\n            position: 'absolute',\n            bottom: 0,\n            left: 0,\n            right: 0,\n            backgroundColor: 'rgba(0,0,0,0.7)',\n            padding: 8\n          }}\n        >\n          <Text\n            style={{\n              color: 'white',\n              fontSize: 12,\n              fontWeight: '600'\n            }}\n            numberOfLines={1}\n          >\n            📍 {item.location}\n          </Text>\n          <Text\n            style={{\n              color: 'rgba(255,255,255,0.8)',\n              fontSize: 10,\n              marginTop: 2\n            }}\n          >\n            ❤️ {item.likes} • 👤 {item.username}\n          </Text>\n        </View>\n      </TouchableOpacity>\n    ),\n    []\n  );\n\n  const handlePhotoPress = useCallback((photo) => {\n    // Navigate to photo detail view (like in WiSaw)\n    console.log('Photo pressed:', photo.id);\n  }, []);\n\n  const handleRefresh = useCallback(async () => {\n    setRefreshing(true);\n    try {\n      // Fetch fresh photos from your API\n      const freshPhotos = await fetchLatestPhotos();\n      setPhotos(freshPhotos);\n    } catch (error) {\n      console.error('Error refreshing photos:', error);\n    } finally {\n      setRefreshing(false);\n    }\n  }, []);\n\n  const handleLoadMore = useCallback(async () => {\n    if (loading) return;\n\n    setLoading(true);\n    try {\n      // Load more photos for infinite scroll\n      const morePhotos = await fetchMorePhotos(photos.length);\n      setPhotos((prevPhotos) => [...prevPhotos, ...morePhotos]);\n    } catch (error) {\n      console.error('Error loading more photos:', error);\n    } finally {\n      setLoading(false);\n    }\n  }, [photos.length, loading]);\n\n  return (\n    <ExpoMasonryLayout\n      data={photos}\n      renderItem={renderPhotoItem}\n      spacing={8}\n      maxItemsPerRow={2} // WiSaw uses 2 columns for optimal photo viewing\n      baseHeight={200}\n      keyExtractor={(item) => item.id}\n      refreshing={refreshing}\n      onRefresh={handleRefresh}\n      onEndReached={handleLoadMore}\n      onEndReachedThreshold={0.2}\n      aspectRatioFallbacks={[0.7, 1.0, 1.3, 1.6]} // Common photo ratios\n      style={{ backgroundColor: '#f8f9fa' }}\n      contentContainerStyle={{ padding: 8 }}\n      showsVerticalScrollIndicator={false}\n      initialNumToRender={8}\n      maxToRenderPerBatch={10}\n      windowSize={15}\n    />\n  );\n};\n```\n\n## 🔧 VirtualizedList Pass-Through\n\nThe component now supports passing any VirtualizedList prop directly to the underlying implementation. This gives you full control over scrolling behavior, performance tuning, and platform-specific features:\n\n```tsx\nimport React, { useCallback } from 'react';\nimport ExpoMasonryLayout from 'expo-masonry-layout';\n\nconst AdvancedMasonryGrid = () => {\n  const handleScroll = useCallback((event) => {\n    console.log('Scroll position:', event.nativeEvent.contentOffset.y);\n  }, []);\n\n  const handleScrollBeginDrag = useCallback(() => {\n    console.log('User started scrolling');\n  }, []);\n\n  return (\n    <ExpoMasonryLayout\n      data={photos}\n      renderItem={renderPhotoItem}\n      spacing={8}\n      maxItemsPerRow={2}\n\n      {/* VirtualizedList props passed through */}\n      onScroll={handleScroll}\n      onScrollBeginDrag={handleScrollBeginDrag}\n      scrollEventThrottle={16}\n      showsVerticalScrollIndicator={true}\n      bounces={true}\n      scrollEnabled={true}\n      nestedScrollEnabled={true} // Android\n      maintainVisibleContentPosition={{\n        minIndexForVisible: 0,\n        autoscrollToTopThreshold: 100,\n      }}\n\n      {/* Performance tuning */}\n      initialNumToRender={10}\n      maxToRenderPerBatch={5}\n      windowSize={10}\n      removeClippedSubviews={true}\n      updateCellsBatchingPeriod={50}\n\n      {/* Infinite scroll */}\n      onEndReached={loadMoreData}\n      onEndReachedThreshold={0.2}\n\n      {/* Pull to refresh */}\n      refreshing={isRefreshing}\n      onRefresh={handleRefresh}\n    />\n  );\n};\n```\n\n## 📋 API Reference\n\n### Props\n\nThe component extends React Native's `VirtualizedListProps` and accepts all VirtualizedList properties in addition to the masonry-specific props below:\n\n#### Masonry-Specific Props\n\n| Prop                     | Type                                                                              | Default                                    | Description                                            |\n| ------------------------ | --------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------ |\n| `data`                   | `MasonryItem[]`                                                                   | **required**                               | Array of items to display                              |\n| `renderItem`             | `(info: MasonryRenderItemInfo) => ReactElement`                                   | **required**                               | Function to render each item                           |\n| `layoutMode`             | `'row' \\| 'column'`                                                               | `'row'`                                    | Layout mode: row-based or column-based masonry         |\n| `columns`                | `number \\| ColumnsConfig`                                                         | `2`                                        | Number of columns or responsive breakpoint config (column mode only) |\n| `getExtraHeight`         | `(item: MasonryItem, computedWidth: number) => number`                            | `undefined`                                | Calculate extra height below image area per item       |\n| `expandedItemIds`        | `string[]`                                                                        | `undefined`                                | Item IDs currently expanded to full width              |\n| `getExpandedHeight`      | `(item: MasonryItem, fullWidth: number) => number`                                | `undefined`                                | Optional initial height estimate for expanded items; auto-measurement corrects after render |\n| `spacing`                | `number`                                                                          | `6`                                        | Space between items in pixels                          |\n| `maxItemsPerRow`         | `number`                                                                          | `6`                                        | Maximum number of items per row (row mode only)        |\n| `baseHeight`             | `number`                                                                          | `100`                                      | Base height for layout calculations (row mode only)    |\n| `aspectRatioFallbacks`   | `number[]`                                                                        | `[0.56, 0.67, 0.75, 1.0, 1.33, 1.5, 1.78]` | Fallback aspect ratios                                 |\n| `preserveItemDimensions` | `boolean`                                                                         | `false`                                    | Whether to respect exact item dimensions when provided |\n| `getItemDimensions`      | `(item: MasonryItem, index: number) => { width: number; height: number } \\| null` | `undefined`                                | Function to calculate custom dimensions for items      |\n| `keyExtractor`           | `(item: MasonryItem, index: number) => string`                                    | `(item, index) => item.id \\|\\| index`      | Extract unique key for each item                       |\n| `onItemLayout`           | `(info: MasonryRenderItemInfo) => void`                                           | `undefined`                                | Callback when an item's layout dimensions are calculated |\n| `autoScrollOnExpand`     | `boolean \\| { animated?: boolean; viewOffset?: number }`                          | `undefined`                                | Auto-scroll to items when expanded or collapsed (column mode only) |\n| `onExpandedItemLayout`   | `(info: { item, index, dimensions, isExpanded }) => void`                         | `undefined`                                | Callback fired for each item whose expand/collapse state changed |\n\n#### VirtualizedList Props\n\nAll [VirtualizedList props](https://reactnative.dev/docs/virtualizedlist) are supported and passed through to the underlying implementation, including:\n\n- **Performance**: `initialNumToRender`, `maxToRenderPerBatch`, `windowSize`, `updateCellsBatchingPeriod`, `removeClippedSubviews`\n- **Scrolling**: `onScroll`, `onScrollBeginDrag`, `onScrollEndDrag`, `onMomentumScrollBegin`, `onMomentumScrollEnd`, `scrollEventThrottle`\n- **Interaction**: `onEndReached`, `onEndReachedThreshold`, `refreshing`, `onRefresh`, `scrollEnabled`, `bounces`\n- **Styling**: `style`, `contentContainerStyle`, `showsVerticalScrollIndicator`\n- **Platform**: `nestedScrollEnabled` (Android), `scrollIndicatorInsets` (iOS)\n\n### 🔷 Types\n\n#### MasonryItem\n\n```tsx\ninterface MasonryItem {\n  id: string;\n  width?: number;\n  height?: number;\n  preserveDimensions?: boolean;\n  [key: string]: any;\n}\n```\n\n#### MasonryRenderItemInfo\n\n```tsx\ninterface MasonryRenderItemInfo {\n  item: MasonryItem;\n  index: number;\n  dimensions: {\n    width: number;\n    height: number;\n    left: number;\n    top: number;\n  };\n  extraHeight: number;    // Extra height added below image (0 if no getExtraHeight)\n  columnIndex?: number;   // Column index (column mode only, undefined when expanded)\n  isExpanded: boolean;    // Whether item is in expanded full-width state\n}\n```\n\n#### ColumnsConfig\n\n```tsx\ntype ColumnsConfig = number | { default: number; [breakpoint: number]: number };\n```\n\n#### ExpoMasonryLayoutHandle (Ref API)\n\nThe component supports `React.forwardRef`. Use a ref to access imperative scroll methods:\n\n```tsx\nimport { useRef } from 'react';\nimport ExpoMasonryLayout, { ExpoMasonryLayoutHandle } from 'expo-masonry-layout';\n\nconst ref = useRef<ExpoMasonryLayoutHandle>(null);\n\n<ExpoMasonryLayout ref={ref} ... />\n\n// Scroll to a specific item by ID\nref.current?.scrollToItem('item-5', { animated: true, viewOffset: 50 });\n\n// Scroll to a specific offset\nref.current?.scrollToOffset(500, { animated: true });\n```\n\n| Method | Signature | Description |\n| --- | --- | --- |\n| `scrollToItem` | `(id: string, options?: { animated?: boolean; viewOffset?: number }) => void` | Scroll to an item by ID. No-op if ID not found. |\n| `scrollToOffset` | `(offset: number, options?: { animated?: boolean }) => void` | Scroll to an absolute offset. Works in both layout modes. |\n| `notifyHeightChanged` | `(id: string, newHeight: number) => void` | Programmatically update the measured height of an expanded item, triggering re-layout. |\n\n## 🔄 Custom Dimensions\n\nThe library supports multiple ways to override the automatic dimension calculation:\n\n### 1. Per-Item Dimension Preservation\n\nSet `preserveDimensions: true` on individual items to use their exact `width` and `height`:\n\n```tsx\nconst dataWithExactSizes = [\n  {\n    id: '1',\n    width: 300,\n    height: 200,\n    preserveDimensions: true, // This item will be exactly 300x200\n    imageUrl: 'https://example.com/image1.jpg'\n  },\n  {\n    id: '2',\n    width: 400,\n    height: 300,\n    // No preserveDimensions flag - will be auto-calculated\n    imageUrl: 'https://example.com/image2.jpg'\n  }\n];\n```\n\n### 2. Global Dimension Preservation\n\nUse the `preserveItemDimensions` prop to respect exact dimensions for all items that have `width` and `height`:\n\n```tsx\n<ExpoMasonryLayout data={data} preserveItemDimensions={true} renderItem={renderItem} />\n```\n\n### 3. Custom Dimension Function\n\nUse `getItemDimensions` for dynamic dimension calculation:\n\n```tsx\nconst getCustomDimensions = (item, index) => {\n  // Make every 5th item extra wide\n  if (index % 5 === 0) {\n    return { width: 300, height: 150 };\n  }\n\n  // Featured items get special treatment\n  if (item.featured) {\n    return { width: 250, height: 200 };\n  }\n\n  // Return null for auto-calculation\n  return null;\n};\n\n<ExpoMasonryLayout data={data} getItemDimensions={getCustomDimensions} renderItem={renderItem} />;\n```\n\n### 4. Mixed Layout Strategy\n\nCombine all approaches for maximum flexibility:\n\n```tsx\nconst mixedData = [\n  {\n    id: '1',\n    width: 200,\n    height: 300,\n    preserveDimensions: true // Exact size\n  },\n  {\n    id: '2',\n    featured: true // Will use getItemDimensions\n  },\n  {\n    id: '3',\n    width: 400,\n    height: 300 // Will be auto-calculated unless preserveItemDimensions=true\n  }\n];\n\n<ExpoMasonryLayout\n  data={mixedData}\n  preserveItemDimensions={false}\n  getItemDimensions={(item, index) => {\n    if (item.featured) return { width: 250, height: 200 };\n    return null;\n  }}\n  renderItem={renderItem}\n/>;\n```\n\n**Priority Order:**\n\n1. `getItemDimensions` function result (highest priority)\n2. `preserveDimensions: true` on item + item's `width`/`height`\n3. `preserveItemDimensions: true` prop + item's `width`/`height`\n4. Auto-calculated from aspect ratio (lowest priority)\n\n## �🎯 Performance Tips\n\n1. **Provide Image Dimensions**: Include `width` and `height` in your data items for optimal layout calculation\n2. **Memoize Render Function**: Use `useCallback` for your `renderItem` function\n3. **Optimize Images**: Use appropriate image sizes and consider lazy loading\n4. **Key Extractor**: Provide a stable `keyExtractor` function\n5. **Batch Size**: Adjust `maxToRenderPerBatch` based on your item complexity\n\n## 🧮 Layout Algorithm\n\nThe component supports two layout algorithms:\n\n### Row Mode (default)\n\n1. **Row Filling**: Items are added to rows based on available width\n2. **Height Normalization**: All items in a row are scaled to the same height\n3. **Width Justification**: The entire row is scaled to fill the available width\n4. **Extra Height Pass**: If `getExtraHeight` is provided, row height becomes `max(imageHeight + extraHeight)`\n5. **Expanded Items**: When an item is expanded, the current row is flushed, the expanded item occupies a solo full-width row, and packing resumes in a new row below\n6. **Vertical Positioning**: Items are vertically centered within their row\n\n### Column Mode\n\n1. **Column Width**: Calculated as `(screenWidth - spacing) / numColumns`\n2. **Shortest-Column Placement**: Each item is placed in the column with the smallest cumulative height\n3. **Height Calculation**: Image height derived from aspect ratio, plus `extraHeight` if provided\n4. **Natural Band Boundaries**: Items are sliced into horizontal bands for VirtualizedList rendering. Band boundaries are placed at y-coordinates where all columns have a gap between items, ensuring no item is split across bands. This eliminates touch dead zones and visible gaps between bands.\n5. **Shadow Support**: Item containers do not clip overflow, allowing shadows and decorations to render outside item bounds\n\nBoth modes ensure:\n\n- Optimal use of screen space\n- Predictable layout behavior\n- Excellent performance with virtualization\n\n## 📄 License\n\nMIT\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our contributing guidelines and submit pull requests to our repository.\n\n## 📞 Support\n\n- 🐛 **Issues**: [GitHub Issues](https://github.com/echowaves/expo-masonry-layout/issues)\n- 💬 **Discussions**: [GitHub Discussions](https://github.com/echowaves/expo-masonry-layout/discussions)\n- 📱 **See it in action**: Check out [WiSaw](https://github.com/echowaves/WiSaw) for a real-world implementation\n- 📧 **Email**: [Contact Echowaves](mailto:support@echowaves.com)\n\n---\n\n<p align=\"center\">\n  Made with ❤️ by <a href=\"https://github.com/echowaves\">Echowaves Corp.</a><br/>\n  <em>Powering beautiful photo experiences in <a href=\"https://github.com/echowaves/WiSaw\">WiSaw</a> and beyond</em>\n</p>\n<a href=\"https://app.codacy.com/gh/echowaves/expo-masonry-layout/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade\"><img src=\"https://app.codacy.com/project/badge/Grade/dc6ea0352d0c422fbb82feb44a07d80b\"/></a>","readmeFilename":"README.md"}