Introduce Observable Plot
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Sep 2023 07:45:52 +0000 (09:45 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Sep 2023 07:45:52 +0000 (09:45 +0200)
js/package-lock.json
js/package.json
js/src/graph/TestGraph.js [new file with mode: 0644]
js/src/graph/export-package.js [new file with mode: 0644]
js/src/graph/index.html [new file with mode: 0644]
js/src/graph/index.js [new file with mode: 0644]
js/webpack.common.js

index 071bfeaf603406f57336302e56ea2759c20257f8..0f51f6b9de57812b8fc111e5e366624d3283c662 100644 (file)
@@ -5,10 +5,12 @@
        "requires": true,
        "packages": {
                "": {
+                       "name": "org.argeo.app.geo.js",
                        "version": "2.3.0.next",
                        "license": "GPL",
                        "dependencies": {
                                "@nieuwlandgeo/sldreader": "^0.3.1",
+                               "@observablehq/plot": "^0.6.10",
                                "ol": "7.5.x"
                        },
                        "devDependencies": {
                                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
                        }
                },
+               "node_modules/@observablehq/plot": {
+                       "version": "0.6.10",
+                       "resolved": "https://registry.npmjs.org/@observablehq/plot/-/plot-0.6.10.tgz",
+                       "integrity": "sha512-LmPoYAh8oCP6GmjFTUPbmxwDm62516kbeSJsXu05GcTILzT9hsh4ssZiXg61ufPm+n8f/5L7UtZHghR+XtcJHQ==",
+                       "dependencies": {
+                               "d3": "^7.8.0",
+                               "interval-tree-1d": "^1.0.0",
+                               "isoformat": "^0.2.0"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
                "node_modules/@petamoriken/float16": {
                        "version": "3.8.3",
                        "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.3.tgz",
                        "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
                        "dev": true
                },
+               "node_modules/binary-search-bounds": {
+                       "version": "2.0.5",
+                       "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz",
+                       "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA=="
+               },
                "node_modules/bluebird": {
                        "version": "3.7.2",
                        "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
                        "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
                        "dev": true
                },
+               "node_modules/d3": {
+                       "version": "7.8.5",
+                       "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz",
+                       "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==",
+                       "dependencies": {
+                               "d3-array": "3",
+                               "d3-axis": "3",
+                               "d3-brush": "3",
+                               "d3-chord": "3",
+                               "d3-color": "3",
+                               "d3-contour": "4",
+                               "d3-delaunay": "6",
+                               "d3-dispatch": "3",
+                               "d3-drag": "3",
+                               "d3-dsv": "3",
+                               "d3-ease": "3",
+                               "d3-fetch": "3",
+                               "d3-force": "3",
+                               "d3-format": "3",
+                               "d3-geo": "3",
+                               "d3-hierarchy": "3",
+                               "d3-interpolate": "3",
+                               "d3-path": "3",
+                               "d3-polygon": "3",
+                               "d3-quadtree": "3",
+                               "d3-random": "3",
+                               "d3-scale": "4",
+                               "d3-scale-chromatic": "3",
+                               "d3-selection": "3",
+                               "d3-shape": "3",
+                               "d3-time": "3",
+                               "d3-time-format": "4",
+                               "d3-timer": "3",
+                               "d3-transition": "3",
+                               "d3-zoom": "3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-array": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+                       "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+                       "dependencies": {
+                               "internmap": "1 - 2"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-axis": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+                       "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-brush": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+                       "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+                       "dependencies": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "3",
+                               "d3-transition": "3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-chord": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+                       "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+                       "dependencies": {
+                               "d3-path": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-color": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+                       "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-contour": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+                       "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+                       "dependencies": {
+                               "d3-array": "^3.2.0"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-delaunay": {
+                       "version": "6.0.4",
+                       "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+                       "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+                       "dependencies": {
+                               "delaunator": "5"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-dispatch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+                       "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-drag": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+                       "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+                       "dependencies": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-selection": "3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-dsv": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+                       "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+                       "dependencies": {
+                               "commander": "7",
+                               "iconv-lite": "0.6",
+                               "rw": "1"
+                       },
+                       "bin": {
+                               "csv2json": "bin/dsv2json.js",
+                               "csv2tsv": "bin/dsv2dsv.js",
+                               "dsv2dsv": "bin/dsv2dsv.js",
+                               "dsv2json": "bin/dsv2json.js",
+                               "json2csv": "bin/json2dsv.js",
+                               "json2dsv": "bin/json2dsv.js",
+                               "json2tsv": "bin/json2dsv.js",
+                               "tsv2csv": "bin/dsv2dsv.js",
+                               "tsv2json": "bin/dsv2json.js"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-dsv/node_modules/commander": {
+                       "version": "7.2.0",
+                       "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+                       "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+                       "engines": {
+                               "node": ">= 10"
+                       }
+               },
+               "node_modules/d3-ease": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+                       "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-fetch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+                       "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+                       "dependencies": {
+                               "d3-dsv": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-force": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+                       "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+                       "dependencies": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-quadtree": "1 - 3",
+                               "d3-timer": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-format": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+                       "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-geo": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
+                       "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
+                       "dependencies": {
+                               "d3-array": "2.5.0 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-hierarchy": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+                       "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-interpolate": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+                       "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+                       "dependencies": {
+                               "d3-color": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-path": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+                       "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-polygon": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+                       "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-quadtree": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+                       "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-random": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+                       "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-scale": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+                       "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+                       "dependencies": {
+                               "d3-array": "2.10.0 - 3",
+                               "d3-format": "1 - 3",
+                               "d3-interpolate": "1.2.0 - 3",
+                               "d3-time": "2.1.1 - 3",
+                               "d3-time-format": "2 - 4"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-scale-chromatic": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+                       "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+                       "dependencies": {
+                               "d3-color": "1 - 3",
+                               "d3-interpolate": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-selection": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+                       "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-shape": {
+                       "version": "3.2.0",
+                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+                       "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+                       "dependencies": {
+                               "d3-path": "^3.1.0"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-time": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+                       "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+                       "dependencies": {
+                               "d3-array": "2 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-time-format": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+                       "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+                       "dependencies": {
+                               "d3-time": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-timer": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+                       "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
+               "node_modules/d3-transition": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+                       "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+                       "dependencies": {
+                               "d3-color": "1 - 3",
+                               "d3-dispatch": "1 - 3",
+                               "d3-ease": "1 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-timer": "1 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       },
+                       "peerDependencies": {
+                               "d3-selection": "2 - 3"
+                       }
+               },
+               "node_modules/d3-zoom": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+                       "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+                       "dependencies": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "2 - 3",
+                               "d3-transition": "2 - 3"
+                       },
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
                "node_modules/debug": {
                        "version": "4.3.4",
                        "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
                                "node": ">=10"
                        }
                },
+               "node_modules/delaunator": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+                       "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+                       "dependencies": {
+                               "robust-predicates": "^3.0.0"
+                       }
+               },
                "node_modules/delegates": {
                        "version": "1.0.0",
                        "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
                        "version": "0.6.3",
                        "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
                        "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-                       "dev": true,
-                       "optional": true,
                        "dependencies": {
                                "safer-buffer": ">= 2.1.2 < 3.0.0"
                        },
                                "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
                        }
                },
+               "node_modules/internmap": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+                       "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+                       "engines": {
+                               "node": ">=12"
+                       }
+               },
                "node_modules/interpret": {
                        "version": "3.1.1",
                        "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
                                "node": ">=10.13.0"
                        }
                },
+               "node_modules/interval-tree-1d": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/interval-tree-1d/-/interval-tree-1d-1.0.4.tgz",
+                       "integrity": "sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==",
+                       "dependencies": {
+                               "binary-search-bounds": "^2.0.0"
+                       }
+               },
                "node_modules/ip": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
                                "node": ">=0.10.0"
                        }
                },
