{"_id":"@cajuncodemonkey/naics-search-react","name":"@cajuncodemonkey/naics-search-react","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@cajuncodemonkey/naics-search-react","version":"1.0.0","description":"React hook wrapping @cajuncodemonkey/naics-search's async load-state.","homepage":"https://github.com/krcourville/naics-code-resolver#readme","license":"MIT","repository":{"type":"git","url":"git+https://github.com/krcourville/naics-code-resolver.git","directory":"packages/naics-search-react"},"type":"module","main":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs"}},"dependencies":{"@cajuncodemonkey/naics-search":"2.0.0"},"devDependencies":{"@arethetypeswrong/core":"^0.18.5","@testing-library/react":"^16.3.0","@types/react":"^19.2.7","jsdom":"^27.0.0","publint":"^0.3.24","react":"^19.2.0"},"peerDependencies":{"react":"^19.0.0"},"scripts":{"build":"vp pack"},"_nodeVersion":"24.14.1","_id":"@cajuncodemonkey/naics-search-react@1.0.0","dist":{"integrity":"sha512-/t4SJBW24WrJ36z5iOxhw2VXRXXaPwNgLa54dDXP6cHW+dwO7kmo+i0OMkFLzm1wbgQhP8qcSiNweaSb/vHefw==","shasum":"670fddc93714614bfd1a830596930707516f0d60","tarball":"https://registry.npmjs.org/@cajuncodemonkey/naics-search-react/-/naics-search-react-1.0.0.tgz","fileCount":5,"unpackedSize":7028,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB/vXAisCd6cfknQDVzYbE15ZCvteWI6c3BitbixcNSQAiEA4YyXUMKVUgjhP1pws0YC9qiQxhRwcVnG5/JTghOXx/I="}]},"_npmUser":{"name":"krcourville","email":"krcourville@gmail.com"},"directories":{},"maintainers":[{"name":"krcourville","email":"krcourville@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/naics-search-react_1.0.0_1787328700955_0.08099870598780123"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-21T16:11:40.647Z","1.0.0":"2026-08-21T16:11:41.114Z","modified":"2026-08-21T16:11:41.476Z"},"maintainers":[{"name":"krcourville","email":"krcourville@gmail.com"}],"description":"React hook wrapping @cajuncodemonkey/naics-search's async load-state.","homepage":"https://github.com/krcourville/naics-code-resolver#readme","repository":{"type":"git","url":"git+https://github.com/krcourville/naics-code-resolver.git","directory":"packages/naics-search-react"},"license":"MIT","readme":"# @cajuncodemonkey/naics-search-react\n\nA thin React hook wrapping [`@cajuncodemonkey/naics-search`](https://www.npmjs.com/package/@cajuncodemonkey/naics-search)'s\nasync load-state, so a React app doesn't have to hand-roll \"is the model loaded yet,\ndid it error\" boilerplate around `loadNaics()`.\n\nBuilt for [naics-code-resolver](https://github.com/krcourville/naics-code-resolver) —\nsee that repo for the full resolver UI this package's sibling `naics-search` powers.\n\n## Install\n\n```sh\nnpm install @cajuncodemonkey/naics-search-react @cajuncodemonkey/naics-search\n```\n\n`react` (^19) is a peer dependency — bring your own, this package doesn't bundle it.\n\n## Usage\n\n```tsx\nimport { useNaicsSearch } from \"@cajuncodemonkey/naics-search-react\";\n\nfunction Resolver() {\n  const naics = useNaicsSearch();\n\n  if (naics.status === \"loading\") return <p>Loading…</p>;\n  if (naics.status === \"error\") return <p>Couldn't load NAICS data: {String(naics.error)}</p>;\n\n  // naics.status === \"ready\" — search()/drilldown fns are available\n  return <SearchForm onSubmit={(text) => naics.search(text)} />;\n}\n```\n\n## API\n\n### `useNaicsSearch(): Status`\n\nNo arguments — data-source configuration (if you need it) is set globally via\n`naics-search`'s `configureDataProvider()` before your app mounts, not through this\nhook. `Status` is a discriminated union on `status`:\n\n```ts\ntype Status =\n  | { status: \"loading\" }\n  | { status: \"error\"; error: unknown }\n  | {\n      status: \"ready\";\n      search: typeof search;\n      drilldownOptions: typeof drilldownOptions;\n      getNode: typeof getNode;\n      isResolved: typeof isResolved;\n      getAncestorPath: typeof getAncestorPath;\n      censusUrl: typeof censusUrl;\n    };\n```\n\nTypeScript narrows `naics.search`/the drilldown fns into scope only once\n`naics.status === \"ready\"` — there's no runtime guard to remember, the type system\nenforces it.\n\nThe hook owns no app policy — confidence bands, settings, Q&A UI flow all stay in your\napp, same as they do in [naics-code-resolver's own app](https://github.com/krcourville/naics-code-resolver/tree/main/apps/naics-resolver).\n\n## Caveats\n\n- Unmounting mid-load is safe — the hook guards against `setState` on an unmounted\n  component. It does not cancel the underlying `loadNaics()` fetch (that's a shared,\n  cached load across the whole app, not owned by any one hook instance).\n- No built-in retry UI. `naics-search`'s cache only holds onto a _successful_ load, not\n  a failed one, so remounting the component that calls `useNaicsSearch()` (e.g. a\n  React `key` change) after an error retries fresh. The hook itself has no manual\n  `retry()` — it's a one-shot-per-mount wrapper by design.\n\n## License\n\nMIT.\n","readmeFilename":"","_rev":"1-c3971e7a8d6c799b3095200236016b51"}