{"_id":"@carefully-built/resource-kit","_rev":"2-b1f4a945b38974a6d45638bba5ffe140","name":"@carefully-built/resource-kit","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.2":{"name":"@carefully-built/resource-kit","version":"0.1.2","author":{"name":"Alessandro Dodi"},"license":"MIT","_id":"@carefully-built/resource-kit@0.1.2","maintainers":[{"name":"alledodi","email":"dodialessandro3@gmail.com"}],"dist":{"shasum":"d4531a56f97642b683398032edcda62d59c01868","tarball":"https://registry.npmjs.org/@carefully-built/resource-kit/-/resource-kit-0.1.2.tgz","fileCount":6,"integrity":"sha512-n2leEX/U6fOSoEQXk1X80TQJVr/It0ISAKgPolbgsc1nvtx5oc73wdaWLSAa227YpSgoF+lzM1ubpKpdl4L3BA==","signatures":[{"sig":"MEYCIQD0f8NoeCuhUbykni1CE2MUjmiMP+P4DT6+jQmLvZfdNAIhAOLQ8MjA2GWLtBjmD5jLg68XciqmtNP64Esb26loUzwc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80527},"main":"./dist/index.mjs","type":"module","types":"./dist/index.d.mts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"gitHead":"b84d3f58858fed9a9e06a291cd33ea8b6f1ff157","scripts":{"build":"tsdown src/index.ts --format esm --dts","typecheck":"tsc --noEmit","prepublishOnly":"bun run typecheck && bun run build"},"_npmUser":{"name":"alledodi","email":"dodialessandro3@gmail.com"},"_npmVersion":"11.9.0","description":"Reusable resource-page state helpers for CRUD SaaS surfaces.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"next":"16.1.6","react":"^19.2.3","convex":"^1.35.1","sonner":"^2.0.7","lucide-react":"^1.8.0","@carefully-built/ui":"workspace:*","@carefully-built/widgets":"workspace:*","@carefully-built/app-shell":"workspace:*","@carefully-built/association-picker":"workspace:*"},"peerDependencies":{"next":">=15.0.0 || >=16.0.0","react":">=18.2.0 || >=19.0.0","convex":">=1.0.0","sonner":">=1.0.0 || >=2.0.0","lucide-react":">=0.400.0 || >=1.0.0","@carefully-built/ui":">=0.1.0","@carefully-built/widgets":">=0.1.0","@carefully-built/app-shell":">=0.1.0","@carefully-built/association-picker":">=0.1.0"},"peerDependenciesMeta":{"@carefully-built/ui":{"optional":true},"@carefully-built/widgets":{"optional":true},"@carefully-built/app-shell":{"optional":true},"@carefully-built/association-picker":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/resource-kit_0.1.2_1782064441632_0.18398429078704037","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@carefully-built/resource-kit","version":"0.1.3","description":"Reusable resource-page state helpers for CRUD SaaS surfaces.","type":"module","license":"MIT","author":{"name":"Alessandro Dodi"},"sideEffects":false,"main":"./dist/index.mjs","module":"./dist/index.mjs","types":"./dist/index.d.mts","exports":{".":{"types":"./dist/index.d.mts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./package.json":"./package.json"},"scripts":{"build":"tsdown src/index.ts --format esm --dts","prepublishOnly":"bun run typecheck && bun run build","typecheck":"tsc --noEmit"},"publishConfig":{"access":"public"},"peerDependencies":{"@carefully-built/app-shell":">=0.1.0","@carefully-built/association-picker":">=0.1.2","@carefully-built/ui":">=0.1.15","@carefully-built/widgets":">=0.1.0","convex":">=1.0.0","lucide-react":">=0.400.0 || >=1.0.0","next":">=15.0.0 || >=16.0.0","react":">=18.2.0 || >=19.0.0","sonner":">=1.0.0 || >=2.0.0"},"peerDependenciesMeta":{"@carefully-built/app-shell":{"optional":true},"@carefully-built/association-picker":{"optional":true},"@carefully-built/ui":{"optional":true},"@carefully-built/widgets":{"optional":true}},"devDependencies":{"@carefully-built/app-shell":"workspace:*","@carefully-built/association-picker":"workspace:*","@carefully-built/ui":"workspace:*","@carefully-built/widgets":"workspace:*","convex":"^1.35.1","lucide-react":"^1.8.0","next":"16.1.6","react":"^19.2.3","sonner":"^2.0.7"},"gitHead":"ec3e035989147c8024a4dd433a404ece7a211530","_id":"@carefully-built/resource-kit@0.1.3","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-oW/vFjuhO+8N2aCK3fiyIlJ6cyZOp+8b+FSGBB0cW2jzdXd9smBNQBgt0A7770xBBDAYr4K+NA2sDS4RD7rLBw==","shasum":"2b810481436863690ed673a56de26aa2debc55b2","tarball":"https://registry.npmjs.org/@carefully-built/resource-kit/-/resource-kit-0.1.3.tgz","fileCount":6,"unpackedSize":80526,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICpr/b4yeDsVOy5TypMaL1PxKjzCDo3UStBykz5dKs9YAiAOeKrFyED/klyXcY5XrMFc9FESdWQSNGWw0C+SV4Xmfw=="}]},"_npmUser":{"name":"alledodi","email":"dodialessandro3@gmail.com"},"directories":{},"maintainers":[{"name":"alledodi","email":"dodialessandro3@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/resource-kit_0.1.3_1782243099321_0.17709596660148863"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-21T17:54:01.507Z","modified":"2026-06-23T19:31:39.598Z","0.1.2":"2026-06-21T17:54:01.771Z","0.1.3":"2026-06-23T19:31:39.471Z"},"author":{"name":"Alessandro Dodi"},"license":"MIT","description":"Reusable resource-page state helpers for CRUD SaaS surfaces.","maintainers":[{"name":"alledodi","email":"dodialessandro3@gmail.com"}],"readme":"# @carefully-built/resource-kit\n\nShared resource-page helpers for SaaS CRUD screens. Use this package for state and adapters that repeat across contacts, requests, documents, activities, notes, and other org-scoped resources.\n\n## What It Provides\n\n- `useResourceSheetState`: create/edit sheet state for a resource list.\n- Keeps the selected resource derived from the current list, so refreshes and mutations do not leave stale objects in app state.\n- Adapter-friendly: the app owns data loading, mutations, copy, routing, and domain logic.\n\n## Usage\n\n```tsx\nimport { useResourceSheetState } from '@carefully-built/resource-kit';\n\nconst sheet = useResourceSheetState({\n  items: contacts,\n  getItemId: (contact) => contact._id,\n});\n\nreturn (\n  <ContactSheet\n    contact={sheet.editingItem}\n    open={sheet.isOpen}\n    onOpenChange={sheet.syncOpen}\n  />\n);\n```\n\n## Adapter Pattern\n\nPackages should own generic state and UI contracts. Product apps should pass:\n\n- resource items\n- id extractors\n- mutation callbacks\n- labels/copy\n- app-specific form schemas\n","readmeFilename":"README.md"}