{"_id":"@aquera/nile-flow","_rev":"5-3f17297ee908582f63caef5c177dcca8","name":"@aquera/nile-flow","dist-tags":{"latest":"0.0.5"},"versions":{"0.0.1":{"name":"@aquera/nile-flow","version":"0.0.1","author":{"name":"Aquera Inc"},"license":"MIT","_id":"@aquera/nile-flow@0.0.1","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"0e254be571e97ff2caee130b39f64e74f2a9343e","tarball":"https://registry.npmjs.org/@aquera/nile-flow/-/nile-flow-0.0.1.tgz","fileCount":164,"integrity":"sha512-RFdjC2Dya8xNCtmZejJHt5ozVw0VuvYrkJNpwykmcTI6gJm8a/uJRvV7IcwC37+Qyc7QkEtud2BtQVUlj+Hl1w==","signatures":[{"sig":"MEUCIC38GJvpPa0PDGvqu1N7rM70lNA7UNgLpE0tlnNp974CAiEA5SSEo7CE5ZReDrhFYDwxJXT7hVE65W2uGymWRojHmSw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":597287},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-flow":"./dist/src/nile-flow/index.js","./layout-elk":"./dist/src/layout/elk-adapter.js","./layout-dagre":"./dist/src/layout/dagre-adapter.js","./nile-flow-node":"./dist/src/nile-flow-node/index.js","./nile-org-chart":"./dist/src/nile-org-chart/index.js","./nile-flow-minimap":"./dist/src/nile-flow-minimap/index.js","./nile-flow-connector":"./dist/src/nile-flow-connector/index.js","./nile-flow-background":"./dist/src/nile-flow-background/index.js","./nile-flow-connection":"./dist/src/nile-flow-connection/index.js","./nile-flow-external-item":"./dist/src/nile-flow-external-item/index.js","./nile-flow-connection-preview":"./dist/src/nile-flow-connection-preview/index.js"},"gitHead":"74db50233021a92c1d2250881757d06e6afbc1fb","scripts":{"test":"tsc && wtr","build":"tsc","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","package":"rollup -c"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"_npmVersion":"10.8.2","description":"A node-based flow / graph editor for the Nile Design System","directories":{},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^8.0.3","tslib":"^2.3.1","rimraf":"^3.0.2","rollup":"^3.8.1","typescript":"^5.6.2","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.2.0","@web/test-runner":"^0.15.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@rollup/plugin-replace":"^5.0.2","@web/dev-server-rollup":"^0.5.0","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-typescript":"^10.0.1","@aquera/nile-visualization":"^2.9.0","@web/test-runner-puppeteer":"^0.11.0","@rollup/plugin-node-resolve":"^15.0.1"},"peerDependencies":{"dagre":"^0.8.5","elkjs":"^0.9.0","@aquera/nile-elements":">=0.1.0","@aquera/nile-visualization":">=2.9.0"},"peerDependenciesMeta":{"dagre":{"optional":true},"elkjs":{"optional":true},"@aquera/nile-elements":{"optional":true},"@aquera/nile-visualization":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nile-flow_0.0.1_1788873104548_0.1402198635592382","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@aquera/nile-flow","version":"0.0.2","author":{"name":"Aquera Inc"},"license":"MIT","_id":"@aquera/nile-flow@0.0.2","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"fdba8574e13085e7db33c411190a9738a19864b5","tarball":"https://registry.npmjs.org/@aquera/nile-flow/-/nile-flow-0.0.2.tgz","fileCount":166,"integrity":"sha512-Z8KzQLRN/ehAxKdCRgHhyiNvIutylq0SuMLqiQANk2EH5rnI/gTbbLom6vR5dOfztgkrgB29q70XedxKeTo48A==","signatures":[{"sig":"MEUCIQC60sVIZpRh2PQNaPXU4cUIgasZ8Stsm3hfn/5XQ+VZ6AIgDazOa8vUM4wSnukeNhD2qlLeUMaQkrwVU9veZevRwhA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":746610},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-flow":"./dist/src/nile-flow/index.js","./layout-elk":"./dist/src/layout/elk-adapter.js","./layout-dagre":"./dist/src/layout/dagre-adapter.js","./nile-flow-node":"./dist/src/nile-flow-node/index.js","./nile-org-chart":"./dist/src/nile-org-chart/index.js","./nile-flow-minimap":"./dist/src/nile-flow-minimap/index.js","./nile-flow-connector":"./dist/src/nile-flow-connector/index.js","./nile-flow-background":"./dist/src/nile-flow-background/index.js","./nile-flow-connection":"./dist/src/nile-flow-connection/index.js","./nile-flow-external-item":"./dist/src/nile-flow-external-item/index.js","./nile-flow-connection-preview":"./dist/src/nile-flow-connection-preview/index.js"},"gitHead":"7b533b3f2cff5dc71ae44d64c3b929503d4cdfdb","scripts":{"test":"tsc && wtr","build":"tsc","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","package":"rollup -c"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"_npmVersion":"10.8.2","description":"A node-based flow / graph editor for the Nile Design System","directories":{},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^8.0.3","tslib":"^2.3.1","rimraf":"^3.0.2","rollup":"^3.8.1","typescript":"^5.6.2","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.2.0","@web/test-runner":"^0.15.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@rollup/plugin-replace":"^5.0.2","@web/dev-server-rollup":"^0.5.0","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-typescript":"^10.0.1","@aquera/nile-visualization":"^2.9.0","@web/test-runner-puppeteer":"^0.11.0","@rollup/plugin-node-resolve":"^15.0.1"},"peerDependencies":{"dagre":"^0.8.5","elkjs":"^0.9.0","@aquera/nile-elements":">=0.1.0","@aquera/nile-visualization":">=2.9.0"},"peerDependenciesMeta":{"dagre":{"optional":true},"elkjs":{"optional":true},"@aquera/nile-elements":{"optional":true},"@aquera/nile-visualization":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nile-flow_0.0.2_1789022568093_0.6184216504360842","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@aquera/nile-flow","version":"0.0.3","author":{"name":"Aquera Inc"},"license":"MIT","_id":"@aquera/nile-flow@0.0.3","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"a3740ec64247956aa8cdf4ec16a9a8669dc1b63c","tarball":"https://registry.npmjs.org/@aquera/nile-flow/-/nile-flow-0.0.3.tgz","fileCount":176,"integrity":"sha512-IxYqYsdeJxgcHV2zyQL8Dd0Lu/06BbgLAtu7Smb0aQvBMntTBsHp9KuIJKP1WQobIXrrRuj0fk30qSWlsUDC7A==","signatures":[{"sig":"MEUCIQDFwhrrnuFfO5DA85eCHG2uIsdTljR+J5tzlzKxH55OhgIgXWVi4v9SJq+5oCzxdxDwoc8DBaRBIL0J8jnu/BQplVQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":826186},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-flow":"./dist/src/nile-flow/index.js","./layout-elk":"./dist/src/layout/elk-adapter.js","./layout-dagre":"./dist/src/layout/dagre-adapter.js","./nile-flow-node":"./dist/src/nile-flow-node/index.js","./nile-org-chart":"./dist/src/nile-org-chart/index.js","./nile-flow-minimap":"./dist/src/nile-flow-minimap/index.js","./nile-flow-connector":"./dist/src/nile-flow-connector/index.js","./nile-flow-background":"./dist/src/nile-flow-background/index.js","./nile-flow-connection":"./dist/src/nile-flow-connection/index.js","./nile-flow-external-item":"./dist/src/nile-flow-external-item/index.js","./nile-flow-connection-preview":"./dist/src/nile-flow-connection-preview/index.js"},"gitHead":"490d17b4e2a7c94445afe8566f51a22dc1a23634","scripts":{"test":"tsc && wtr","build":"tsc","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","package":"rollup -c"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"_npmVersion":"10.8.2","description":"A node-based flow / graph editor for the Nile Design System","directories":{},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^8.0.3","tslib":"^2.3.1","rimraf":"^3.0.2","rollup":"^3.8.1","typescript":"^5.6.2","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.2.0","@web/test-runner":"^0.15.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@rollup/plugin-replace":"^5.0.2","@web/dev-server-rollup":"^0.5.0","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-typescript":"^10.0.1","@aquera/nile-visualization":"^2.9.0","@web/test-runner-puppeteer":"^0.11.0","@rollup/plugin-node-resolve":"^15.0.1"},"peerDependencies":{"dagre":"^0.8.5","elkjs":"^0.9.0","@aquera/nile-elements":">=0.1.0","@aquera/nile-visualization":">=2.9.0"},"peerDependenciesMeta":{"dagre":{"optional":true},"elkjs":{"optional":true},"@aquera/nile-elements":{"optional":true},"@aquera/nile-visualization":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nile-flow_0.0.3_1789542115620_0.9696208175740917","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@aquera/nile-flow","version":"0.0.4","author":{"name":"Aquera Inc"},"license":"MIT","_id":"@aquera/nile-flow@0.0.4","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"dist":{"shasum":"656c39286b5922a7f8a74229090d4248bf03d768","tarball":"https://registry.npmjs.org/@aquera/nile-flow/-/nile-flow-0.0.4.tgz","fileCount":176,"integrity":"sha512-lXpkXrzkmqwbvSSYaKec6zWOEJ6SJCJ96VGk6MAKxUWW/Ut6ZWl5g3wS9BC15PVN5flp2Gw/yFABsBpSTqpqNQ==","signatures":[{"sig":"MEQCIEzn9vW3br3jaNIY/kQTkaUCvcNOnKRMMVTqzs47GfYRAiAsmONZmjQyLit38flo4pUPio9R8gBZoT/KDTGZgH54sQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCUriuR8AIOgyiixcgMOk0ApUT3mqf4yF1YdYmxbYvn/QIhAJ0vVnCPhiXY0T1j/CaRTfvhgONW+LK3r7K4hie/T3EG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":827978},"main":"dist/src/index.js","type":"module","types":"./dist/src/index.d.ts","module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-flow":"./dist/src/nile-flow/index.js","./layout-elk":"./dist/src/layout/elk-adapter.js","./layout-dagre":"./dist/src/layout/dagre-adapter.js","./nile-flow-node":"./dist/src/nile-flow-node/index.js","./nile-org-chart":"./dist/src/nile-org-chart/index.js","./nile-flow-minimap":"./dist/src/nile-flow-minimap/index.js","./nile-flow-connector":"./dist/src/nile-flow-connector/index.js","./nile-flow-background":"./dist/src/nile-flow-background/index.js","./nile-flow-connection":"./dist/src/nile-flow-connection/index.js","./nile-flow-external-item":"./dist/src/nile-flow-external-item/index.js","./nile-flow-connection-preview":"./dist/src/nile-flow-connection-preview/index.js"},"gitHead":"467b376dd34b8ef27d8f2a35f17ed919dfdc321f","scripts":{"test":"tsc && wtr","build":"tsc","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","package":"rollup -c"},"_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"_npmVersion":"10.8.2","description":"A node-based flow / graph editor for the Nile Design System","directories":{},"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^8.0.3","tslib":"^2.3.1","rimraf":"^3.0.2","rollup":"^3.8.1","typescript":"^5.6.2","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.2.0","@web/test-runner":"^0.15.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@rollup/plugin-replace":"^5.0.2","@web/dev-server-rollup":"^0.5.0","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-typescript":"^10.0.1","@aquera/nile-visualization":"^2.9.0","@web/test-runner-puppeteer":"^0.11.0","@rollup/plugin-node-resolve":"^15.0.1"},"peerDependencies":{"dagre":"^0.8.5","elkjs":"^0.9.0","@aquera/nile-elements":">=0.1.0","@aquera/nile-visualization":">=2.9.0"},"peerDependenciesMeta":{"dagre":{"optional":true},"elkjs":{"optional":true},"@aquera/nile-elements":{"optional":true},"@aquera/nile-visualization":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/nile-flow_0.0.4_1790590561098_0.47987714077871746","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"_id":"@aquera/nile-flow@0.0.5","dist":{"shasum":"c2363af0dacaa00bfde7058079583eee9afa86cd","tarball":"https://registry.npmjs.org/@aquera/nile-flow/-/nile-flow-0.0.5.tgz","fileCount":190,"integrity":"sha512-bPkLJL/Sbd1kSDdGDp5efyhtAjJ8CJ7MGDCbS02blaKVjHSSRFa8vRY64hmg8JsO7uVtsiEcCLf2+ybPJE7LWA==","signatures":[{"sig":"MEYCIQDe3UbuNBFbxinPBzANTS9qSELQKDBnVLAZsTbD4CtnJwIhAMpuZ/YN3KWhD6yFXWWiaBUxaJ1BbWMU0KIOVHvDXmMo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDj6XQMU+5s0uP7K54RcZv7ggcFFOhvx9WBZmT8ts8sjQIgYAT9kHji84+RqFppOofDB9hLU0jxy5jirvQF3hS6ghE="}],"unpackedSize":1114662},"main":"dist/src/index.js","name":"@aquera/nile-flow","type":"module","types":"./dist/src/index.d.ts","author":{"name":"Aquera Inc"},"module":"dist/src/index.js","exports":{".":"./dist/src/index.js","./nile-flow":"./dist/src/nile-flow/index.js","./layout-elk":"./dist/src/layout/elk-adapter.js","./layout-dagre":"./dist/src/layout/dagre-adapter.js","./nile-flow-node":"./dist/src/nile-flow-node/index.js","./nile-org-chart":"./dist/src/nile-org-chart/index.js","./nile-flow-minimap":"./dist/src/nile-flow-minimap/index.js","./nile-flow-connector":"./dist/src/nile-flow-connector/index.js","./nile-flow-background":"./dist/src/nile-flow-background/index.js","./nile-flow-connection":"./dist/src/nile-flow-connection/index.js","./nile-flow-external-item":"./dist/src/nile-flow-external-item/index.js","./nile-flow-connection-preview":"./dist/src/nile-flow-connection-preview/index.js"},"gitHead":"29586cbdaf3e33c8e45e0bfc6e0aca2dff270eca","license":"MIT","scripts":{"test":"tsc && wtr","build":"tsc","clean":"rimraf dist/*","start":"tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"","package":"rollup -c"},"version":"0.0.5","_npmUser":{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"},"_npmVersion":"10.8.2","description":"A node-based flow / graph editor for the Nile Design System","directories":{},"maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"_nodeVersion":"20.17.0","dependencies":{"lit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"glob":"^8.0.3","tslib":"^2.3.1","rimraf":"^3.0.2","rollup":"^3.8.1","typescript":"^5.6.2","concurrently":"^5.3.0","@web/dev-server":"^0.1.34","@open-wc/testing":"^3.2.0","@web/test-runner":"^0.15.0","@rollup/plugin-babel":"^6.0.3","rollup-plugin-terser":"^7.0.2","rollup-plugin-summary":"^2.0.0","@rollup/plugin-replace":"^5.0.2","@web/dev-server-rollup":"^0.5.0","@rollup/plugin-commonjs":"^25.0.3","@rollup/plugin-typescript":"^10.0.1","@aquera/nile-visualization":"^2.9.0","@web/test-runner-puppeteer":"^0.11.0","@rollup/plugin-node-resolve":"^15.0.1"},"peerDependencies":{"dagre":"^0.8.5","elkjs":"^0.9.0","@aquera/nile-elements":">=0.1.0","@aquera/nile-visualization":">=2.9.0"},"peerDependenciesMeta":{"dagre":{"optional":true},"elkjs":{"optional":true},"@aquera/nile-elements":{"optional":true},"@aquera/nile-visualization":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nile-flow_0.0.5_1790861264794_0.9184205892374382"}}},"time":{"created":"2026-09-08T13:11:44.371Z","modified":"2026-10-01T13:27:45.112Z","0.0.1":"2026-09-08T13:11:44.677Z","0.0.2":"2026-09-10T06:42:48.231Z","0.0.3":"2026-09-16T07:01:55.782Z","0.0.4":"2026-09-28T10:16:01.176Z","0.0.5":"2026-10-01T13:27:44.884Z"},"author":{"name":"Aquera Inc"},"license":"MIT","description":"A node-based flow / graph editor for the Nile Design System","maintainers":[{"name":"ashok.kumar.aquera","email":"ashok.kumar@aquera.com"},{"name":"raviqauera","email":"ravi.sankar@aquera.com"},{"name":"sandeep-aquera","email":"sandeep.kumar@aquera.com"}],"readme":"# @aquera/nile-flow\n\nA node-based flow / graph editor for the Nile Design System — framework-agnostic\nLit web components with feature parity to [Foblex Flow](https://flow.foblex.com/),\nable to embed live Nile charts (`@aquera/nile-visualization`) inside node bodies.\n\n## Installation\n\n```bash\nnpm i @aquera/nile-flow\n```\n\n`lit` is the only hard dependency. Everything else is an optional peer, pulled in\nonly by the feature that needs it:\n\n| Peer | Needed for |\n| --- | --- |\n| `dagre` | `@aquera/nile-flow/layout-dagre` |\n| `elkjs` | `@aquera/nile-flow/layout-elk` |\n| `@aquera/nile-elements` | Nile components slotted inside node bodies |\n| `@aquera/nile-visualization` | live charts slotted inside node bodies |\n\nCharts additionally need `highcharts`, which is `@aquera/nile-visualization`'s\nown peer — nile-flow neither declares nor installs it. Its provider resolves a\nbundled `highcharts` or falls back to a `window.Highcharts` loaded by script tag,\nwhich is how `demo/charts.html` does it.\n\nThe layout adapters `import()` their engine lazily, so a bundle that never calls\n`layoutDagre` / `layoutElk` never pulls dagre or elkjs in.\n\n## Quick start\n\n```html\n<nile-flow snap-radius=\"28\" style=\"height: 600px\">\n  <nile-flow-background slot=\"background\" pattern=\"dots\"></nile-flow-background>\n  <nile-flow-minimap slot=\"minimap\"></nile-flow-minimap>\n\n  <nile-flow-node node-id=\"a\" .position=${{ x: 60, y: 80 }}>\n    Any content — including <nile-chart fit .config=${cfg}>\n    <nile-flow-connector connector-id=\"a-out\" type=\"source\"\n      connectable-side=\"right\" style=\"position:absolute; right:-6px; top:20px\">\n    </nile-flow-connector>\n  </nile-flow-node>\n\n  <nile-flow-connection source=\"a-out\" target=\"b-in\" type=\"bezier\" marker-end=\"arrow\">\n    <span>optional label</span>\n  </nile-flow-connection>\n</nile-flow>\n```\n\n**The app owns the graph model.** The flow renders your `nile-flow-node` /\n`nile-flow-connection` children and emits granular events; it never\nadds/removes your data. Listen and update your model:\n\n| Event | When |\n| --- | --- |\n| `nile-create-connection` | a drag from a connector dropped (`targetConnectorId` null = empty drop) |\n| `nile-reassign-connection` | a connection endpoint dragged to a new connector / empty space |\n| `nile-move-nodes` | node drag committed (`{moves: [{id, position}]}`) |\n| `nile-delete-selected` | Delete/Backspace pressed with a selection |\n| `nile-create-node` | a `nile-flow-external-item` dropped onto the canvas |\n| `nile-drop-to-group` | nodes dropped onto a group node |\n| `nile-selection-change`, `nile-canvas-change`, `nile-drag-started/ended`, `nile-flow-loaded` | state notifications |\n| `nile-node-intersections` | node dropped across connections (`emit-on-node-intersect`) |\n| `nile-connection-waypoints-changed` | a waypoint drag committed |\n\n## Elements\n\n- **`<nile-flow>`** — viewport: pan/zoom (`position`, `scale`, `min/max-scale`, wheel/pinch/dblclick),\n  control schemes (`control-scheme=\"default|scroll-pan|drag-select\"`, `triggers` overrides),\n  snap grid (`h-cell-size`/`v-cell-size`, `snap-while-dragging`), connection snap (`snap-radius`),\n  magnetic alignment lines (`magnetic-threshold`), `virtualized` culling,\n  `pan-on-static-nodes` (a drag that starts on a node that can't be dragged pans the\n  canvas; a tap still selects), keyboard a11y\n  (arrows move, Ctrl+A, Delete, +/−/0 zoom, `C` = keyboard connect mode).\n  Methods: `fitToScreen()`, `resetScaleAndCenter()`, `centerNode(id)`, `zoomIn/Out()`,\n  `setZoom()`, `select()/selectAll()/clearSelection()/getSelection()`, `getState()`,\n  `redraw()`, `reset()`, `documentToFlow()/flowToDocument()`, `resolvedConfig()`.\n  All of the above can also be set as one typed object via `.config` (`FlowConfig`,\n  grouped as `transform`/`zoom`/`pan`/`snap`) instead of a property at a time; a\n  config and the attributes compose, and `resolvedConfig()` reads the effective\n  settings — including the current view — back out.\n- **`<nile-flow-node>`** — `node-id`, `position`, `size`, `rotate`, `parent-id`, `group`,\n  `dragging-disabled`, `selection-disabled`, `connect-on-node`. Slot anything.\n  Handles are plain attributes on any descendant: `nile-flow-drag-handle`,\n  `nile-flow-resize-handle=\"se|e|s|…\"`, `nile-flow-rotate-handle`.\n- **`<nile-flow-connector>`** — `connector-id`, `type=\"source|target|source-target|outlet\"`,\n  `multiple`, `disabled`, `category`, `.canBeConnectedTo` (ids/categories array or predicate),\n  `connectable-side`, `self-connectable`.\n- **`<nile-flow-connection>`** — `source`/`target` (connector ids),\n  `type=\"straight|bezier|segment|adaptive-curve|custom\"` (+ `.customPath`),\n  `behavior=\"fixed|fixed-center|floating\"`, `offset`, `radius`,\n  `marker-start/end=\"arrow|circle|<custom id>\"`, `gradient-start/end`,\n  `.waypoints`, `reassign-disabled`, `reassignable-start`. Children = label at path midpoint.\n- **`<nile-flow-background>`** — `pattern=\"dots|grid|custom\"`, `size`, `color`, `.patternSvg`.\n- **`<nile-flow-minimap>`** — draggable viewport rect, `min-size`.\n- **`<nile-flow-connection-preview>`** — configures the drag-to-connect preview edge.\n- **`<nile-flow-external-item>`** — palette item; `.data` payload, `slot=\"preview\"` ghost.\n- **`<nile-org-chart>`** — org chart composed from the primitives above: flat\n  `{id,name,title?,avatar?,parentId?}` array in, tidy tree out (`managerId` is a\n  deprecated alias).\n  `orientation=\"vertical|horizontal\"` (top-down, or left-to-right for deep/narrow\n  orgs — swaps the layout axes, the connector edges and the collapse chip),\n  `layout=\"tree|compact|grouped\"`, `renderer=\"canvas|dom\"` (canvas by default), `virtualize`, `collapsible`,\n  and `expand-depth` — how many tiers start open (`0` roots alone, `1` roots plus\n  their direct reports, unset = the whole tree), with everything deeper behind a\n  `+` chip. Collapsing/expanding **animates** by default — cards glide to their new\n  places (360ms emphasized ease, both renderers) with the toggled card held still, an\n  opening subtree unfolds from its manager and a collapsing one implodes into it\n  and fades out;\n  `animation-disabled` / `animation-duration` tune it, and it is paint-only so\n  every position read stays final. Methods: `fit()`, `collapseAll()`, `expandAll()`, `expandToDepth(n)`,\n  `collapse(id)`/`expand(id)`/`toggle(id)` (closing a team also closes every team\n  inside it, so reopening shows one level), `zoomIn()`/`zoomOut()`/`zoomTo(scale)`.\n  A drag anywhere (empty space, a line or a card) pans; a click selects.\n  `layout=\"grouped\"` packs each manager's reports level by level (a row, a single\n  report, or a two-column IC stack on a spine), and the view follows the team you\n  open. `card-variant=\"ng\"` switches to the NG card: an accent band, avatar,\n  `name` / `title` / `caption` lines, a kebab, connection dots and a detached count\n  chip, in seven colour types (`purple`, `blue-light`, `pink`, `green`, `fuchsia`,\n  `gray-blue`, `indigo`) chosen by `person.type` → `.colorTypeFor(person, depth)` →\n  depth. `selected-id` reflects the selected card. `classic` stays the default card.\n  `controls` opts into an overlay toolbar: `zoom` (− / % / +), `fit`, `orientation`,\n  `png`, `pdf`, or `all` / `none`. Every setting can also be passed as one\n  typed object via `.config` (`OrgChartConfig`) instead of a property at a time —\n  a config and the attributes compose, and `resolvedConfig()` reads the effective\n  settings back out. `avatar` on a person is a photo URL and\n  renders in both renderers — DOM as an `<img>`, canvas clipped into the avatar\n  circle (initials show until the image decodes). Events: `nile-org-node-click`,\n  `nile-org-collapse-change` — `{id, collapsed}` per chip toggle, `{id: null,\n  collapsedIds}` once for a bulk change — `nile-org-select` (`{person}`, or\n  `{person: null}` when cleared), and `nile-org-menu` (`{person, anchor}` on a kebab\n  click). See `demo/org-canvas.html`.\n\n## Layout adapters (optional peers)\n\n```ts\nimport { layoutDagre } from '@aquera/nile-flow/layout-dagre'; // needs `dagre`\nimport { layoutElk } from '@aquera/nile-flow/layout-elk';      // needs `elkjs`\n\nconst positions = await layoutDagre({ nodes, edges }, { direction: 'LR', nodeGap: 40, layerGap: 90 });\npositions.forEach((pos, id) => myModel.node(id).position = pos); // app applies\n```\n\n## Undo / redo\n\n```ts\nimport { FlowHistory } from '@aquera/nile-flow';\nconst history = new FlowHistory(flow, state => applyToMyModel(state));\nhistory.undo(); history.redo();\n```\n\n## Charts inside nodes\n\nCharts are plain slotted content — nile-flow has zero chart code. Pan/zoom is a\nsingle CSS transform, so **Highcharts never reflows while zooming**; node resize\nreflows charts only on drop. See `demo/charts.html`.\n\n## Notes & divergences from Foblex\n\n- Connection hit widths are screen-constant (`vector-effect: non-scaling-stroke`),\n  and so are stroke widths down to 0.5 zoom. Below that the stroke tapers with the\n  zoom, bottoming out at 40% weight, so a zoomed-out overview reads as hairlines\n  instead of the edges out-inking the nodes. `--nile-flow-connection-width` still\n  sets the base weight the taper multiplies; hit targets never taper.\n- Custom markers register via the `.markers` property (shadow-DOM SVG defs can't\n  reference document-level ids).\n- Node-drop-on-connection intersections approximate each path by its two\n  half-chords through the midpoint.\n- Chart interactivity (tooltips) is supported at rest; pointer events into nodes\n  are muted during node drags/pans by design.\n\n## Develop\n\n```sh\nyarn build   # tsc → dist\nyarn start   # dev server on demo/\nyarn test    # web-test-runner (build first)\n```\n\n## Release Notes\n\nIn this section, you can find the updates for each release of `nile-flow`. It's a\ngood practice to maintain detailed release notes to help users and developers\nunderstand what changes have been made from one version to another and how these\nchanges might affect their projects.\n\n#### Version 0.0.5 (October 1, 2026)\n- Nile Org Chart: **Breaking** — `renderer` now defaults to `canvas` (was `dom`). Set `renderer=\"dom\"` to keep the old backend\n- Nile Org Chart: Added `parentId` on a person; `managerId` still works but is deprecated\n- Nile Org Chart: Added `layout=\"grouped\"` — each manager's reports pack level by level as a row, a single report, or a two-column IC stack on a spine, and the view follows the team you open on the same animation clock as the cards\n- Nile Org Chart: Added `cardVariant=\"ng\"`, the NG card (288 × 82) — accent band, avatar, `name` / `title` / `caption` lines, kebab, connection dots and a detached count chip with a hover state, in seven colour types set by `person.type`, `colorTypeFor(person, depth)` or depth. `classic` stays the default and is unchanged\n- Nile Org Chart: Added selection — `selectedId` (reflected), `nile-org-select` (`{person}` / `{person: null}`); re-clicking the selected card, clicking empty space or pressing Escape clears it. Added `nile-org-menu` for kebab clicks\n- Nile Org Chart: Added toolbar controls `zoom` (− / live % / +) and `orientation` (horizontal / vertical), plus public `zoomIn()` / `zoomOut()` / `zoomTo(scale)`\n- Nile Org Chart: A drag anywhere now pans, including from a card; a click still selects\n- Nile Org Chart: Closing a team now closes every team inside it, so reopening shows only the next level. `expandAll()` / `collapseAll()` are unchanged\n- Nile Org Chart: Smoother open / close motion — 360ms emphasized ease (was 220ms ease-out)\n- Nile Flow: Added `pan-on-static-nodes` — a drag that starts on a node that can't be dragged pans the canvas\n\n#### Version 0.0.4 (September 28, 2026)\n- Nile Flow, Nile Org Chart: Fixed dark mode — undefined `--ng-*` token names now map to the ones NxtGen ships, and the `--ng-*` token takes precedence over the legacy `--nile-colors-*` layer, so both renderers follow the theme (UIF-1367)\n- Nile Flow, Nile Org Chart: Removed colour fallbacks, so an unresolved token fails visibly instead of staying light (UIF-1367)\n- Nile Org Chart: Tokenized the canvas avatar / badge text and marquee / minimap washes; DOM and canvas avatars now match (UIF-1367)\n\n#### Version 0.0.3 (September 16, 2026)\n- Nile Org Chart: Added `controls`, an opt-in overlay toolbar (`fit`, `png`, `pdf`, `all`, `none`)\n- Nile Org Chart: Added `toPngBlob()` / `toPdfBlob()` and `downloadPng()` / `downloadPdf()` — exports the full layout, renderer-independent, with a dependency-free vector PDF\n- Nile Org Chart: Added `nile-org-export` / `nile-org-export-error` events, toolbar CSS parts and `--nile-org-chart-toolbar-inset`\n- Nile Org Chart: Fixed connector lines disappearing on collapse / expand\n\n#### Version 0.0.2 (September 10, 2026)\n- Nile Org Chart: Added `orientation` (`vertical` / `horizontal`) — `horizontal` advances tiers rightward and spreads siblings down a column, moving the connectors to the left / right card edges and the collapse chip to the right edge. `layout=\"compact\"` folds all-leaf groups into an indented row rather than a column, and `fit()` pins the first tier to the left. Gap attributes stay physical, so `h-gap` / `v-gap` swap roles with the orientation (UIF-1351)\n- Nile Org Chart: Added a collapse / expand transition, on by default — cards glide to their new positions over `animation-duration` (220ms, ease-out) with the toggled card held still, an opening subtree unfolding from its manager and a collapsing one imploding into it and fading out. Paint-only, so every position read stays final; skipped past ~400 moving cards and under `prefers-reduced-motion`. New `animation-disabled` / `animation-duration` (UIF-1351)\n- Nile Org Chart: Added `config` (`OrgChartConfig`) and `resolvedConfig()` — every setting as one typed object, composing with the existing attributes rather than replacing them (UIF-1351)\n- Nile Flow: Added `config` (`FlowConfig`) and `resolvedConfig()` — all twenty-six settings as one typed object, grouped as `transform` / `zoom` / `pan` / `snap`, composing with the existing attributes (UIF-1351)\n- Nile Flow: Added hover cursor affordances — `grab` over the pannable canvas (`crosshair` in the schemes where a left-drag rubber-bands, `default` when `pan-disabled`), `move` over a draggable node, and a `hoverResolver` hook so a canvas-mode host can claim the cursor for controls it paints itself. `control-scheme`, `pan-disabled` and `dragging-disabled` are now reflected (UIF-1351)\n- Nile Flow: Fixed double-click zoom in canvas mode — the \"empty canvas only\" guard walked the event path for a node element, which canvas mode has none of, so a double-click on any painted card or control zoomed. It now consults the backend hit test, matching DOM mode (UIF-1351)\n- Nile Org Chart: Fixed the viewport being re-framed on a `renderer` change — switching backend repaints the same layout at the same coordinates, so it no longer discards the user's pan and zoom (UIF-1351)\n\n#### Version 0.0.1 (September 08, 2026)\n- Initial release of the `@aquera/nile-flow` package (build tooling, dev server, and tests mirroring `@aquera/nile-elements`). (UIF-1349)\n- Nile Flow: Added the viewport component — pan / zoom (`position`, `scale`, `min-scale` / `max-scale`, wheel / pinch / double-click), control schemes (`default` / `scroll-pan` / `drag-select` plus `triggers` overrides), snap grid (`h-cell-size` / `v-cell-size`, `snap-while-dragging`), connection snapping (`snap-radius`), magnetic alignment lines, `virtualized` culling, and keyboard a11y (arrows move, Ctrl+A, Delete, +/−/0 zoom, `C` for keyboard connect mode). Emits `nile-create-connection`, `nile-reassign-connection`, `nile-move-nodes`, `nile-delete-selected`, `nile-create-node`, `nile-drop-to-group`, `nile-selection-change`, `nile-canvas-change`, `nile-drag-started` / `nile-drag-ended`, `nile-flow-loaded`, `nile-node-intersections` and `nile-connection-waypoints-changed` (UIF-1349).\n- Nile Flow Node: Added the node component — `node-id`, `position`, `size`, `rotate`, `parent-id`, `group`, `dragging-disabled`, `selection-disabled`, `connect-on-node`, with any slotted content and `nile-flow-drag-handle` / `nile-flow-resize-handle` / `nile-flow-rotate-handle` attribute handles on any descendant (UIF-1349).\n- Nile Flow Connector: Added the connection anchor — `connector-id`, `type` (`source` / `target` / `source-target` / `outlet`), `multiple`, `disabled`, `category`, `canBeConnectedTo` (ids, categories or a predicate), `connectable-side` and `self-connectable` (UIF-1349).\n- Nile Flow Connection: Added the edge component — `source` / `target`, `type` (`straight` / `bezier` / `segment` / `adaptive-curve` / `custom` with `customPath`), `behavior` (`fixed` / `fixed-center` / `floating`), `offset`, `radius`, `marker-start` / `marker-end`, `gradient-start` / `gradient-end`, `waypoints`, `reassign-disabled` and `reassignable-start`; children render as a label at the path midpoint (UIF-1349).\n- Nile Flow Background: Added the canvas backdrop — `pattern` (`dots` / `grid` / `custom`), `size`, `color` and `patternSvg` (UIF-1349).\n- Nile Flow Minimap: Added the minimap — draggable viewport rect with `min-size` (UIF-1349).\n- Nile Flow Connection Preview: Added the drag-to-connect preview edge configuration (UIF-1349).\n- Nile Flow External Item: Added the palette item — a `data` payload and a `preview` slot for the drag ghost, dropping onto the canvas as `nile-create-node` (UIF-1349).\n- Nile Org Chart: Added an org chart composed from the flow primitives — a flat `{id, name, title?, avatar?, managerId?}` array in, tidy tree out. `layout` (`tree` / `compact`), `renderer` (`dom` / `canvas`), `virtualize`, `collapsible` and `expand-depth`, with deeper tiers behind a `+` chip. Methods `fit()`, `collapseAll()`, `expandAll()`, `expandToDepth(n)`, `collapse(id)` / `expand(id)` / `toggle(id)`. Emits `nile-org-node-click` and `nile-org-collapse-change` (UIF-1349).\n- Layout adapters: Added `@aquera/nile-flow/layout-dagre` and `@aquera/nile-flow/layout-elk` — optional-peer wrappers that return positions for the app to apply; the engine is imported lazily on first call (UIF-1349).\n- Flow History: Added `FlowHistory`, an undo / redo stack driven by the flow's state snapshots (UIF-1349).\n","readmeFilename":"README.md"}