{"_id":"@arungovil/flatgrid","name":"@arungovil/flatgrid","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@arungovil/flatgrid","version":"0.1.0","description":"Nested relational data as a flat 2D grid","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"tsc","dev":"tsc --watch"},"devDependencies":{"typescript":"^5.0.0"},"_id":"@arungovil/flatgrid@0.1.0","gitHead":"b03693fb8d07a494c6043d2e18e6ec5222db4b93","_nodeVersion":"20.11.0","_npmVersion":"10.2.4","dist":{"integrity":"sha512-r4pq5frWAF7xh+kK1XB+DPyqMqs0lWm4TYuvLv6jkIjO+N/aZAeAJRckyzuPwXbPADX/0L1YqjpM1S70qSmUzA==","shasum":"68719f5aabf01a4093cfb75c06fd9e2d6404582c","tarball":"https://registry.npmjs.org/@arungovil/flatgrid/-/flatgrid-0.1.0.tgz","fileCount":14,"unpackedSize":8269,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGJzKNzr94XWBeOlz02TQXptwJ2dcx7bweCCGLxGeTS/AiEArhkspwGj9j1qp7JfcMn3a+ups8922OPfmDb/YbiHDc8="}]},"_npmUser":{"name":"arungovil","email":"a.arungovil@gmail.com"},"directories":{},"maintainers":[{"name":"arungovil","email":"a.arungovil@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flatgrid_0.1.0_1775065687183_0.4625717084312686"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-01T17:48:07.066Z","0.1.0":"2026-04-01T17:48:07.310Z","modified":"2026-04-01T17:48:07.541Z"},"maintainers":[{"name":"arungovil","email":"a.arungovil@gmail.com"}],"description":"Nested relational data as a flat 2D grid","readme":"<p align=\"center\">\n<h2 align=\"center\"><a href=\"https://www.npmjs.com/package/@arungovil/flatgrid\">flatgrid</a></h2>\n</p>\n<p align=\"center\">\nNested relational data as a flat 2D grid.\n</p>\n\n---\n\n## Installation\n\nUsing npm\n\n```sh\nnpm i @arungovil/flatgrid\n```\n\nUsing Yarn\n\n```sh\nyarn add @arungovil/flatgrid\n```\n\n## Usage\n\n```ts\nimport { render } from \"@arungovil/flatgrid\";\n\nconst levels = [\n  {\n    columns: [\n      { key: \"project\", header: \"Project\" },\n      { key: \"status\", header: \"Status\" },\n    ],\n    childrenKey: \"tasks\",\n  },\n  {\n    columns: [\n      { key: \"task\", header: \"Task\" },\n      { key: \"done\", header: \"Done\" },\n    ],\n  },\n];\n\nconst data = [\n  {\n    project: \"Project A\",\n    status: \"Active\",\n    tasks: [\n      { task: \"Task 1\", done: \"Yes\" },\n      { task: \"Task 2\", done: \"No\" },\n    ],\n  },\n];\n\nconst { headers, rows } = render(levels, data);\n```\n\n#### Result\n\n```ts\n// headers\n[\n  { key: \"project\", label: \"Project\" },\n  { key: \"status\",  label: \"Status\"  },\n  { key: \"task\",    label: \"Task\"    },\n  { key: \"done\",    label: \"Done\"    },\n]\n\n// rows — only cells that need a <td> are emitted per row\n[\n  [\n    { columnKey: \"project\", value: \"Project A\", rowspan: 2 },\n    { columnKey: \"status\",  value: \"Active\",    rowspan: 2 },\n    { columnKey: \"task\",    value: \"Task 1\",    rowspan: 1 },\n    { columnKey: \"done\",    value: \"Yes\",       rowspan: 1 },\n  ],\n  [\n    { columnKey: \"task\",    value: \"Task 2\",    rowspan: 1 },\n    { columnKey: \"done\",    value: \"No\",        rowspan: 1 },\n  ],\n]\n```\n\n## API\n\n### `render(levels, data)`\n\n<table>\n  <tr>\n    <th>Name</th>\n    <th>Type</th>\n    <th>Description</th>\n  </tr>\n  <tr>\n    <td>levels</td>\n    <td>Level[]</td>\n    <td>Schema defining the hierarchy and column order</td>\n  </tr>\n  <tr>\n    <td>data</td>\n    <td>object[]</td>\n    <td>Array of root-level data nodes</td>\n  </tr>\n</table>\n\n### `Level`\n\n<table>\n  <tr>\n    <th>Name</th>\n    <th>Type</th>\n    <th>Required</th>\n    <th>Description</th>\n  </tr>\n  <tr>\n    <td>columns</td>\n    <td>Column[]</td>\n    <td>true</td>\n    <td>Columns belonging to this level</td>\n  </tr>\n  <tr>\n    <td>childrenKey</td>\n    <td>string</td>\n    <td>false</td>\n    <td>Key on the data node that holds the next level's array. Omit on the last level.</td>\n  </tr>\n</table>\n\n### `Column`\n\n<table>\n  <tr>\n    <th>Name</th>\n    <th>Type</th>\n    <th>Description</th>\n  </tr>\n  <tr>\n    <td>key</td>\n    <td>string</td>\n    <td>Key to read the value from the data node</td>\n  </tr>\n  <tr>\n    <td>header</td>\n    <td>string</td>\n    <td>Column header label</td>\n  </tr>\n</table>\n","readmeFilename":"README.md","_rev":"1-03c86b290b64c1c59b490fa7421b98f4"}