+               "node_modules/isoformat": {
+                       "version": "0.2.1",
+                       "resolved": "https://registry.npmjs.org/isoformat/-/isoformat-0.2.1.tgz",
+                       "integrity": "sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ=="
+               },
                "node_modules/jackspeak": {
                        "version": "2.3.1",
                        "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.1.tgz",
                                "url": "https://github.com/sponsors/isaacs"
                        }
                },
+               "node_modules/robust-predicates": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
+                       "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+               },
                "node_modules/run-parallel": {
                        "version": "1.2.0",
                        "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
                "node_modules/safer-buffer": {
                        "version": "2.1.2",
                        "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-                       "dev": true,
-                       "optional": true
+                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
                },
                "node_modules/schema-utils": {
                        "version": "4.2.0",
                                }
                        }
                },
+               "@observablehq/plot": {
+                       "version": "0.6.10",
+                       "resolved": "https://registry.npmjs.org/@observablehq/plot/-/plot-0.6.10.tgz",
+                       "integrity": "sha512-LmPoYAh8oCP6GmjFTUPbmxwDm62516kbeSJsXu05GcTILzT9hsh4ssZiXg61ufPm+n8f/5L7UtZHghR+XtcJHQ==",
+                       "requires": {
+                               "d3": "^7.8.0",
+                               "interval-tree-1d": "^1.0.0",
+                               "isoformat": "^0.2.0"
+                       }
+               },
                "@petamoriken/float16": {
                        "version": "3.8.3",
                        "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.3.tgz",
                        "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
                        "dev": true
                },
