{"_id":"@academix-admin/selection-viewer","_rev":"7-5b6e9684277d1cc88a05d2a144e36df3","name":"@academix-admin/selection-viewer","dist-tags":{"latest":"0.5.0"},"versions":{"0.1.0":{"name":"@academix-admin/selection-viewer","version":"0.1.0","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.1.0","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"47371040ba11c3de1a66db448eabfd42be29e7db","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.1.0.tgz","fileCount":9,"integrity":"sha512-5vLr31unqbC/xpM4xHK+JRR7jV8XalOiAfdwOSwx/OWbWCKO6/KVgLtGS0dmfRPCJSDMCmZgT2BXN/t04Zf9hQ==","signatures":[{"sig":"MEUCIAicJyBKJgHVo2Tib8y61VPjXJxj9SspE4mg9l6RczzCAiEAxSTbQyMkLfI6j+T0gFo50umYg9sdJUsPHnGy/aehd/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130251},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"5acf6abcf7c8b5108dc9ce53118249506f9b367a","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.1.0_1786127297628_0.6180652135883427","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@academix-admin/selection-viewer","version":"0.2.0","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.2.0","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"2658e91a5d9a9188bed6c8ce40ca92403d2eba32","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.2.0.tgz","fileCount":9,"integrity":"sha512-X3+xNIo2d5WB8ZuOflWXvTuXz7KAEU/L6Xp6q7p/x5xztp6X+Lo3ZnkM85AHAiO1S6lQLHRwZUnF8osuLC8S6w==","signatures":[{"sig":"MEUCIQDrusngu6XVTlgxqvmnHHqs8S++zzZQJuou6Iw7Kt8CuQIgXJR3jDRlo39cf/ZhzCsKTdxw0d3Rj8n5ETnKQH6IruQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":187532},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"3a382c874f602869106a356ec3335834db03ecd5","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.2.0_1786148508057_0.13372918175737603","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@academix-admin/selection-viewer","version":"0.2.1","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.2.1","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"865afc5dc0e9f590c8a259fd98696a310c93ccf3","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.2.1.tgz","fileCount":9,"integrity":"sha512-9PH36KyiSPj+LMrnMnZVTuAuAUJPDqW3JHZO9JTWyC54hVURB6YLqxD94PZ7NJ37LYVXSO7m9ziYGwAYDghmww==","signatures":[{"sig":"MEUCICZ3If2+ZQnsp+9yUMyCEPQPj2cuJndbbHvMWmnu0rLxAiEA07/fFCq3VUtgWsXDHpNPa0uwV2SqgCL7aBfQ6+R0ueI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202719},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"2fb8e01f6ea7d41bf480d058a8c99b32dd2e53cb","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.2.1_1787524899155_0.7612516381721524","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@academix-admin/selection-viewer","version":"0.3.0","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.3.0","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"622820dafa56390ad11f8ea3899410e8c3c84da6","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.3.0.tgz","fileCount":9,"integrity":"sha512-3h2EUw0qbFp6j4IYE9PrR6UFUNvptHOuNqYid6eRsksk0PM2el/hKQSgCt34u1+9DVSjgVwZUWIlhpU73EGf6Q==","signatures":[{"sig":"MEQCIBfUs+RKwbdaJBArzOFTYHPyhplqIdE0D9P8Z7Sv8kwGAiB9w6X1n3CRQYuTmIQI9LV8r6PxBMGTbxpmF8FnfZxISQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202719},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"2fb8e01f6ea7d41bf480d058a8c99b32dd2e53cb","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.3.0_1787525105664_0.20783437197689913","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@academix-admin/selection-viewer","version":"0.4.0","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.4.0","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"cb3786c6e2cc333745dfcf843f60971829dde2d6","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.4.0.tgz","fileCount":9,"integrity":"sha512-4Rz2cKpFaQ4vC38aJj5YIHfAog0BWeLrofSpX9MMFOposg0Z26qeE/k+77QEHjSQi3iilXz7ALr5DxNsvkKabw==","signatures":[{"sig":"MEQCIHaZvRqopGBZtcff06x6jg4AXb3J1R0AV7MhjYuRNlu5AiASjA2qf5ITVofTc1d7PriGDxOmYaM1jm9PaUuB1lIYOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214883},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"06e6e717d1cd57a6f6272bcfd5d176de6bd8fca5","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.4.0_1788103179801_0.9918121136804896","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@academix-admin/selection-viewer","version":"0.4.1","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"author":{"name":"Academix"},"license":"MIT","_id":"@academix-admin/selection-viewer@0.4.1","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"dist":{"shasum":"8572edb840102af92c35fc4df4fdca52f5059f9e","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.4.1.tgz","fileCount":9,"integrity":"sha512-wMavthUhhd3C77jDNf18MxGCNH5JZFYZPvLxjzxhADiqqdFA0tPdwztz3WnvoNi8dwKl+JcotoIDy+8mv5UMgA==","signatures":[{"sig":"MEQCIH1kWR5+A/h7qoFG1uiLAjeT+aRePxqDFNePIzeb5P8KAiA7YBToEVKInNHppbVe4bDTnLaUq6DVzqc1k6P139CY9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216315},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"gitHead":"31ae58a614b2d7ce95dd504925c44fd04920e195","scripts":{"dev":"tsup --watch","test":"vitest run","build":"tsup","clean":"rimraf dist","typecheck":"tsc --noEmit","test:watch":"vitest"},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"repository":{"url":"git+https://github.com/academix-admin/academix-ui.git","type":"git","directory":"packages/selection-viewer"},"_npmVersion":"11.13.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","dependencies":{"@academix-admin/modal-sheet":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^18.3.1","rimraf":"^6.0.1","react-dom":"^18.3.1","typescript":"^5.9.3","@types/react":"^19.0.0","@types/react-dom":"^19.0.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/selection-viewer_0.4.1_1788333016566_0.3884028709929592","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@academix-admin/selection-viewer","version":"0.5.0","description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"license":"MIT","author":{"name":"Academix"},"repository":{"type":"git","url":"git+https://github.com/academix-admin/academix-ui.git","directory":"packages/selection-viewer"},"homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./package.json":"./package.json"},"scripts":{"build":"tsup","clean":"rimraf dist","dev":"tsup --watch","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit"},"dependencies":{"@academix-admin/modal-sheet":"^0.1.0","@academix-admin/overlay-route":"^0.1.0"},"peerDependencies":{"react":">=18.0.0","react-dom":">=18.0.0"},"devDependencies":{"@types/react":"^19.0.0","@types/react-dom":"^19.0.0","react":"^18.3.1","react-dom":"^18.3.1","rimraf":"^6.0.1","tsup":"^8.3.5","typescript":"^5.9.3"},"publishConfig":{"access":"public"},"gitHead":"2b88aaf23c732b09086c873f38898446da1d47bb","_id":"@academix-admin/selection-viewer@0.5.0","_nodeVersion":"24.15.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-stGHyHfdqcboncfM7D9ioRgF2HtiKzk0BIZg+cXXFZxx3PgyLkMm8zkWU0Sxhk7uqc1/u5fvlJTEsXDw0WyaSg==","shasum":"05c4cf71cfe633cbb441dea9c4ce2e8da6213bdc","tarball":"https://registry.npmjs.org/@academix-admin/selection-viewer/-/selection-viewer-0.5.0.tgz","fileCount":9,"unpackedSize":221992,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCAgSo95fe/C1lPxxwpnNOZd6OeQVpHrZ1IhA5/CD8v8AIgKvagJdtrM9bWbOPTC3m4ZIzAOC3fwlRMr9wOyeOpLGc="}]},"_npmUser":{"name":"academix-group","email":"academix.tech4u@gmail.com"},"directories":{},"maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/selection-viewer_0.5.0_1788356535652_0.9697193688888082"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-07T18:28:17.405Z","modified":"2026-09-02T13:42:15.973Z","0.1.0":"2026-08-07T18:28:17.807Z","0.2.0":"2026-08-08T00:21:48.542Z","0.2.1":"2026-08-23T22:41:39.288Z","0.3.0":"2026-08-23T22:45:05.823Z","0.4.0":"2026-08-30T15:19:39.939Z","0.4.1":"2026-09-02T07:10:16.753Z","0.5.0":"2026-09-02T13:42:15.789Z"},"bugs":{"url":"https://github.com/academix-admin/academix-ui/issues"},"author":{"name":"Academix"},"license":"MIT","homepage":"https://github.com/academix-admin/academix-ui/tree/main/packages/selection-viewer#readme","keywords":["react","selection","picker","sheet","modal","search","imperative","controller"],"repository":{"type":"git","url":"git+https://github.com/academix-admin/academix-ui.git","directory":"packages/selection-viewer"},"description":"Imperative React selection sheet — search + pick from a list — with a controller hook, built on @academix-admin/modal-sheet.","maintainers":[{"name":"academix-group","email":"academix.tech4u@gmail.com"}],"readme":"# @academix-admin/selection-viewer\n\nAn imperative **selection sheet** for React — search + pick one item from a list — with a\ncontroller hook. Built on [`@academix-admin/modal-sheet`](../modal-sheet).\n\n## Install\n\n```bash\nnpm install @academix-admin/selection-viewer\n# peer deps\nnpm install react react-dom\n```\n\n> `@academix-admin/modal-sheet` is installed as a dependency automatically.\n\n## Usage\n\n```tsx\n'use client';\nimport SelectionViewer, { useSelectionController } from '@academix-admin/selection-viewer';\n\nfunction Page() {\n  const [id, ops, isOpen, selectionState] = useSelectionController();\n\n  return (\n    <>\n      <button onClick={ops.open}>Choose a wallet</button>\n      <SelectionViewer\n        id={id}\n        isOpen={isOpen}\n        onClose={ops.close}\n        titleProp={{ text: 'Select wallet', textColor: '#000' }}\n        selectionState={selectionState}\n      >\n        {wallets.map((w) => (\n          <WalletItem key={w.id} wallet={w} onClick={() => { pick(w); ops.close(); }} />\n        ))}\n      </SelectionViewer>\n    </>\n  );\n}\n```\n\n## Pagination\n\nPass `onPaginate` to fetch more items as the user nears the bottom of the list (fires once the\nscroll container is within 20% of a viewport-height of its end):\n\n```tsx\n<SelectionViewer\n  ...\n  onPaginate={async () => {\n    const more = await fetchNextPage();\n    return more.length > 0; // return false once there really is nothing left\n  }}\n/>\n```\n\n## `selectionState`\n\n`\"initial\" | \"loading\" | \"empty\" | \"error\" | \"data\"` — drives which of `loadingProp` /\n`noResultProp` / `errorProp` renders in place of `children`. You own fetching/filtering entirely;\nthe component only renders what you hand it via `children` and this state.\n\n## Composable sections: `Row` / `Column`\n\nFor sectioned lists (e.g. one horizontally-scrolling shelf per category), compose `Row`s inside a\n`Column` as `SelectionViewer`'s `children`. Today's flat `children` usage is, unchanged, an\nimplicit `Column` with no `Row`s.\n\n```tsx\n<SelectionViewer isOpen={isOpen} onClose={ops.close} titleProp={{ text: 'Select wallet', textColor: '#000' }}>\n  <Column>\n    <h3>Recently used</h3>\n    <Row state={recentState} onPaginate={loadMoreRecent}>\n      {recentWallets.map((w) => <WalletItem key={w.id} wallet={w} onClick={() => pick(w)} />)}\n    </Row>\n\n    <h3>All wallets</h3>\n    <Row state={allState} onPaginate={loadMoreAll}>\n      {allWallets.map((w) => <WalletItem key={w.id} wallet={w} onClick={() => pick(w)} />)}\n    </Row>\n  </Column>\n</SelectionViewer>\n```\n\nUnlike `@academix-admin/search-viewer`'s `Row`, this one owns no query/fetch engine —\n`SelectionViewer` never had one either, so you fetch/filter yourself and tell each `Row` its own\n`state` (same idea as passing `selectionState` to `SelectionViewer` today, just per-section). `Row`\ntriggers `onPaginate` when scrolled horizontally near its end. `Column` collects every `Row`'s\nstate and reports one cumulative state up to `SelectionViewer`, so `loadingProp` / `noResultProp` /\n`errorProp` react automatically — no result from ANY row → the outer no-result view; any row still\nloading (and none have data yet) → the outer loading view; and so on. `Column`s can nest.\n\nExports: `SelectionViewer` (default), `useSelectionController`, `Row`, `Column`, plus every\nprop/type (`SelectionViewerProps`, `SelectionState`, `TitleProps`, `SearchProps`, `LoadingProps`,\n`NoResultProps`, `ErrorProps`, `CancelButtonProps`, `LayoutProps`, `Padding`, `SnapPoint`,\n`RowProps`, `ColumnProps`).\n\n## License\n\nMIT © Academix\n","readmeFilename":"README.md"}