@ananse/core
v0.1.0
Published
Framework-agnostic types, layout, schemas, data adapters, and edit mutations for Ananse org charts.
Maintainers
Readme
@ananse/core
Framework-agnostic types, layout, schemas, and tree utilities for Ananse.
Install
pnpm add @ananse/coreWhat you get
Types
Employee,OrgChartDataEmploymentType(employee|contractor|intern)WorkMode(onsite|hybrid|remote)- Layout types:
PositionedNode,LayoutEdge,LayoutResult,OrgChartLayoutOptions
Schemas (Zod)
employeeSchema/orgChartSchemaemploymentTypeSchema/workModeSchema
Validate inbound HR data before rendering:
import { orgChartSchema } from "@ananse/core";
const parsed = orgChartSchema.safeParse(rawRows);Layout
layoutOrgChart(employees, options?)— hierarchical org layout (dagre)
Tree utils
getDirectReports, traversal helperssearchEmployees— match name, title, department, email, location
Data adapters
parseEmployeesCsv(csv)— spreadsheet →Employee[](+ warnings)fromHrisJson(records)— flat HRIS JSON with field aliasesfromNestedTree(roots)— nestedchildren/reports→ flatmanagerIdgraph
import { parseEmployeesCsv, fromHrisJson, fromNestedTree } from "@ananse/core";
const { employees } = parseEmployeesCsv(csvText);
// or fromHrisJson(await res.json())
// or fromNestedTree([rootNode])See the CSV / HRIS recipe.
Edit mutations
reparentEmployee(employees, id, newManagerId)— cycle-safeaddVacantRole(employees, { title, managerId, ... })removeEmployee(employees, id)— children reparent to grandparent
Each returns { ok: true, employees } or { ok: false, error }.
Example
import { layoutOrgChart, searchEmployees } from "@ananse/core";
const layout = layoutOrgChart(employees, { direction: "TB" });
const hits = searchEmployees(employees, "grace@");License
MIT