+               "binary-search-bounds": {
+                       "version": "2.0.5",
+                       "resolved": "https://registry.npmjs.org/binary-search-bounds/-/binary-search-bounds-2.0.5.tgz",
+                       "integrity": "sha512-H0ea4Fd3lS1+sTEB2TgcLoK21lLhwEJzlQv3IN47pJS976Gx4zoWe0ak3q+uYh60ppQxg9F16Ri4tS1sfD4+jA=="
+               },
                "bluebird": {
                        "version": "3.7.2",
                        "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
                                }
                        }
                },
+               "d3": {
+                       "version": "7.8.5",
+                       "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.5.tgz",
+                       "integrity": "sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==",
+                       "requires": {
+                               "d3-array": "3",
+                               "d3-axis": "3",
+                               "d3-brush": "3",
+                               "d3-chord": "3",
+                               "d3-color": "3",
+                               "d3-contour": "4",
+                               "d3-delaunay": "6",
+                               "d3-dispatch": "3",
+                               "d3-drag": "3",
+                               "d3-dsv": "3",
+                               "d3-ease": "3",
+                               "d3-fetch": "3",
+                               "d3-force": "3",
+                               "d3-format": "3",
+                               "d3-geo": "3",
+                               "d3-hierarchy": "3",
+                               "d3-interpolate": "3",
+                               "d3-path": "3",
+                               "d3-polygon": "3",
+                               "d3-quadtree": "3",
+                               "d3-random": "3",
+                               "d3-scale": "4",
+                               "d3-scale-chromatic": "3",
+                               "d3-selection": "3",
+                               "d3-shape": "3",
+                               "d3-time": "3",
+                               "d3-time-format": "4",
+                               "d3-timer": "3",
+                               "d3-transition": "3",
+                               "d3-zoom": "3"
+                       }
+               },
+               "d3-array": {
+                       "version": "3.2.4",
+                       "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+                       "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+                       "requires": {
+                               "internmap": "1 - 2"
+                       }
+               },
+               "d3-axis": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
+                       "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="
+               },
+               "d3-brush": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
+                       "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+                       "requires": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "3",
+                               "d3-transition": "3"
+                       }
+               },
+               "d3-chord": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
+                       "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+                       "requires": {
+                               "d3-path": "1 - 3"
+                       }
+               },
+               "d3-color": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+                       "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
+               },
+               "d3-contour": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+                       "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+                       "requires": {
+                               "d3-array": "^3.2.0"
+                       }
+               },
+               "d3-delaunay": {
+                       "version": "6.0.4",
+                       "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
+                       "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+                       "requires": {
+                               "delaunator": "5"
+                       }
+               },
+               "d3-dispatch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
+                       "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="
+               },
+               "d3-drag": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
+                       "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+                       "requires": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-selection": "3"
+                       }
+               },
+               "d3-dsv": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
+                       "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+                       "requires": {
+                               "commander": "7",
+                               "iconv-lite": "0.6",
+                               "rw": "1"
+                       },
+                       "dependencies": {
+                               "commander": {
+                                       "version": "7.2.0",
+                                       "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+                                       "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="
+                               }
+                       }
+               },
+               "d3-ease": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
+                       "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="
+               },
+               "d3-fetch": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
+                       "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+                       "requires": {
+                               "d3-dsv": "1 - 3"
+                       }
+               },
+               "d3-force": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
+                       "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+                       "requires": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-quadtree": "1 - 3",
+                               "d3-timer": "1 - 3"
+                       }
+               },
+               "d3-format": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+                       "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
+               },
+               "d3-geo": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
+                       "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
+                       "requires": {
+                               "d3-array": "2.5.0 - 3"
+                       }
+               },
+               "d3-hierarchy": {
+                       "version": "3.1.2",
+                       "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+                       "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
+               },
+               "d3-interpolate": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+                       "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+                       "requires": {
+                               "d3-color": "1 - 3"
+                       }
+               },
+               "d3-path": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+                       "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
+               },
+               "d3-polygon": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
+                       "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="
+               },
+               "d3-quadtree": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
+                       "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="
+               },
+               "d3-random": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
+                       "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="
+               },
+               "d3-scale": {
+                       "version": "4.0.2",
+                       "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+                       "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+                       "requires": {
+                               "d3-array": "2.10.0 - 3",
+                               "d3-format": "1 - 3",
+                               "d3-interpolate": "1.2.0 - 3",
+                               "d3-time": "2.1.1 - 3",
+                               "d3-time-format": "2 - 4"
+                       }
+               },
+               "d3-scale-chromatic": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz",
+                       "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==",
+                       "requires": {
+                               "d3-color": "1 - 3",
+                               "d3-interpolate": "1 - 3"
+                       }
+               },
+               "d3-selection": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
+                       "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="
+               },
+               "d3-shape": {
+                       "version": "3.2.0",
+                       "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+                       "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+                       "requires": {
+                               "d3-path": "^3.1.0"
+                       }
+               },
+               "d3-time": {
+                       "version": "3.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+                       "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+                       "requires": {
+                               "d3-array": "2 - 3"
+                       }
+               },
+               "d3-time-format": {
+                       "version": "4.1.0",
+                       "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+                       "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+                       "requires": {
+                               "d3-time": "1 - 3"
+                       }
+               },
+               "d3-timer": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
+                       "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="
+               },
+               "d3-transition": {
+                       "version": "3.0.1",
+                       "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
+                       "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
+                       "requires": {
+                               "d3-color": "1 - 3",
+                               "d3-dispatch": "1 - 3",
+                               "d3-ease": "1 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-timer": "1 - 3"
+                       }
+               },
+               "d3-zoom": {
+                       "version": "3.0.0",
+                       "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
+                       "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
+                       "requires": {
+                               "d3-dispatch": "1 - 3",
+                               "d3-drag": "2 - 3",
+                               "d3-interpolate": "1 - 3",
+                               "d3-selection": "2 - 3",
+                               "d3-transition": "2 - 3"
+                       }
+               },
                "debug": {
                        "version": "4.3.4",
                        "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
                        "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
                        "dev": true
                },
