{"_id":"@ananse/core","name":"@ananse/core","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@ananse/core","version":"0.1.0","description":"Framework-agnostic types, layout, schemas, data adapters, and edit mutations for Ananse org charts.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/pkdadson/ananse.git","directory":"packages/core"},"homepage":"https://github.com/pkdadson/ananse#readme","bugs":{"url":"https://github.com/pkdadson/ananse/issues"},"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":false,"keywords":["org-chart","hierarchy","dagre","hr","typescript","ananse"],"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"publishConfig":{"access":"public"},"dependencies":{"@dagrejs/dagre":"^1.1.4","zod":"^3.23.8"},"devDependencies":{"tsup":"^8.3.0","vitest":"^2.1.0","@types/node":"^22.7.0"},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest"},"_id":"@ananse/core@0.1.0","_integrity":"sha512-I5/M8bnnUTTTtS4+b28smlAq9TjaQrqxZc8kPqwM5JRvH8uiwrFw7t6fLRmikqyAmCgAXA3IWkFfhxRIo0xuuA==","_resolved":"/private/var/folders/_3/ykl5dwwd19s2y_f7f51j5tr80000gn/T/9ecf76ff2a7d63efc8c11e31b4a33689/ananse-core-0.1.0.tgz","_from":"file:ananse-core-0.1.0.tgz","_nodeVersion":"22.17.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-I5/M8bnnUTTTtS4+b28smlAq9TjaQrqxZc8kPqwM5JRvH8uiwrFw7t6fLRmikqyAmCgAXA3IWkFfhxRIo0xuuA==","shasum":"3617a241ff7246e4064c5109546f1b85a6d18a3b","tarball":"https://registry.npmjs.org/@ananse/core/-/core-0.1.0.tgz","fileCount":9,"unpackedSize":310101,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCZVq+FsWMX7537lerM1BaCPgIUY4+WtsHNuxeLI/KegwIgYYQ0+UNetm8lMyWnbeEsS9wZ+gKredmk9FLGakHwB+o="}]},"_npmUser":{"name":"pkdadson","email":"pddadson@gmail.com"},"directories":{},"maintainers":[{"name":"pkdadson","email":"pddadson@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.1.0_1785442001331_0.37946181258298806"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T20:06:40.689Z","0.1.0":"2026-07-30T20:06:41.487Z","modified":"2026-07-30T20:06:42.009Z"},"maintainers":[{"name":"pkdadson","email":"pddadson@gmail.com"}],"description":"Framework-agnostic types, layout, schemas, data adapters, and edit mutations for Ananse org charts.","homepage":"https://github.com/pkdadson/ananse#readme","keywords":["org-chart","hierarchy","dagre","hr","typescript","ananse"],"repository":{"type":"git","url":"git+https://github.com/pkdadson/ananse.git","directory":"packages/core"},"bugs":{"url":"https://github.com/pkdadson/ananse/issues"},"license":"MIT","readme":"# @ananse/core\n\n[![npm](https://img.shields.io/npm/v/@ananse/core.svg)](https://www.npmjs.com/package/@ananse/core)\n[![downloads](https://img.shields.io/npm/dm/@ananse/core.svg)](https://www.npmjs.com/package/@ananse/core)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@ananse/core)](https://bundlephobia.com/package/@ananse/core)\n[![license](https://img.shields.io/npm/l/@ananse/core.svg)](https://github.com/pkdadson/ananse/blob/main/LICENSE)\n\nFramework-agnostic types, layout, schemas, and tree utilities for Ananse.\n\n## Install\n\n```bash\npnpm add @ananse/core\n```\n\n## What you get\n\n### Types\n\n- `Employee`, `OrgChartData`\n- `EmploymentType` (`employee` | `contractor` | `intern`)\n- `WorkMode` (`onsite` | `hybrid` | `remote`)\n- Layout types: `PositionedNode`, `LayoutEdge`, `LayoutResult`, `OrgChartLayoutOptions`\n\n### Schemas (Zod)\n\n- `employeeSchema` / `orgChartSchema`\n- `employmentTypeSchema` / `workModeSchema`\n\nValidate inbound HR data before rendering:\n\n```ts\nimport { orgChartSchema } from \"@ananse/core\";\n\nconst parsed = orgChartSchema.safeParse(rawRows);\n```\n\n### Layout\n\n- `layoutOrgChart(employees, options?)` — hierarchical org layout (dagre)\n\n### Tree utils\n\n- `getDirectReports`, traversal helpers\n- `searchEmployees` — match name, title, department, email, location\n\n### Data adapters\n\n- `parseEmployeesCsv(csv)` — spreadsheet → `Employee[]` (+ warnings)\n- `fromHrisJson(records)` — flat HRIS JSON with field aliases\n- `fromNestedTree(roots)` — nested `children`/`reports` → flat `managerId` graph\n\n```ts\nimport { parseEmployeesCsv, fromHrisJson, fromNestedTree } from \"@ananse/core\";\n\nconst { employees } = parseEmployeesCsv(csvText);\n// or fromHrisJson(await res.json())\n// or fromNestedTree([rootNode])\n```\n\nSee the [CSV / HRIS recipe](https://github.com/pkdadson/ananse/blob/main/docs/recipes/04-import-csv-and-hris.md).\n\n### Edit mutations\n\n- `reparentEmployee(employees, id, newManagerId)` — cycle-safe\n- `addVacantRole(employees, { title, managerId, ... })`\n- `removeEmployee(employees, id)` — children reparent to grandparent\n\nEach returns `{ ok: true, employees }` or `{ ok: false, error }`.\n\n## Example\n\n```ts\nimport { layoutOrgChart, searchEmployees } from \"@ananse/core\";\n\nconst layout = layoutOrgChart(employees, { direction: \"TB\" });\nconst hits = searchEmployees(employees, \"grace@\");\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-694163ddd7b4bbd5121aef9d2533b797"}