+               "delaunator": {
+                       "version": "5.0.0",
+                       "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz",
+                       "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==",
+                       "requires": {
+                               "robust-predicates": "^3.0.0"
+                       }
+               },
                "delegates": {
                        "version": "1.0.0",
                        "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
                        "version": "0.6.3",
                        "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
                        "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
-                       "dev": true,
-                       "optional": true,
                        "requires": {
                                "safer-buffer": ">= 2.1.2 < 3.0.0"
                        }
                        "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==",
                        "dev": true
                },
+               "internmap": {
+                       "version": "2.0.3",
+                       "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+                       "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+               },
                "interpret": {
                        "version": "3.1.1",
                        "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
                        "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
                        "dev": true
                },
+               "interval-tree-1d": {
+                       "version": "1.0.4",
+                       "resolved": "https://registry.npmjs.org/interval-tree-1d/-/interval-tree-1d-1.0.4.tgz",
+                       "integrity": "sha512-wY8QJH+6wNI0uh4pDQzMvl+478Qh7Rl4qLmqiluxALlNvl+I+o5x38Pw3/z7mDPTPS1dQalZJXsmbvxx5gclhQ==",
+                       "requires": {
+                               "binary-search-bounds": "^2.0.0"
+                       }
+               },
                "ip": {
                        "version": "2.0.0",
                        "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
                        "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
                        "dev": true
                },
+               "isoformat": {
+                       "version": "0.2.1",
+                       "resolved": "https://registry.npmjs.org/isoformat/-/isoformat-0.2.1.tgz",
+                       "integrity": "sha512-tFLRAygk9NqrRPhJSnNGh7g7oaVWDwR0wKh/GM2LgmPa50Eg4UfyaCO4I8k6EqJHl1/uh2RAD6g06n5ygEnrjQ=="
+               },
                "jackspeak": {
                        "version": "2.3.1",
                        "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.1.tgz",
                                "glob": "^10.2.5"
                        }
                },
+               "robust-predicates": {
+                       "version": "3.0.2",
+                       "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
+                       "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+               },
                "run-parallel": {
                        "version": "1.2.0",
                        "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
                "safer-buffer": {
                        "version": "2.1.2",
                        "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
-                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
-                       "dev": true,
-                       "optional": true
+                       "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
                },
                "schema-utils": {
                        "version": "4.2.0",
index 9869bbeae949006d71c384294fc9df3611b8b5da..a29b81c6624a0b28042c12e55620ac1d5e099d83 100644 (file)
@@ -24,6 +24,7 @@
        },
        "dependencies": {
                "@nieuwlandgeo/sldreader": "^0.3.1",
+               "@observablehq/plot": "^0.6.10",
                "ol": "7.5.x"
        }
 }
diff --git a/js/src/graph/TestGraph.js b/js/src/graph/TestGraph.js
new file mode 100644 (file)
index 0000000..850bef9
--- /dev/null
@@ -0,0 +1,12 @@
+import * as Plot from "@observablehq/plot";
+
+export class TestGraph {
+
+       init() {
+
+               const plot = Plot.rectY({ length: 10000 }, Plot.binX({ y: "count" }, { x: Math.random })).plot();
+               const div = document.querySelector("#myplot");
+               div.append(plot);
+
+       }
+}
diff --git a/js/src/graph/export-package.js b/js/src/graph/export-package.js
new file mode 100644 (file)
index 0000000..f360084
--- /dev/null
@@ -0,0 +1,19 @@
+import TestGraph from './TestGraph.js';
+import * as Plot from "@observablehq/plot";
+
+// PSEUDO PACKAGE
+if (typeof globalThis.argeo === 'undefined')
+       globalThis.argeo = {};
+if (typeof globalThis.argeo.app === 'undefined')
+       globalThis.argeo.app = {};
+if (typeof globalThis.argeo.app.graph === 'undefined')
+       globalThis.argeo.app.graph = {};
+
+// PUBLIC CLASSES
+globalThis.argeo.app.graph.TestGraph = TestGraph;
+
+const plot = Plot.rectY({ length: 10000 }, Plot.binX({ y: "count" }, { x: Math.random })).plot();
+const div = document.querySelector("#myplot");
+div.append(plot);
+
+"use strict";
diff --git a/js/src/graph/index.html b/js/src/graph/index.html
new file mode 100644 (file)
index 0000000..32cbd31
--- /dev/null
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+       <meta charset="UTF-8">
+</head>
+
+<body>
+       <div id="myplot"></div>
+</body>
+
+</html>
\ No newline at end of file
diff --git a/js/src/graph/index.js b/js/src/graph/index.js
new file mode 100644 (file)
index 0000000..6ff32b0
--- /dev/null
@@ -0,0 +1 @@
+import './export-package.js';
index 1f2f2a2b80d40c23590b34ff8305715fdde052fe..dccac82c4d767ac6163f2cebb1d6ddc5041e37b2 100644 (file)
@@ -5,14 +5,13 @@ const path = require('path');
 
 module.exports = {
        entry: {
-               "geo": { 
-                       import: './src/geo/index.js',
-               }
+               "geo": './src/geo/index.js',
+               "graph": './src/graph/index.js',
        },
        output: {
                filename: '[name].[contenthash].js',
                path: path.resolve(__dirname, 'org.argeo.app.js/org/argeo/app/js'),
-                       publicPath:'/pkg/org.argeo.app.js',
+               publicPath: '/pkg/org.argeo.app.js',
                clean: true,
        },
        optimization: {
@@ -50,6 +49,13 @@ module.exports = {
                        filename: 'geo.html',
                        chunks: ['geo'],
                }),
+               new HtmlWebpackPlugin({
+                       title: 'Argeo Suite Graph JS',
+                       template: 'src/graph/index.html',
+                       scriptLoading: 'module',
+                       filename: 'graph.html',
+                       chunks: ['graph'],
+               }),
 
        ],
 };
\ No newline at end of file