aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md49
-rw-r--r--example/.gitignore6
-rw-r--r--example/Makefile13
-rw-r--r--example/README.md21
-rw-r--r--example/gleam.toml18
-rw-r--r--example/index.html8
-rw-r--r--example/index.js3
-rw-r--r--example/manifest.toml13
-rw-r--r--example/package-lock.json1322
-rw-r--r--example/package.json8
-rw-r--r--example/src/lustre_counter.gleam95
-rw-r--r--gleam.toml3
-rw-r--r--manifest.toml6
-rw-r--r--package-lock.json3575
-rw-r--r--package.json35
-rw-r--r--src/lustre.ffi.mjs290
-rw-r--r--src/lustre.gleam43
-rw-r--r--src/lustre/attribute.gleam44
-rw-r--r--src/lustre/cmd.gleam32
-rw-r--r--src/lustre/element.gleam20
-rw-r--r--src/lustre/event.gleam158
-rw-r--r--src/runtime.ffi.mjs1300
-rw-r--r--test/counter.gleam73
-rw-r--r--test/counter.html15
-rw-r--r--test/example/index.html37
-rw-r--r--test/example/src/main.gleam56
-rw-r--r--test/lustre_test.gleam3
-rw-r--r--test/playground.mjs7
-rw-r--r--test/playground/index.html37
-rw-r--r--test/playground/main.gleam28
-rw-r--r--test/playground/monaco.gleam15
-rw-r--r--test/test_ffi.mjs5
32 files changed, 1742 insertions, 5596 deletions
diff --git a/README.md b/README.md
index 1373acb..b6d111c 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# Lustre
-A framework for building create web apps – powered by Gleam and React!
+An Elm-inspired framework for building web apps in Gleam!
---
@@ -15,19 +15,25 @@ import lustre/event.{on_click}
import lustre/cmd
pub fn main() {
- let app = lustre.application(#(0, cmd.none()), update, render)
- lustre.start(app, "#app")
+ let app = lustre.simple(init, update, render)
+ let assert Ok(_) = lustre.start(app, "#app")
+
+ Nil
+}
+
+fn init() {
+ 0
}
-pub type Action {
+type Msg {
Incr
Decr
}
-fn update(state, action) {
- case action {
- Incr -> #(state + 1, cmd.none())
- Decr -> #(state - 1, cmd.none())
+fn update(state, msg) {
+ case msg {
+ Incr -> state + 1
+ Decr -> state - 1
}
}
@@ -52,30 +58,9 @@ the browser. **It will not work if your are targetting Node.js or Erlang.**
## Installation
-If available on Hex, this package can be added to your Gleam project:
-
-```sh
-gleam add lustre
-```
-
-and its documentation can be found at <https://hexdocs.pm/lustre>. You will also
-need to install `react` and `react-dom` from npm:
+Lustre is available on [Hex](https://hex.pm/packages/lustre). You can install
+it like any other Hex package:
```sh
-npm i react react-dom
+$ gleam add lustre
```
-
----
-
-## Development
-
-First, make sure you have both Gleam and Node.js installed, then:
-
-```bash
-npm i
-npm start
-```
-
-This sets up `chokidar` to watch our gleam source code and runs the compiler
-whenever we make a change. It also starts a server that will serve the examples
-located in `test/example/`.
diff --git a/example/.gitignore b/example/.gitignore
deleted file mode 100644
index 0c9d183..0000000
--- a/example/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-*.beam
-*.ez
-build
-erl_crash.dump
-node_modules
-dist
diff --git a/example/Makefile b/example/Makefile
deleted file mode 100644
index 1a6e445..0000000
--- a/example/Makefile
+++ /dev/null
@@ -1,13 +0,0 @@
-.PHONY: dev
-
-.DEFAULT_GOAL:= dist
-
-dist:
- rm -rf dist
- gleam build
- npx vite build
-
-dev:
- npx concurrently \
- vite \
- 'watchexec --filter "src/*" gleam build'
diff --git a/example/README.md b/example/README.md
deleted file mode 100644
index 014e017..0000000
--- a/example/README.md
+++ /dev/null
@@ -1,21 +0,0 @@
-# lustre_counter
-
-This is an example Lustre project. It uses [watchexec](https://github.com/watchexec/watchexec) to rebuild the Gleam project on save.
-
-## Quick start
-
-Initial setup:
-```sh
-npm install
-gleam build
-```
-
-Run dev server on `localhost:3000`:
-```sh
-make dev
-```
-
-Make a production build under `dist` folder:
-```sh
-make
-```
diff --git a/example/gleam.toml b/example/gleam.toml
deleted file mode 100644
index e81cef9..0000000
--- a/example/gleam.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-name = "lustre_counter"
-version = "0.1.0"
-target = "javascript"
-
-# Fill out these fields if you intend to generate HTML documentation or publish
-# your project to the Hex package manager.
-#
-# licences = ["Apache-2.0"]
-# description = "A Gleam library..."
-# repository = { type = "github", user = "username", repo = "project" }
-# links = [{ title = "Website", href = "https://gleam.run" }]
-
-[dependencies]
-gleam_stdlib = "~> 0.21"
-lustre = "~> 1.1"
-
-[dev-dependencies]
-gleeunit = "~> 0.6"
diff --git a/example/index.html b/example/index.html
deleted file mode 100644
index 828b35b..0000000
--- a/example/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-
-<body>
- <div id="app"></div>
- <script type="module" src="./index.js"></script>
-</body>
-
-</html>
diff --git a/example/index.js b/example/index.js
deleted file mode 100644
index 81316f3..0000000
--- a/example/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import { main } from "./build/dev/javascript/lustre_counter/dist/lustre_counter.mjs";
-
-main()
diff --git a/example/manifest.toml b/example/manifest.toml
deleted file mode 100644
index 0240040..0000000
--- a/example/manifest.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-# This file was generated by Gleam
-# You typically do not need to edit this file
-
-packages = [
- { name = "gleam_stdlib", version = "0.21.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "FB03CD50B477867DA65B1318252ABA02F76175754762D15BF6C792CF5B85BCC4" },
- { name = "gleeunit", version = "0.6.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "5BF486C3E135B7F5ED8C054925FC48E5B2C79016A39F416FD8CF2E860520EE55" },
- { name = "lustre", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "lustre", source = "hex", outer_checksum = "ECCB3E7EB93D7BDAAAE0EC2035C026E070542FDB8404A6A3AAE1CE274345E91E" },
-]
-
-[requirements]
-gleam_stdlib = "~> 0.21"
-gleeunit = "~> 0.6"
-lustre = "~> 1.1"
diff --git a/example/package-lock.json b/example/package-lock.json
deleted file mode 100644
index a3ec9d1..0000000
--- a/example/package-lock.json
+++ /dev/null
@@ -1,1322 +0,0 @@
-{
- "name": "example",
- "lockfileVersion": 2,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "concurrently": "^7.2.1",
- "react": "^18.1.0",
- "react-dom": "^18.1.0",
- "vite": "^2.9.9"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chalk/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "node_modules/concurrently": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.1.tgz",
- "integrity": "sha512-7cab/QyqipqghrVr9qZmoWbidu0nHsmxrpNqQ7r/67vfl1DWJElexehQnTH1p+87tDkihaAjM79xTZyBQh7HLw==",
- "dependencies": {
- "chalk": "^4.1.0",
- "date-fns": "^2.16.1",
- "lodash": "^4.17.21",
- "rxjs": "^6.6.3",
- "shell-quote": "^1.7.3",
- "spawn-command": "^0.0.2-1",
- "supports-color": "^8.1.0",
- "tree-kill": "^1.2.2",
- "yargs": "^17.3.1"
- },
- "bin": {
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.0 || >=16.0.0"
- }
- },
- "node_modules/date-fns": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
- "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==",
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "node_modules/esbuild": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz",
- "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==",
- "hasInstallScript": true,
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=12"
- },
- "optionalDependencies": {
- "esbuild-android-64": "0.14.39",
- "esbuild-android-arm64": "0.14.39",
- "esbuild-darwin-64": "0.14.39",
- "esbuild-darwin-arm64": "0.14.39",
- "esbuild-freebsd-64": "0.14.39",
- "esbuild-freebsd-arm64": "0.14.39",
- "esbuild-linux-32": "0.14.39",
- "esbuild-linux-64": "0.14.39",
- "esbuild-linux-arm": "0.14.39",
- "esbuild-linux-arm64": "0.14.39",
- "esbuild-linux-mips64le": "0.14.39",
- "esbuild-linux-ppc64le": "0.14.39",
- "esbuild-linux-riscv64": "0.14.39",
- "esbuild-linux-s390x": "0.14.39",
- "esbuild-netbsd-64": "0.14.39",
- "esbuild-openbsd-64": "0.14.39",
- "esbuild-sunos-64": "0.14.39",
- "esbuild-windows-32": "0.14.39",
- "esbuild-windows-64": "0.14.39",
- "esbuild-windows-arm64": "0.14.39"
- }
- },
- "node_modules/esbuild-android-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz",
- "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-android-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz",
- "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz",
- "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-darwin-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz",
- "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz",
- "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-freebsd-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz",
- "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-32": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz",
- "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz",
- "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz",
- "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz",
- "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-mips64le": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz",
- "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==",
- "cpu": [
- "mips64el"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-ppc64le": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz",
- "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-riscv64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz",
- "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==",
- "cpu": [
- "riscv64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-linux-s390x": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz",
- "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==",
- "cpu": [
- "s390x"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-netbsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz",
- "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-openbsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz",
- "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-sunos-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz",
- "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-windows-32": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz",
- "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-windows-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz",
- "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/esbuild-windows-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz",
- "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "node_modules/postcss": {
- "version": "8.4.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
- "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/react": {
- "version": "18.1.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
- "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.1.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
- "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.22.0"
- },
- "peerDependencies": {
- "react": "^18.1.0"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
- "dependencies": {
- "is-core-module": "^2.8.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/rollup": {
- "version": "2.74.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.74.1.tgz",
- "integrity": "sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==",
- "bin": {
- "rollup": "dist/bin/rollup"
- },
- "engines": {
- "node": ">=10.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
- "dependencies": {
- "tslib": "^1.9.0"
- },
- "engines": {
- "npm": ">=2.0.0"
- }
- },
- "node_modules/scheduler": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
- "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw=="
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2-1",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
- "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/vite": {
- "version": "2.9.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz",
- "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==",
- "dependencies": {
- "esbuild": "^0.14.27",
- "postcss": "^8.4.13",
- "resolve": "^1.22.0",
- "rollup": "^2.59.0"
- },
- "bin": {
- "vite": "bin/vite.js"
- },
- "engines": {
- "node": ">=12.2.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- },
- "peerDependencies": {
- "less": "*",
- "sass": "*",
- "stylus": "*"
- },
- "peerDependenciesMeta": {
- "less": {
- "optional": true
- },
- "sass": {
- "optional": true
- },
- "stylus": {
- "optional": true
- }
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "17.5.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
- "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.0.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
- "engines": {
- "node": ">=12"
- }
- }
- },
- "dependencies": {
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "concurrently": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.2.1.tgz",
- "integrity": "sha512-7cab/QyqipqghrVr9qZmoWbidu0nHsmxrpNqQ7r/67vfl1DWJElexehQnTH1p+87tDkihaAjM79xTZyBQh7HLw==",
- "requires": {
- "chalk": "^4.1.0",
- "date-fns": "^2.16.1",
- "lodash": "^4.17.21",
- "rxjs": "^6.6.3",
- "shell-quote": "^1.7.3",
- "spawn-command": "^0.0.2-1",
- "supports-color": "^8.1.0",
- "tree-kill": "^1.2.2",
- "yargs": "^17.3.1"
- }
- },
- "date-fns": {
- "version": "2.28.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.28.0.tgz",
- "integrity": "sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw=="
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
- },
- "esbuild": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz",
- "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==",
- "requires": {
- "esbuild-android-64": "0.14.39",
- "esbuild-android-arm64": "0.14.39",
- "esbuild-darwin-64": "0.14.39",
- "esbuild-darwin-arm64": "0.14.39",
- "esbuild-freebsd-64": "0.14.39",
- "esbuild-freebsd-arm64": "0.14.39",
- "esbuild-linux-32": "0.14.39",
- "esbuild-linux-64": "0.14.39",
- "esbuild-linux-arm": "0.14.39",
- "esbuild-linux-arm64": "0.14.39",
- "esbuild-linux-mips64le": "0.14.39",
- "esbuild-linux-ppc64le": "0.14.39",
- "esbuild-linux-riscv64": "0.14.39",
- "esbuild-linux-s390x": "0.14.39",
- "esbuild-netbsd-64": "0.14.39",
- "esbuild-openbsd-64": "0.14.39",
- "esbuild-sunos-64": "0.14.39",
- "esbuild-windows-32": "0.14.39",
- "esbuild-windows-64": "0.14.39",
- "esbuild-windows-arm64": "0.14.39"
- }
- },
- "esbuild-android-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.39.tgz",
- "integrity": "sha512-EJOu04p9WgZk0UoKTqLId9VnIsotmI/Z98EXrKURGb3LPNunkeffqQIkjS2cAvidh+OK5uVrXaIP229zK6GvhQ==",
- "optional": true
- },
- "esbuild-android-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.39.tgz",
- "integrity": "sha512-+twajJqO7n3MrCz9e+2lVOnFplRsaGRwsq1KL/uOy7xK7QdRSprRQcObGDeDZUZsacD5gUkk6OiHiYp6RzU3CA==",
- "optional": true
- },
- "esbuild-darwin-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz",
- "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==",
- "optional": true
- },
- "esbuild-darwin-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.39.tgz",
- "integrity": "sha512-/fcQ5UhE05OiT+bW5v7/up1bDsnvaRZPJxXwzXsMRrr7rZqPa85vayrD723oWMT64dhrgWeA3FIneF8yER0XTw==",
- "optional": true
- },
- "esbuild-freebsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.39.tgz",
- "integrity": "sha512-oMNH8lJI4wtgN5oxuFP7BQ22vgB/e3Tl5Woehcd6i2r6F3TszpCnNl8wo2d/KvyQ4zvLvCWAlRciumhQg88+kQ==",
- "optional": true
- },
- "esbuild-freebsd-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.39.tgz",
- "integrity": "sha512-1GHK7kwk57ukY2yI4ILWKJXaxfr+8HcM/r/JKCGCPziIVlL+Wi7RbJ2OzMcTKZ1HpvEqCTBT/J6cO4ZEwW4Ypg==",
- "optional": true
- },
- "esbuild-linux-32": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.39.tgz",
- "integrity": "sha512-g97Sbb6g4zfRLIxHgW2pc393DjnkTRMeq3N1rmjDUABxpx8SjocK4jLen+/mq55G46eE2TA0MkJ4R3SpKMu7dg==",
- "optional": true
- },
- "esbuild-linux-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.39.tgz",
- "integrity": "sha512-4tcgFDYWdI+UbNMGlua9u1Zhu0N5R6u9tl5WOM8aVnNX143JZoBZLpCuUr5lCKhnD0SCO+5gUyMfupGrHtfggQ==",
- "optional": true
- },
- "esbuild-linux-arm": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.39.tgz",
- "integrity": "sha512-t0Hn1kWVx5UpCzAJkKRfHeYOLyFnXwYynIkK54/h3tbMweGI7dj400D1k0Vvtj2u1P+JTRT9tx3AjtLEMmfVBQ==",
- "optional": true
- },
- "esbuild-linux-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.39.tgz",
- "integrity": "sha512-23pc8MlD2D6Px1mV8GMglZlKgwgNKAO8gsgsLLcXWSs9lQsCYkIlMo/2Ycfo5JrDIbLdwgP8D2vpfH2KcBqrDQ==",
- "optional": true
- },
- "esbuild-linux-mips64le": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.39.tgz",
- "integrity": "sha512-epwlYgVdbmkuRr5n4es3B+yDI0I2e/nxhKejT9H0OLxFAlMkeQZxSpxATpDc9m8NqRci6Kwyb/SfmD1koG2Zuw==",
- "optional": true
- },
- "esbuild-linux-ppc64le": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.39.tgz",
- "integrity": "sha512-W/5ezaq+rQiQBThIjLMNjsuhPHg+ApVAdTz2LvcuesZFMsJoQAW2hutoyg47XxpWi7aEjJGrkS26qCJKhRn3QQ==",
- "optional": true
- },
- "esbuild-linux-riscv64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.39.tgz",
- "integrity": "sha512-IS48xeokcCTKeQIOke2O0t9t14HPvwnZcy+5baG13Z1wxs9ZrC5ig5ypEQQh4QMKxURD5TpCLHw2W42CLuVZaA==",
- "optional": true
- },
- "esbuild-linux-s390x": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.39.tgz",
- "integrity": "sha512-zEfunpqR8sMomqXhNTFEKDs+ik7HC01m3M60MsEjZOqaywHu5e5682fMsqOlZbesEAAaO9aAtRBsU7CHnSZWyA==",
- "optional": true
- },
- "esbuild-netbsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.39.tgz",
- "integrity": "sha512-Uo2suJBSIlrZCe4E0k75VDIFJWfZy+bOV6ih3T4MVMRJh1lHJ2UyGoaX4bOxomYN3t+IakHPyEoln1+qJ1qYaA==",
- "optional": true
- },
- "esbuild-openbsd-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.39.tgz",
- "integrity": "sha512-secQU+EpgUPpYjJe3OecoeGKVvRMLeKUxSMGHnK+aK5uQM3n1FPXNJzyz1LHFOo0WOyw+uoCxBYdM4O10oaCAA==",
- "optional": true
- },
- "esbuild-sunos-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.39.tgz",
- "integrity": "sha512-qHq0t5gePEDm2nqZLb+35p/qkaXVS7oIe32R0ECh2HOdiXXkj/1uQI9IRogGqKkK+QjDG+DhwiUw7QoHur/Rwg==",
- "optional": true
- },
- "esbuild-windows-32": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.39.tgz",
- "integrity": "sha512-XPjwp2OgtEX0JnOlTgT6E5txbRp6Uw54Isorm3CwOtloJazeIWXuiwK0ONJBVb/CGbiCpS7iP2UahGgd2p1x+Q==",
- "optional": true
- },
- "esbuild-windows-64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.39.tgz",
- "integrity": "sha512-E2wm+5FwCcLpKsBHRw28bSYQw0Ikxb7zIMxw3OPAkiaQhLVr3dnVO8DofmbWhhf6b97bWzg37iSZ45ZDpLw7Ow==",
- "optional": true
- },
- "esbuild-windows-arm64": {
- "version": "0.14.39",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.39.tgz",
- "integrity": "sha512-sBZQz5D+Gd0EQ09tZRnz/PpVdLwvp/ufMtJ1iDFYddDaPpZXKqPyaxfYBLs3ueiaksQ26GGa7sci0OqFzNs7KA==",
- "optional": true
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "optional": true
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- }
- },
- "nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "postcss": {
- "version": "8.4.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
- "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
- "requires": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "react": {
- "version": "18.1.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.1.0.tgz",
- "integrity": "sha512-4oL8ivCz5ZEPyclFQXaNksK3adutVS8l2xzZU0cqEFrE9Sb7fC0EFK5uEk74wIreL1DERyjvsU915j1pcT2uEQ==",
- "requires": {
- "loose-envify": "^1.1.0"
- }
- },
- "react-dom": {
- "version": "18.1.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.1.0.tgz",
- "integrity": "sha512-fU1Txz7Budmvamp7bshe4Zi32d0ll7ect+ccxNu9FlObT605GOEB8BfO4tmRJ39R5Zj831VCpvQ05QPBW5yb+w==",
- "requires": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.22.0"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
- },
- "resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
- "requires": {
- "is-core-module": "^2.8.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "rollup": {
- "version": "2.74.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.74.1.tgz",
- "integrity": "sha512-K2zW7kV8Voua5eGkbnBtWYfMIhYhT9Pel2uhBk2WO5eMee161nPze/XRfvEQPFYz7KgrCCnmh2Wy0AMFLGGmMA==",
- "requires": {
- "fsevents": "~2.3.2"
- }
- },
- "rxjs": {
- "version": "6.6.7",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
- "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
- "requires": {
- "tslib": "^1.9.0"
- }
- },
- "scheduler": {
- "version": "0.22.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.22.0.tgz",
- "integrity": "sha512-6QAm1BgQI88NPYymgGQLCZgvep4FyePDWFpXVK+zNSUgHwlqpJy8VEh8Et0KxTACS4VWwMousBElAZOH9nkkoQ==",
- "requires": {
- "loose-envify": "^1.1.0"
- }
- },
- "shell-quote": {
- "version": "1.7.3",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz",
- "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw=="
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
- },
- "spawn-command": {
- "version": "0.0.2-1",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
- "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A="
- },
- "string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "requires": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "requires": {
- "has-flag": "^4.0.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
- },
- "tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A=="
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "vite": {
- "version": "2.9.9",
- "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.9.tgz",
- "integrity": "sha512-ffaam+NgHfbEmfw/Vuh6BHKKlI/XIAhxE5QSS7gFLIngxg171mg1P3a4LSRME0z2ZU1ScxoKzphkipcYwSD5Ew==",
- "requires": {
- "esbuild": "^0.14.27",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.13",
- "resolve": "^1.22.0",
- "rollup": "^2.59.0"
- }
- },
- "wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "requires": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
- },
- "yargs": {
- "version": "17.5.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
- "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.0.0"
- }
- },
- "yargs-parser": {
- "version": "21.0.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg=="
- }
- }
-}
diff --git a/example/package.json b/example/package.json
deleted file mode 100644
index 8295e1b..0000000
--- a/example/package.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "dependencies": {
- "concurrently": "^7.2.1",
- "react": "^18.1.0",
- "react-dom": "^18.1.0",
- "vite": "^2.9.9"
- }
-}
diff --git a/example/src/lustre_counter.gleam b/example/src/lustre_counter.gleam
deleted file mode 100644
index 25872a4..0000000
--- a/example/src/lustre_counter.gleam
+++ /dev/null
@@ -1,95 +0,0 @@
-import gleam/int
-import lustre
-import lustre/element.{button, div, p, span, text}
-import lustre/event.{dispatch, on_click}
-import lustre/cmd
-import gleam/map.{Map}
-import gleam/list
-import gleam/option
-
-pub fn main() {
- let app = lustre.application(#(init_state(), cmd.none()), update, render)
- lustre.start(app, "#app")
-}
-
-type State {
- State(ctr: Int, counters: Map(Int, Int))
-}
-
-fn init_state() {
- State(ctr: 2, counters: map.from_list([#(1, 0)]))
-}
-
-pub type Action {
- Add
- Remove(id: Int)
- Increment(id: Int)
- Decrement(id: Int)
-}
-
-fn update(state, action) {
- case action {
- Add -> #(
- State(
- ..state,
- ctr: state.ctr + 1,
- counters: state.counters
- |> map.insert(state.ctr, 0),
- ),
- cmd.none(),
- )
- Remove(id) -> #(
- State(
- ..state,
- counters: state.counters
- |> map.delete(id),
- ),
- cmd.none(),
- )
- Increment(id) -> #(
- State(
- ..state,
- counters: state.counters
- |> map.update(id, fn(opt_ctr) { option.unwrap(opt_ctr, 0) + 1 }),
- ),
- cmd.none(),
- )
- Decrement(id) -> #(
- State(
- ..state,
- counters: state.counters
- |> map.update(id, fn(opt_ctr) { option.unwrap(opt_ctr, 0) - 1 }),
- ),
- cmd.none(),
- )
- }
-}
-
-fn render(state) {
- let render_counter = fn(pair) {
- let #(id, value) = pair
- p(
- [],
- [
- button([on_click(dispatch(Decrement(id)))], [text("-")]),
- span([], [text(" "), text(int.to_string(value)), text(" ")]),
- button([on_click(dispatch(Increment(id)))], [text("+")]),
- span([], [text(" ")]),
- button([on_click(dispatch(Remove(id)))], [text("remove")]),
- ],
- )
- }
-
- div(
- [],
- [
- div(
- [],
- state.counters
- |> map.to_list
- |> list.map(render_counter),
- ),
- p([], [button([on_click(dispatch(Add))], [text("add")])]),
- ],
- )
-}
diff --git a/gleam.toml b/gleam.toml
index d044e12..57f5069 100644
--- a/gleam.toml
+++ b/gleam.toml
@@ -12,8 +12,7 @@ repository = { type = "github", user = "hayleigh-dot-dev", repo = "gleam-lustre"
links = [{ title = "Website", href = "https://hayleigh-dot-dev.github.io/gleam-lustre" }]
[dependencies]
-gleam_stdlib = "~> 0.28"
-gleam_javascript = "~> 0.4"
+gleam_stdlib = "~> 0.29"
[dev-dependencies]
gleeunit = "~> 0.6"
diff --git a/manifest.toml b/manifest.toml
index b7394b2..00a6ec8 100644
--- a/manifest.toml
+++ b/manifest.toml
@@ -2,12 +2,10 @@
# You typically do not need to edit this file
packages = [
- { name = "gleam_javascript", version = "0.4.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_javascript", source = "hex", outer_checksum = "E0E8D33461776BFCC124838183F85E430D3A71D7318F210C9DE0CFB52E5AC8DE" },
- { name = "gleam_stdlib", version = "0.28.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "1BB6A3E53F7576B9F5C4E5D4AE16487E526BE383B03CBF4068C7DFC77CF38A1C" },
+ { name = "gleam_stdlib", version = "0.29.2", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "B296BF9B8AA384A6B64CD49F333016A9DCA6AC73A95400D17F2271E072EFF986" },
{ name = "gleeunit", version = "0.10.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "ECEA2DE4BE6528D36AFE74F42A21CDF99966EC36D7F25DEB34D47DD0F7977BAF" },
]
[requirements]
-gleam_javascript = "~> 0.4"
-gleam_stdlib = "~> 0.28"
+gleam_stdlib = "~> 0.29"
gleeunit = "~> 0.6"
diff --git a/package-lock.json b/package-lock.json
index 654bb1e..7fafc3d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,3581 +1,200 @@
{
- "name": "gleam-lustre",
- "version": "1.3.0",
+ "name": "lustre-core",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
- "name": "gleam-lustre",
- "version": "1.3.0",
- "license": "MIT",
- "dependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
- },
"devDependencies": {
- "@monaco-editor/react": "^4.4.5",
- "chokidar-cli": "^3.0.0",
- "concurrently": "^8.0.0",
- "http-server": "^14.1.0",
- "parcel": "^2.8.0",
- "process": "^0.11.10"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.21.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz",
- "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
- "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
+ "vite": "^4.4.2"
}
},
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/source-map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz",
- "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.18",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
- "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.14",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
- "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
- "dev": true
- },
- "node_modules/@lezer/common": {
- "version": "0.15.12",
- "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz",
- "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==",
- "dev": true
- },
- "node_modules/@lezer/lr": {
- "version": "0.15.8",
- "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz",
- "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==",
- "dev": true,
- "dependencies": {
- "@lezer/common": "^0.15.0"
- }
- },
- "node_modules/@lmdb/lmdb-darwin-arm64": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.5.2.tgz",
- "integrity": "sha512-+F8ioQIUN68B4UFiIBYu0QQvgb9FmlKw2ctQMSBfW2QBrZIxz9vD9jCGqTCPqZBRbPHAS/vG1zSXnKqnS2ch/A==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.11",
"cpu": [
"arm64"
],
"dev": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
- ]
- },
- "node_modules/@mischnic/json-sourcemap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz",
- "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==",
- "dev": true,
- "dependencies": {
- "@lezer/common": "^0.15.7",
- "@lezer/lr": "^0.15.4",
- "json5": "^2.2.1"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/@monaco-editor/loader": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@monaco-editor/loader/-/loader-1.3.2.tgz",
- "integrity": "sha512-BTDbpHl3e47r3AAtpfVFTlAi7WXv4UQ/xZmz8atKl4q7epQV5e7+JbigFDViWF71VBi4IIBdcWP57Hj+OWuc9g==",
- "dev": true,
- "dependencies": {
- "state-local": "^1.0.6"
- },
- "peerDependencies": {
- "monaco-editor": ">= 0.21.0 < 1"
- }
- },
- "node_modules/@monaco-editor/react": {
- "version": "4.4.5",
- "resolved": "https://registry.npmjs.org/@monaco-editor/react/-/react-4.4.5.tgz",
- "integrity": "sha512-IImtzU7sRc66OOaQVCG+5PFHkSWnnhrUWGBuH6zNmH2h0YgmAhcjHZQc/6MY9JWEbUtVF1WPBMJ9u1XuFbRrVA==",
- "dev": true,
- "dependencies": {
- "@monaco-editor/loader": "^1.3.2",
- "prop-types": "^15.7.2"
- },
- "peerDependencies": {
- "monaco-editor": ">= 0.25.0 < 1",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz",
- "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==",
- "cpu": [
- "arm64"
],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@parcel/bundler-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz",
- "integrity": "sha512-yJvRsNWWu5fVydsWk3O2L4yIy3UZiKWO2cPDukGOIWMgp/Vbpp+2Ct5IygVRtE22bnseW/E/oe0PV3d2IkEJGg==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/cache": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.8.3.tgz",
- "integrity": "sha512-k7xv5vSQrJLdXuglo+Hv3yF4BCSs1tQ/8Vbd6CHTkOhf7LcGg6CPtLw053R/KdMpd/4GPn0QrAsOLdATm1ELtQ==",
- "dev": true,
- "dependencies": {
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/utils": "2.8.3",
- "lmdb": "2.5.2"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/codeframe": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.8.3.tgz",
- "integrity": "sha512-FE7sY53D6n/+2Pgg6M9iuEC6F5fvmyBkRE4d9VdnOoxhTXtkEqpqYgX7RJ12FAQwNlxKq4suBJQMgQHMF2Kjeg==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/compressor-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.8.3.tgz",
- "integrity": "sha512-bVDsqleBUxRdKMakWSlWC9ZjOcqDKE60BE+Gh3JSN6WJrycJ02P5wxjTVF4CStNP/G7X17U+nkENxSlMG77ySg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/config-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.8.3.tgz",
- "integrity": "sha512-o/A/mbrO6X/BfGS65Sib8d6SSG45NYrNooNBkH/o7zbOBSRQxwyTlysleK1/3Wa35YpvFyLOwgfakqCtbGy4fw==",
- "dev": true,
- "dependencies": {
- "@parcel/bundler-default": "2.8.3",
- "@parcel/compressor-raw": "2.8.3",
- "@parcel/namer-default": "2.8.3",
- "@parcel/optimizer-css": "2.8.3",
- "@parcel/optimizer-htmlnano": "2.8.3",
- "@parcel/optimizer-image": "2.8.3",
- "@parcel/optimizer-svgo": "2.8.3",
- "@parcel/optimizer-terser": "2.8.3",
- "@parcel/packager-css": "2.8.3",
- "@parcel/packager-html": "2.8.3",
- "@parcel/packager-js": "2.8.3",
- "@parcel/packager-raw": "2.8.3",
- "@parcel/packager-svg": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/resolver-default": "2.8.3",
- "@parcel/runtime-browser-hmr": "2.8.3",
- "@parcel/runtime-js": "2.8.3",
- "@parcel/runtime-react-refresh": "2.8.3",
- "@parcel/runtime-service-worker": "2.8.3",
- "@parcel/transformer-babel": "2.8.3",
- "@parcel/transformer-css": "2.8.3",
- "@parcel/transformer-html": "2.8.3",
- "@parcel/transformer-image": "2.8.3",
- "@parcel/transformer-js": "2.8.3",
- "@parcel/transformer-json": "2.8.3",
- "@parcel/transformer-postcss": "2.8.3",
- "@parcel/transformer-posthtml": "2.8.3",
- "@parcel/transformer-raw": "2.8.3",
- "@parcel/transformer-react-refresh-wrap": "2.8.3",
- "@parcel/transformer-svg": "2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.8.3.tgz",
- "integrity": "sha512-Euf/un4ZAiClnlUXqPB9phQlKbveU+2CotZv7m7i+qkgvFn5nAGnrV4h1OzQU42j9dpgOxWi7AttUDMrvkbhCQ==",
- "dev": true,
- "dependencies": {
- "@mischnic/json-sourcemap": "^0.1.0",
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/graph": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "abortcontroller-polyfill": "^1.1.9",
- "base-x": "^3.0.8",
- "browserslist": "^4.6.6",
- "clone": "^2.1.1",
- "dotenv": "^7.0.0",
- "dotenv-expand": "^5.1.0",
- "json5": "^2.2.0",
- "msgpackr": "^1.5.4",
- "nullthrows": "^1.1.1",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/diagnostic": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.8.3.tgz",
- "integrity": "sha512-u7wSzuMhLGWZjVNYJZq/SOViS3uFG0xwIcqXw12w54Uozd6BH8JlhVtVyAsq9kqnn7YFkw6pXHqAo5Tzh4FqsQ==",
- "dev": true,
- "dependencies": {
- "@mischnic/json-sourcemap": "^0.1.0",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/events": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.8.3.tgz",
- "integrity": "sha512-hoIS4tAxWp8FJk3628bsgKxEvR7bq2scCVYHSqZ4fTi/s0+VymEATrRCUqf+12e5H47uw1/ZjoqrGtBI02pz4w==",
- "dev": true,
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/fs": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.8.3.tgz",
- "integrity": "sha512-y+i+oXbT7lP0e0pJZi/YSm1vg0LDsbycFuHZIL80pNwdEppUAtibfJZCp606B7HOjMAlNZOBo48e3hPG3d8jgQ==",
- "dev": true,
- "dependencies": {
- "@parcel/fs-search": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/watcher": "^2.0.7",
- "@parcel/workers": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/fs-search": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.8.3.tgz",
- "integrity": "sha512-DJBT2N8knfN7Na6PP2mett3spQLTqxFrvl0gv+TJRp61T8Ljc4VuUTb0hqBj+belaASIp3Q+e8+SgaFQu7wLiQ==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/graph": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.8.3.tgz",
- "integrity": "sha512-26GL8fYZPdsRhSXCZ0ZWliloK6DHlMJPWh6Z+3VVZ5mnDSbYg/rRKWmrkhnr99ZWmL9rJsv4G74ZwvDEXTMPBg==",
- "dev": true,
- "dependencies": {
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/hash": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.8.3.tgz",
- "integrity": "sha512-FVItqzjWmnyP4ZsVgX+G00+6U2IzOvqDtdwQIWisCcVoXJFCqZJDy6oa2qDDFz96xCCCynjRjPdQx2jYBCpfYw==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3",
- "xxhash-wasm": "^0.4.2"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/logger": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.8.3.tgz",
- "integrity": "sha512-Kpxd3O/Vs7nYJIzkdmB6Bvp3l/85ydIxaZaPfGSGTYOfaffSOTkhcW9l6WemsxUrlts4za6CaEWcc4DOvaMOPA==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/markdown-ansi": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.8.3.tgz",
- "integrity": "sha512-4v+pjyoh9f5zuU/gJlNvNFGEAb6J90sOBwpKJYJhdWXLZMNFCVzSigxrYO+vCsi8G4rl6/B2c0LcwIMjGPHmFQ==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/namer-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.8.3.tgz",
- "integrity": "sha512-tJ7JehZviS5QwnxbARd8Uh63rkikZdZs1QOyivUhEvhN+DddSAVEdQLHGPzkl3YRk0tjFhbqo+Jci7TpezuAMw==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/node-resolver-core": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.8.3.tgz",
- "integrity": "sha512-12YryWcA5Iw2WNoEVr/t2HDjYR1iEzbjEcxfh1vaVDdZ020PiGw67g5hyIE/tsnG7SRJ0xdRx1fQ2hDgED+0Ww==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/optimizer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.8.3.tgz",
- "integrity": "sha512-JotGAWo8JhuXsQDK0UkzeQB0UR5hDAKvAviXrjqB4KM9wZNLhLleeEAW4Hk8R9smCeQFP6Xg/N/NkLDpqMwT3g==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "browserslist": "^4.6.6",
- "lightningcss": "^1.16.1",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/optimizer-htmlnano": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.8.3.tgz",
- "integrity": "sha512-L8/fHbEy8Id2a2E0fwR5eKGlv9VYDjrH9PwdJE9Za9v1O/vEsfl/0T/79/x129l5O0yB6EFQkFa20MiK3b+vOg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "htmlnano": "^2.0.0",
- "nullthrows": "^1.1.1",
- "posthtml": "^0.16.5",
- "svgo": "^2.4.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/optimizer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.8.3.tgz",
- "integrity": "sha512-SD71sSH27SkCDNUNx9A3jizqB/WIJr3dsfp+JZGZC42tpD/Siim6Rqy9M4To/BpMMQIIiEXa5ofwS+DgTEiEHQ==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/optimizer-svgo": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.8.3.tgz",
- "integrity": "sha512-9KQed99NZnQw3/W4qBYVQ7212rzA9EqrQG019TIWJzkA9tjGBMIm2c/nXpK1tc3hQ3e7KkXkFCQ3C+ibVUnHNA==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "svgo": "^2.4.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/optimizer-terser": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.8.3.tgz",
- "integrity": "sha512-9EeQlN6zIeUWwzrzu6Q2pQSaYsYGah8MtiQ/hog9KEPlYTP60hBv/+utDyYEHSQhL7y5ym08tPX5GzBvwAD/dA==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "terser": "^5.2.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/package-manager": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.8.3.tgz",
- "integrity": "sha512-tIpY5pD2lH53p9hpi++GsODy6V3khSTX4pLEGuMpeSYbHthnOViobqIlFLsjni+QA1pfc8NNNIQwSNdGjYflVA==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/packager-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.8.3.tgz",
- "integrity": "sha512-WyvkMmsurlHG8d8oUVm7S+D+cC/T3qGeqogb7sTI52gB6uiywU7lRCizLNqGFyFGIxcVTVHWnSHqItBcLN76lA==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/packager-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.8.3.tgz",
- "integrity": "sha512-OhPu1Hx1RRKJodpiu86ZqL8el2Aa4uhBHF6RAL1Pcrh2EhRRlPf70Sk0tC22zUpYL7es+iNKZ/n0Rl+OWSHWEw==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "posthtml": "^0.16.5"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/packager-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.8.3.tgz",
- "integrity": "sha512-0pGKC3Ax5vFuxuZCRB+nBucRfFRz4ioie19BbDxYnvBxrd4M3FIu45njf6zbBYsI9eXqaDnL1b3DcZJfYqtIzw==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "globals": "^13.2.0",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/packager-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.8.3.tgz",
- "integrity": "sha512-BA6enNQo1RCnco9MhkxGrjOk59O71IZ9DPKu3lCtqqYEVd823tXff2clDKHK25i6cChmeHu6oB1Rb73hlPqhUA==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/packager-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.8.3.tgz",
- "integrity": "sha512-mvIoHpmv5yzl36OjrklTDFShLUfPFTwrmp1eIwiszGdEBuQaX7JVI3Oo2jbVQgcN4W7J6SENzGQ3Q5hPTW3pMw==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "posthtml": "^0.16.4"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/plugin": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.8.3.tgz",
- "integrity": "sha512-jZ6mnsS4D9X9GaNnvrixDQwlUQJCohDX2hGyM0U0bY2NWU8Km97SjtoCpWjq+XBCx/gpC4g58+fk9VQeZq2vlw==",
- "dev": true,
- "dependencies": {
- "@parcel/types": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/reporter-cli": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.8.3.tgz",
- "integrity": "sha512-3sJkS6tFFzgIOz3u3IpD/RsmRxvOKKiQHOTkiiqRt1l44mMDGKS7zANRnJYsQzdCsgwc9SOP30XFgJwtoVlMbw==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chalk": "^4.1.0",
- "term-size": "^2.2.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/reporter-dev-server": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.8.3.tgz",
- "integrity": "sha512-Y8C8hzgzTd13IoWTj+COYXEyCkXfmVJs3//GDBsH22pbtSFMuzAZd+8J9qsCo0EWpiDow7V9f1LischvEh3FbQ==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/resolver-default": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.8.3.tgz",
- "integrity": "sha512-k0B5M/PJ+3rFbNj4xZSBr6d6HVIe6DH/P3dClLcgBYSXAvElNDfXgtIimbjCyItFkW9/BfcgOVKEEIZOeySH/A==",
- "dev": true,
- "dependencies": {
- "@parcel/node-resolver-core": "2.8.3",
- "@parcel/plugin": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/runtime-browser-hmr": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.8.3.tgz",
- "integrity": "sha512-2O1PYi2j/Q0lTyGNV3JdBYwg4rKo6TEVFlYGdd5wCYU9ZIN9RRuoCnWWH2qCPj3pjIVtBeppYxzfVjPEHINWVg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/runtime-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.8.3.tgz",
- "integrity": "sha512-IRja0vNKwvMtPgIqkBQh0QtRn0XcxNC8HU1jrgWGRckzu10qJWO+5ULgtOeR4pv9krffmMPqywGXw6l/gvJKYQ==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/runtime-react-refresh": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.8.3.tgz",
- "integrity": "sha512-2v/qFKp00MfG0234OdOgQNAo6TLENpFYZMbVbAsPMY9ITiqG73MrEsrGXVoGbYiGTMB/Toer/lSWlJxtacOCuA==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "react-error-overlay": "6.0.9",
- "react-refresh": "^0.9.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/runtime-service-worker": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.8.3.tgz",
- "integrity": "sha512-/Skkw+EeRiwzOJso5fQtK8c9b452uWLNhQH1ISTodbmlcyB4YalAiSsyHCtMYD0c3/t5Sx4ZS7vxBAtQd0RvOw==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/source-map": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
- "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": "^12.18.3 || >=14"
- }
- },
- "node_modules/@parcel/transformer-babel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.8.3.tgz",
- "integrity": "sha512-L6lExfpvvC7T/g3pxf3CIJRouQl+sgrSzuWQ0fD4PemUDHvHchSP4SNUVnd6gOytF3Y1KpnEZIunQGi5xVqQCQ==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "browserslist": "^4.6.6",
- "json5": "^2.2.0",
- "nullthrows": "^1.1.1",
- "semver": "^5.7.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-css": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.8.3.tgz",
- "integrity": "sha512-xTqFwlSXtnaYen9ivAgz+xPW7yRl/u4QxtnDyDpz5dr8gSeOpQYRcjkd4RsYzKsWzZcGtB5EofEk8ayUbWKEUg==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "browserslist": "^4.6.6",
- "lightningcss": "^1.16.1",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-html": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.8.3.tgz",
- "integrity": "sha512-kIZO3qsMYTbSnSpl9cnZog+SwL517ffWH54JeB410OSAYF1ouf4n5v9qBnALZbuCCmPwJRGs4jUtE452hxwN4g==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "nullthrows": "^1.1.1",
- "posthtml": "^0.16.5",
- "posthtml-parser": "^0.10.1",
- "posthtml-render": "^3.0.0",
- "semver": "^5.7.1",
- "srcset": "4"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-image": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.8.3.tgz",
- "integrity": "sha512-cO4uptcCGTi5H6bvTrAWEFUsTNhA4kCo8BSvRSCHA2sf/4C5tGQPHt3JhdO0GQLPwZRCh/R41EkJs5HZ8A8DAg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/transformer-js": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.8.3.tgz",
- "integrity": "sha512-9Qd6bib+sWRcpovvzvxwy/PdFrLUXGfmSW9XcVVG8pvgXsZPFaNjnNT8stzGQj1pQiougCoxMY4aTM5p1lGHEQ==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/utils": "2.8.3",
- "@parcel/workers": "2.8.3",
- "@swc/helpers": "^0.4.12",
- "browserslist": "^4.6.6",
- "detect-libc": "^1.0.3",
- "nullthrows": "^1.1.1",
- "regenerator-runtime": "^0.13.7",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@parcel/transformer-json": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.8.3.tgz",
- "integrity": "sha512-B7LmVq5Q7bZO4ERb6NHtRuUKWGysEeaj9H4zelnyBv+wLgpo4f5FCxSE1/rTNmP9u1qHvQ3scGdK6EdSSokGPg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "json5": "^2.2.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-postcss": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.8.3.tgz",
- "integrity": "sha512-e8luB/poIlz6jBsD1Izms+6ElbyzuoFVa4lFVLZnTAChI3UxPdt9p/uTsIO46HyBps/Bk8ocvt3J4YF84jzmvg==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "clone": "^2.1.1",
- "nullthrows": "^1.1.1",
- "postcss-value-parser": "^4.2.0",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-posthtml": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.8.3.tgz",
- "integrity": "sha512-pkzf9Smyeaw4uaRLsT41RGrPLT5Aip8ZPcntawAfIo+KivBQUV0erY1IvHYjyfFzq1ld/Fo2Ith9He6mxpPifA==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "nullthrows": "^1.1.1",
- "posthtml": "^0.16.5",
- "posthtml-parser": "^0.10.1",
- "posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-raw": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.8.3.tgz",
- "integrity": "sha512-G+5cXnd2/1O3nV/pgRxVKZY/HcGSseuhAe71gQdSQftb8uJEURyUHoQ9Eh0JUD3MgWh9V+nIKoyFEZdf9T0sUQ==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3"
- },
"engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-react-refresh-wrap": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.8.3.tgz",
- "integrity": "sha512-q8AAoEvBnCf/nPvgOwFwKZfEl/thwq7c2duxXkhl+tTLDRN2vGmyz4355IxCkavSX+pLWSQ5MexklSEeMkgthg==",
- "dev": true,
- "dependencies": {
- "@parcel/plugin": "2.8.3",
- "@parcel/utils": "2.8.3",
- "react-refresh": "^0.9.0"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/transformer-svg": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.8.3.tgz",
- "integrity": "sha512-3Zr/gBzxi1ZH1fftH/+KsZU7w5GqkmxlB0ZM8ovS5E/Pl1lq1t0xvGJue9m2VuQqP8Mxfpl5qLFmsKlhaZdMIQ==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/plugin": "2.8.3",
- "nullthrows": "^1.1.1",
- "posthtml": "^0.16.5",
- "posthtml-parser": "^0.10.1",
- "posthtml-render": "^3.0.0",
- "semver": "^5.7.1"
- },
- "engines": {
- "node": ">= 12.0.0",
- "parcel": "^2.8.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/types": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.8.3.tgz",
- "integrity": "sha512-FECA1FB7+0UpITKU0D6TgGBpGxYpVSMNEENZbSJxFSajNy3wrko+zwBKQmFOLOiPcEtnGikxNs+jkFWbPlUAtw==",
- "dev": true,
- "dependencies": {
- "@parcel/cache": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "@parcel/workers": "2.8.3",
- "utility-types": "^3.10.0"
- }
- },
- "node_modules/@parcel/utils": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.8.3.tgz",
- "integrity": "sha512-IhVrmNiJ+LOKHcCivG5dnuLGjhPYxQ/IzbnF2DKNQXWBTsYlHkJZpmz7THoeLtLliGmSOZ3ZCsbR8/tJJKmxjA==",
- "dev": true,
- "dependencies": {
- "@parcel/codeframe": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/hash": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/markdown-ansi": "2.8.3",
- "@parcel/source-map": "^2.1.1",
- "chalk": "^4.1.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
+ "node": ">=12"
}
},
- "node_modules/@parcel/watcher": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.1.0.tgz",
- "integrity": "sha512-8s8yYjd19pDSsBpbkOHnT6Z2+UJSuLQx61pCFM0s5wSRvKCEMDjd/cHY3/GI1szHIWbpXpsJdg3V6ISGGx9xDw==",
+ "node_modules/esbuild": {
+ "version": "0.18.11",
"dev": true,
"hasInstallScript": true,
- "dependencies": {
- "is-glob": "^4.0.3",
- "micromatch": "^4.0.5",
- "node-addon-api": "^3.2.1",
- "node-gyp-build": "^4.3.0"
- },
- "engines": {
- "node": ">= 10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/@parcel/workers": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.8.3.tgz",
- "integrity": "sha512-+AxBnKgjqVpUHBcHLWIHcjYgKIvHIpZjN33mG5LG9XXvrZiqdWvouEzqEXlVLq5VzzVbKIQQcmsvRy138YErkg==",
- "dev": true,
- "dependencies": {
- "@parcel/diagnostic": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/types": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chrome-trace-event": "^1.0.2",
- "nullthrows": "^1.1.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "peerDependencies": {
- "@parcel/core": "^2.8.3"
- }
- },
- "node_modules/@swc/helpers": {
- "version": "0.4.14",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz",
- "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "node_modules/abortcontroller-polyfill": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz",
- "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==",
- "dev": true
- },
- "node_modules/acorn": {
- "version": "8.8.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
- "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
- "dev": true,
+ "license": "MIT",
"bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/async": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
- "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.14"
- }
- },
- "node_modules/base-x": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
- "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "5.1.2"
+ "node": ">=12"
},
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/basic-auth/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.11",
+ "@esbuild/android-arm64": "0.18.11",
+ "@esbuild/android-x64": "0.18.11",
+ "@esbuild/darwin-arm64": "0.18.11",
+ "@esbuild/darwin-x64": "0.18.11",
+ "@esbuild/freebsd-arm64": "0.18.11",
+ "@esbuild/freebsd-x64": "0.18.11",
+ "@esbuild/linux-arm": "0.18.11",
+ "@esbuild/linux-arm64": "0.18.11",
+ "@esbuild/linux-ia32": "0.18.11",
+ "@esbuild/linux-loong64": "0.18.11",
+ "@esbuild/linux-mips64el": "0.18.11",
+ "@esbuild/linux-ppc64": "0.18.11",
+ "@esbuild/linux-riscv64": "0.18.11",
+ "@esbuild/linux-s390x": "0.18.11",
+ "@esbuild/linux-x64": "0.18.11",
+ "@esbuild/netbsd-x64": "0.18.11",
+ "@esbuild/openbsd-x64": "0.18.11",
+ "@esbuild/sunos-x64": "0.18.11",
+ "@esbuild/win32-arm64": "0.18.11",
+ "@esbuild/win32-ia32": "0.18.11",
+ "@esbuild/win32-x64": "0.18.11"
}
},
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "node_modules/fsevents": {
+ "version": "2.3.2",
"dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=8"
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/browserslist": {
- "version": "4.21.5",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
- "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
+ "node_modules/nanoid": {
+ "version": "3.3.6",
"dev": true,
"funding": [
{
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
- "dependencies": {
- "caniuse-lite": "^1.0.30001449",
- "electron-to-chromium": "^1.4.284",
- "node-releases": "^2.0.8",
- "update-browserslist-db": "^1.0.10"
- },
+ "license": "MIT",
"bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "nanoid": "bin/nanoid.cjs"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true,
"engines": {
- "node": ">=6"
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "node_modules/picocolors": {
+ "version": "1.0.0",
"dev": true,
- "engines": {
- "node": ">=6"
- }
+ "license": "ISC"
},
- "node_modules/caniuse-lite": {
- "version": "1.0.30001474",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz",
- "integrity": "sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q==",
+ "node_modules/postcss": {
+ "version": "8.4.25",
"dev": true,
"funding": [
{
"type": "opencollective",
- "url": "https://opencollective.com/browserslist"
+ "url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ "url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
- ]
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
],
+ "license": "MIT",
"dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/chokidar-cli": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/chokidar-cli/-/chokidar-cli-3.0.0.tgz",
- "integrity": "sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==",
- "dev": true,
- "dependencies": {
- "chokidar": "^3.5.2",
- "lodash.debounce": "^4.0.8",
- "lodash.throttle": "^4.1.1",
- "yargs": "^13.3.0"
- },
- "bin": {
- "chokidar": "index.js"
- },
- "engines": {
- "node": ">= 8.10.0"
- }
- },
- "node_modules/chrome-trace-event": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
- "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
- "dev": true,
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "dependencies": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "node_modules/clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
- "dev": true,
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^10 || ^12 || >=14"
}
},
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "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==",
+ "node_modules/rollup": {
+ "version": "3.26.2",
"dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/concurrently": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz",
- "integrity": "sha512-Sh8bGQMEL0TAmAm2meAXMjcASHZa7V0xXQVDBLknCPa9TPtkY9yYs+0cnGGgfdkW0SV1Mlg+hVGfXcoI8d3MJA==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.1.2",
- "date-fns": "^2.29.3",
- "lodash": "^4.17.21",
- "rxjs": "^7.8.0",
- "shell-quote": "^1.8.0",
- "spawn-command": "0.0.2-1",
- "supports-color": "^8.1.1",
- "tree-kill": "^1.2.2",
- "yargs": "^17.7.1"
- },
+ "license": "MIT",
"bin": {
- "conc": "dist/bin/concurrently.js",
- "concurrently": "dist/bin/concurrently.js"
- },
- "engines": {
- "node": "^14.13.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/concurrently/node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/concurrently/node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/concurrently/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/concurrently/node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/concurrently/node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/concurrently/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/concurrently/node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/concurrently/node_modules/yargs": {
- "version": "17.7.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
- "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/concurrently/node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/corser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz",
- "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/cosmiconfig": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
- "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "dev": true,
- "dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.2.1",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.10.0"
+ "rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/css-select": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
- "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.0.1",
- "domhandler": "^4.3.1",
- "domutils": "^2.8.0",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tree": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
- "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.14",
- "source-map": "^0.6.1"
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
},
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/csso": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
- "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
- "dev": true,
- "dependencies": {
- "css-tree": "^1.1.2"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/date-fns": {
- "version": "2.29.3",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
- "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
- "dev": true,
- "engines": {
- "node": ">=0.11"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/date-fns"
- }
- },
- "node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
}
},
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
- "dev": true,
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/dom-serializer": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
- "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.0",
- "entities": "^2.0.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/dom-serializer/node_modules/entities": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
- "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
- "dev": true,
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
- "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.2.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
- "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^1.0.1",
- "domelementtype": "^2.2.0",
- "domhandler": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dotenv": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
- "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
- "dev": true
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.355",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.355.tgz",
- "integrity": "sha512-056hxzEE4l667YeOccgjhRr5fTiwZ6EIJ4FpzGps4k3YcS8iAhiaBYUBrv5E2LDQJsussscv9EEUwAYKnv+ZKg==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "node_modules/entities": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
- "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
- "dev": true
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.0.tgz",
- "integrity": "sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-port": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz",
- "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "node_modules/vite": {
+ "version": "4.4.2",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-glob": "^4.0.1"
+ "esbuild": "^0.18.10",
+ "postcss": "^8.4.24",
+ "rollup": "^3.25.2"
},
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/globals": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
+ "bin": {
+ "vite": "bin/vite.js"
},
"engines": {
- "node": ">=8"
+ "node": "^14.18.0 || >=16.0.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
+ "url": "https://github.com/vitejs/vite?sponsor=1"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/html-encoding-sniffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz",
- "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^2.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/htmlnano": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.3.tgz",
- "integrity": "sha512-S4PGGj9RbdgW8LhbILNK7W9JhmYP8zmDY7KDV/8eCiJBQJlbmltp5I0gv8c5ntLljfdxxfmJ+UJVSqyH4mb41A==",
- "dev": true,
- "dependencies": {
- "cosmiconfig": "^7.0.1",
- "posthtml": "^0.16.5",
- "timsort": "^0.3.0"
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
},
"peerDependencies": {
- "cssnano": "^5.0.11",
- "postcss": "^8.3.11",
- "purgecss": "^5.0.0",
- "relateurl": "^0.2.7",
- "srcset": "4.0.0",
- "svgo": "^2.8.0",
- "terser": "^5.10.0",
- "uncss": "^0.17.3"
+ "@types/node": ">= 14",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
},
"peerDependenciesMeta": {
- "cssnano": {
+ "@types/node": {
"optional": true
},
- "postcss": {
+ "less": {
"optional": true
},
- "purgecss": {
+ "lightningcss": {
"optional": true
},
- "relateurl": {
+ "sass": {
"optional": true
},
- "srcset": {
+ "stylus": {
"optional": true
},
- "svgo": {
+ "sugarss": {
"optional": true
},
"terser": {
"optional": true
- },
- "uncss": {
- "optional": true
- }
- }
- },
- "node_modules/htmlparser2": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
- "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
- "dev": true,
- "funding": [
- "https://github.com/fb55/htmlparser2?sponsor=1",
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ],
- "dependencies": {
- "domelementtype": "^2.0.1",
- "domhandler": "^4.2.2",
- "domutils": "^2.8.0",
- "entities": "^3.0.1"
- }
- },
- "node_modules/http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dev": true,
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-server": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/http-server/-/http-server-14.1.0.tgz",
- "integrity": "sha512-5lYsIcZtf6pdR8tCtzAHTWrAveo4liUlJdWc7YafwK/maPgYHs+VNP6KpCClmUnSorJrARVMXqtT055zBv11Yg==",
- "dev": true,
- "dependencies": {
- "basic-auth": "^2.0.1",
- "chalk": "^4.1.2",
- "corser": "^2.0.1",
- "he": "^1.2.0",
- "html-encoding-sniffer": "^3.0.0",
- "http-proxy": "^1.18.1",
- "mime": "^1.6.0",
- "minimist": "^1.2.5",
- "opener": "^1.5.1",
- "portfinder": "^1.0.28",
- "secure-compare": "3.0.1",
- "union": "~0.5.0",
- "url-join": "^4.0.1"
- },
- "bin": {
- "http-server": "bin/http-server"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/iconv-lite": {
- "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,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/import-fresh": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
- "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-json": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz",
- "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==",
- "dev": true
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lightningcss": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.19.0.tgz",
- "integrity": "sha512-yV5UR7og+Og7lQC+70DA7a8ta1uiOPnWPJfxa0wnxylev5qfo4P+4iMpzWAdYWOca4jdNQZii+bDL/l+4hUXIA==",
- "dev": true,
- "dependencies": {
- "detect-libc": "^1.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-darwin-arm64": "1.19.0",
- "lightningcss-darwin-x64": "1.19.0",
- "lightningcss-linux-arm-gnueabihf": "1.19.0",
- "lightningcss-linux-arm64-gnu": "1.19.0",
- "lightningcss-linux-arm64-musl": "1.19.0",
- "lightningcss-linux-x64-gnu": "1.19.0",
- "lightningcss-linux-x64-musl": "1.19.0",
- "lightningcss-win32-x64-msvc": "1.19.0"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.19.0.tgz",
- "integrity": "sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
- },
- "node_modules/lmdb": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.5.2.tgz",
- "integrity": "sha512-V5V5Xa2Hp9i2XsbDALkBTeHXnBXh/lEmk9p22zdr7jtuOIY9TGhjK6vAvTpOOx9IKU4hJkRWZxn/HsvR1ELLtA==",
- "dev": true,
- "hasInstallScript": true,
- "dependencies": {
- "msgpackr": "^1.5.4",
- "node-addon-api": "^4.3.0",
- "node-gyp-build-optional-packages": "5.0.3",
- "ordered-binary": "^1.2.4",
- "weak-lru-cache": "^1.2.2"
- },
- "optionalDependencies": {
- "@lmdb/lmdb-darwin-arm64": "2.5.2",
- "@lmdb/lmdb-darwin-x64": "2.5.2",
- "@lmdb/lmdb-linux-arm": "2.5.2",
- "@lmdb/lmdb-linux-arm64": "2.5.2",
- "@lmdb/lmdb-linux-x64": "2.5.2",
- "@lmdb/lmdb-win32-x64": "2.5.2"
- }
- },
- "node_modules/lmdb/node_modules/node-addon-api": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
- "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==",
- "dev": true
- },
- "node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=",
- "dev": true
- },
- "node_modules/lodash.throttle": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
- "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=",
- "dev": true
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/mdn-data": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
- "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
- "dev": true
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true,
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
- "dev": true
- },
- "node_modules/mkdirp": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
- "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/monaco-editor": {
- "version": "0.33.0",
- "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.33.0.tgz",
- "integrity": "sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==",
- "dev": true,
- "peer": true
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "node_modules/msgpackr": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz",
- "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==",
- "dev": true,
- "optionalDependencies": {
- "msgpackr-extract": "^3.0.1"
- }
- },
- "node_modules/msgpackr-extract": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz",
- "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "dependencies": {
- "node-gyp-build-optional-packages": "5.0.7"
- },
- "bin": {
- "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
- },
- "optionalDependencies": {
- "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2",
- "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2",
- "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2",
- "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2",
- "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2",
- "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2"
- }
- },
- "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": {
- "version": "5.0.7",
- "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz",
- "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==",
- "dev": true,
- "optional": true,
- "bin": {
- "node-gyp-build-optional-packages": "bin.js",
- "node-gyp-build-optional-packages-optional": "optional.js",
- "node-gyp-build-optional-packages-test": "build-test.js"
- }
- },
- "node_modules/node-addon-api": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
- "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==",
- "dev": true
- },
- "node_modules/node-gyp-build": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
- "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
- "dev": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/node-gyp-build-optional-packages": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.3.tgz",
- "integrity": "sha512-k75jcVzk5wnnc/FMxsf4udAoTEUv2jY3ycfdSd3yWu6Cnd1oee6/CfZJApyscA4FJOmdoixWwiwOyf16RzD5JA==",
- "dev": true,
- "bin": {
- "node-gyp-build-optional-packages": "bin.js",
- "node-gyp-build-optional-packages-optional": "optional.js",
- "node-gyp-build-optional-packages-test": "build-test.js"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
- "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/nullthrows": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
- "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
- "dev": true
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
- "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/opener": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz",
- "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==",
- "dev": true,
- "bin": {
- "opener": "bin/opener-bin.js"
- }
- },
- "node_modules/ordered-binary": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.0.tgz",
- "integrity": "sha512-EHQ/jk4/a9hLupIKxTfUsQRej1Yd/0QLQs3vGvIqg5ZtCYSzNhkzHoZc7Zf4e4kUlDaC3Uw8Q/1opOLNN2OKRQ==",
- "dev": true
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parcel": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.8.3.tgz",
- "integrity": "sha512-5rMBpbNE72g6jZvkdR5gS2nyhwIXaJy8i65osOqs/+5b7zgf3eMKgjSsDrv6bhz3gzifsba6MBJiZdBckl+vnA==",
- "dev": true,
- "dependencies": {
- "@parcel/config-default": "2.8.3",
- "@parcel/core": "2.8.3",
- "@parcel/diagnostic": "2.8.3",
- "@parcel/events": "2.8.3",
- "@parcel/fs": "2.8.3",
- "@parcel/logger": "2.8.3",
- "@parcel/package-manager": "2.8.3",
- "@parcel/reporter-cli": "2.8.3",
- "@parcel/reporter-dev-server": "2.8.3",
- "@parcel/utils": "2.8.3",
- "chalk": "^4.1.0",
- "commander": "^7.0.0",
- "get-port": "^4.2.0",
- "v8-compile-cache": "^2.0.0"
- },
- "bin": {
- "parcel": "lib/bin.js"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/portfinder": {
- "version": "1.0.28",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz",
- "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==",
- "dev": true,
- "dependencies": {
- "async": "^2.6.2",
- "debug": "^3.1.1",
- "mkdirp": "^0.5.5"
- },
- "engines": {
- "node": ">= 0.12.0"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
- },
- "node_modules/posthtml": {
- "version": "0.16.6",
- "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz",
- "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==",
- "dev": true,
- "dependencies": {
- "posthtml-parser": "^0.11.0",
- "posthtml-render": "^3.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/posthtml-parser": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz",
- "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==",
- "dev": true,
- "dependencies": {
- "htmlparser2": "^7.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/posthtml-render": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz",
- "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==",
- "dev": true,
- "dependencies": {
- "is-json": "^2.0.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/posthtml/node_modules/posthtml-parser": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz",
- "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==",
- "dev": true,
- "dependencies": {
- "htmlparser2": "^7.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/process": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
- "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
- "dev": true,
- "dependencies": {
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/react": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
- "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-dom": {
- "version": "18.2.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
- "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
- "dependencies": {
- "loose-envify": "^1.1.0",
- "scheduler": "^0.23.0"
- },
- "peerDependencies": {
- "react": "^18.2.0"
- }
- },
- "node_modules/react-error-overlay": {
- "version": "6.0.9",
- "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
- "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==",
- "dev": true
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
- },
- "node_modules/react-refresh": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz",
- "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
- "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
- "dev": true
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
- "dev": true
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/rxjs": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
- "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
- "dev": true,
- "dependencies": {
- "tslib": "^2.1.0"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
}
- ]
- },
- "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
- },
- "node_modules/scheduler": {
- "version": "0.23.0",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
- "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
- "dependencies": {
- "loose-envify": "^1.1.0"
- }
- },
- "node_modules/secure-compare": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/secure-compare/-/secure-compare-3.0.1.tgz",
- "integrity": "sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=",
- "dev": true
- },
- "node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "node_modules/shell-quote": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz",
- "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/spawn-command": {
- "version": "0.0.2-1",
- "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz",
- "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
- "dev": true
- },
- "node_modules/srcset": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz",
- "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
- "dev": true
- },
- "node_modules/state-local": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/state-local/-/state-local-1.0.7.tgz",
- "integrity": "sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w==",
- "dev": true
- },
- "node_modules/string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^4.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/svgo": {
- "version": "2.8.0",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
- "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
- "dev": true,
- "dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^4.1.3",
- "css-tree": "^1.1.3",
- "csso": "^4.2.0",
- "picocolors": "^1.0.0",
- "stable": "^0.1.8"
- },
- "bin": {
- "svgo": "bin/svgo"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/term-size": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
- "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/terser": {
- "version": "5.16.8",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.8.tgz",
- "integrity": "sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/source-map": "^0.3.2",
- "acorn": "^8.5.0",
- "commander": "^2.20.0",
- "source-map-support": "~0.5.20"
- },
- "bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/terser/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
- "dev": true
- },
- "node_modules/timsort": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
- "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==",
- "dev": true
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/tree-kill": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
- "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
- "dev": true,
- "bin": {
- "tree-kill": "cli.js"
- }
- },
- "node_modules/tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
- "dev": true
- },
- "node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/union": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/union/-/union-0.5.0.tgz",
- "integrity": "sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==",
- "dev": true,
- "dependencies": {
- "qs": "^6.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "browserslist-lint": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/url-join": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz",
- "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==",
- "dev": true
- },
- "node_modules/utility-types": {
- "version": "3.10.0",
- "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz",
- "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/v8-compile-cache": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
- "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
- "dev": true
- },
- "node_modules/weak-lru-cache": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz",
- "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==",
- "dev": true
- },
- "node_modules/whatwg-encoding": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz",
- "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.6.3"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/wrap-ansi/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
- "dev": true
- },
- "node_modules/xxhash-wasm": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz",
- "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==",
- "dev": true
- },
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yargs": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
- "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
- "dev": true,
- "dependencies": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.2"
- }
- },
- "node_modules/yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
}
}
}
diff --git a/package.json b/package.json
index 240b09b..6bd739c 100644
--- a/package.json
+++ b/package.json
@@ -1,37 +1,6 @@
{
- "name": "gleam-lustre",
- "version": "1.3.0",
- "description": "A framework for building web apps - powered by Gleam and React!",
- "type": "module",
- "directories": {
- "test": "test"
- },
- "scripts": {
- "clean": "rm -rf build dist",
- "build": "gleam test && parcel build test/example/index.html",
- "build:docs": "gleam docs build && cp -a ./build/dev/docs/lustre/. ./docs/",
- "start": "gleam test && concurrently --kill-others \"chokidar \"src/*\" \"test/*\" -c \\\"gleam test\\\"\" \"parcel test/example/index.html\"",
- "start:playground": "gleam test && concurrently --kill-others \"chokidar \"src/*\" \"test/*\" -c \\\"gleam test\\\"\" \"parcel test/playground/index.html\"",
- "start:docs": "concurrently --kill-others \"chokidar \"src/*\" \"test/*\" -c \\\"npm run build:docs\\\"\" \"http-server docs\"",
- "start:clean": "npm run clean && npm start"
- },
- "author": "",
- "license": "MIT",
+ "private": true,
"devDependencies": {
- "@monaco-editor/react": "^4.4.5",
- "chokidar-cli": "^3.0.0",
- "concurrently": "^8.0.0",
- "http-server": "^14.1.0",
- "parcel": "^2.8.0",
- "process": "^0.11.10"
- },
- "alias": {
- "example": "./build/dev/javascript/lustre/example",
- "lustre": "./build/dev/javascript/lustre",
- "playground": "./build/dev/javascript/lustre/playground"
- },
- "dependencies": {
- "react": "^18.0.0",
- "react-dom": "^18.0.0"
+ "vite": "^4.4.2"
}
}
diff --git a/src/lustre.ffi.mjs b/src/lustre.ffi.mjs
index b39db16..74923d1 100644
--- a/src/lustre.ffi.mjs
+++ b/src/lustre.ffi.mjs
@@ -1,201 +1,127 @@
-import * as Cmd from "./lustre/cmd.mjs";
-import * as React from "react";
-import * as ReactDOM from "react-dom/client";
-
-const Dispatcher = React.createContext(null);
-
-export const mount = (app, selector) => {
- const el = document.querySelector(selector);
-
- if (!el) {
- console.warn(
- [
- "[lustre] Oops, it looks like I couldnt find an element on the ",
- 'page matching the selector "' + selector + '".',
- "",
- "Hint: make sure you arent running your script before the rest of ",
- "the HTML document has been parsed! you can add the `defer` attribute ",
- "to your script tag to make sure that cant happen.",
- ].join("\n")
- );
-
- return Promise.reject();
+import { innerHTML, createTree } from "./runtime.ffi.mjs";
+import { Ok, Error, List } from "./gleam.mjs";
+import { Some, Option } from "../gleam_stdlib/gleam/option.mjs";
+
+// RUNTIME ---------------------------------------------------------------------
+
+///
+///
+export class App {
+ #root = null;
+ #state = null;
+ #queue = [];
+ #commands = [];
+ #willUpdate = false;
+ #didUpdate = false;
+
+ // These are the three functions that the user provides to the runtime.
+ #__init;
+ #__update;
+ #__render;
+
+ constructor(init, update, render) {
+ this.#__init = init;
+ this.#__update = update;
+ this.#__render = render;
}
- let dispatchRef = null;
- let dispatchPromise = new Promise((resolve) => (dispatchRef = resolve));
-
- ReactDOM.createRoot(el).render(
- React.createElement(
- React.StrictMode,
- null,
- React.createElement(
- React.forwardRef((_, ref) => {
- // When wrapped in `<React.StrictMode />` and when in development
- // mode, React will run effects (and some other hooks) twice to
- // help us debug potential issues that arise from impurity.
- //
- // This is a problem for our cmds because they are intentionally
- // impure. We can/should expect user code to be pure, but we want
- // to allow top-level impurity in the form of cmds.
- //
- // So we can keep the benefits of strict mode, we add an additional
- // bit of state to track whether we need to run the cmds we have or
- // not.
- const [shouldRunCmds, setShouldRunCmds] = React.useState(true);
- const [[state, cmds], dispatch] = React.useReducer(
- ([state, _], msg) => {
- // Every time we call the user's update function we'll get back a
- // new lot of cmds to run, so we need to set this flag to true to
- // let our `useEffect` know it can run them!
- setShouldRunCmds(true);
- return app.update(state, msg);
- },
- app.init
- );
-
- React.useImperativeHandle(ref, () => dispatch, [dispatch]);
- React.useEffect(() => {
- if (shouldRunCmds && cmds) {
- for (const cmd of Cmd.to_list(cmds)) {
- cmd(dispatch);
- }
-
- // Once we've performed the side effects, we'll toggle this flag
- // back to false so we don't run them again on subsequent renders
- // or during development.
- setShouldRunCmds(false);
- }
- }, [cmds, shouldRunCmds]);
-
- return React.createElement(
- Dispatcher.Provider,
- { value: dispatch },
- React.createElement(({ state }) => app.render(state), { state })
- );
- }),
- { ref: dispatchRef }
- )
- )
- );
-
- return dispatchPromise;
-};
+ start(selector = "body") {
+ if (this.#root) return this;
-// ELEMENTS --------------------------------------------------------------------
-
-//
-export const node = (tag, attributes, children) => {
- const dispatch = React.useContext(Dispatcher);
- const props = to_props(attributes, dispatch);
-
- try {
- return React.createElement(tag, props, ...children.toArray());
- } catch (_) {
- console.warn([
- "[lustre] Something went wrong while trying to render a node with the ",
- 'tag "' + tag + "\". To prevent a runtime crash, I'm going to render an ",
- "empty text node instead.",
- "",
- "Hint: make sure you arent trying to render a node with a tag that ",
- "is compatible with the renderer you are using. For example, you can't ",
- 'render a "div" node with the terminal renderer.',
- "",
- "If you think this might be a bug, please open an issue at ",
- "https://github.com/hayleigh-dot-dev/gleam-lustre/issues",
- ]);
- return "";
- }
-};
+ try {
+ this.#root = document.querySelector(selector);
+ } catch (_) {
+ return new Error(undefined);
+ }
-//
-export const stateful = (init, render) => {
- const [state, setState] = React.useState(init);
+ const [next, cmds] = this.#__init();
+ this.#state = next;
+ this.#commands = cmds[0].toArray();
+ this.#didUpdate = true;
- return React.createElement(() => render(state, setState));
-};
+ window.requestAnimationFrame(this.#tick.bind(this));
+ return new Ok((msg) => this.dispatch(msg));
+ }
-//
-export const text = (content) => content;
+ dispatch(msg) {
+ if (!this.#willUpdate) window.requestAnimationFrame(this.#tick.bind(this));
-//
-export const fragment = (children) => {
- return React.createElement(React.Fragment, {}, ...children.toArray());
-};
+ this.#queue.push(msg);
+ this.#willUpdate = true;
+ }
-//
-export const map = (element, f) =>
- React.createElement(() => {
- const dispatch = React.useContext(Dispatcher);
- const mappedDispatch = React.useCallback(
- (msg) => dispatch(f(msg)),
- [dispatch]
+ #render() {
+ const node = this.#__render(this.#state);
+ const tree = createTree(
+ map(node, (msg) => {
+ if (msg instanceof Some) this.dispatch(msg[0]);
+ })
);
- return React.createElement(
- Dispatcher.Provider,
- { value: mappedDispatch },
- React.createElement(element)
- );
- });
+ innerHTML(this.#root, tree);
+ }
-// HOOKS -----------------------------------------------------------------------
+ #tick() {
+ this.#flush();
+ this.#didUpdate && this.#render();
+ this.#willUpdate = false;
+ }
-export const useLustreInternalDispatch = () => {
- return React.useContext(Dispatcher);
-};
+ #flush(times = 0) {
+ if (this.#queue.length) {
+ while (this.#queue.length) {
+ const [next, cmds] = this.#__update(this.#state, this.#queue.shift());
-// UTILS -----------------------------------------------------------------------
-
-// This function takes a Gleam `List` of key/value pairs (in the form of a Gleam
-// tuple, which is in turn a JavaScript array) and converts it into a normal
-// JavaScript object.
-//
-export const to_object = (entries) => Object.fromEntries(entries.toArray());
-
-const capitalise = (s = "") => s[0].toUpperCase() + s.slice(1);
-const to_props = (attributes, dispatch) => {
- return attributes.toArray().reduce((props, attr) => {
- // The constructors for the `Attribute` type are not public in the
- // gleam source to prevent users from constructing them directly.
- // This has the unfortunate side effect of not letting us `instanceof`
- // the constructors to pattern match on them and instead we have to
- // rely on the structure to work out what kind of attribute it is.
- //
- if ("name" in attr && "value" in attr) {
- const prop =
- attr.name in props && typeof props[attr.name] === "string"
- ? props[attr.name] + " " + attr.value
- : attr.value;
-
- return { ...props, [attr.name]: prop };
+ this.#state = next;
+ this.#commands.concat(cmds[0].toArray());
+ }
+
+ this.#didUpdate = true;
}
- // This case handles `Event` variants.
- else if ("name" in attr && "handler" in attr) {
- const name = "on" + capitalise(attr.name);
- const handler = (e) => attr.handler(e, dispatch);
+ // Each update can produce commands which must now be executed.
+ while (this.#commands.length) this.#commands.shift()(this.dispatch);
- return { ...props, [name]: handler };
+ // Synchronous commands will immediately queue a message to be processed. If
+ // it is reasonable, we can process those updates too before proceeding to
+ // the next render.
+ if (this.#queue.length) {
+ times >= 5 ? console.warn(tooManyUpdates) : this.#flush(++times);
}
+ }
+}
- // This should Never Happen™️ but if it does we don't want everything
- // to explode, so we'll print a friendly error, ignore the attribute
- // and carry on as normal.
- //
- else {
- console.warn(
- [
- "[lustre] Oops, I'm not sure how to handle attributes with ",
- 'the type "' + attr.constructor.name + '". Did you try calling ',
- "this function from JavaScript by mistake?",
- "",
- "If not, it might be an error in lustre itself. Please open ",
- "an issue at https://github.com/hayleigh-dot-dev/gleam-lustre/issues",
- ].join("\n")
- );
-
- return props;
- }
- }, {});
+export const setup = (init, update, render) => new App(init, update, render);
+export const start = (app, selector = "body") => app.start(selector);
+
+// VDOM ------------------------------------------------------------------------
+
+export const node = (tag, attrs, children) =>
+ createTree(tag, Object.fromEntries(attrs.toArray()), children.toArray());
+export const text = (content) => content;
+export const attr = (key, value) => {
+ if (value instanceof List) return [key, value.toArray()];
+ if (value instanceof Option) return [key, value?.[0]];
+
+ return [key, value];
};
+export const on = (event, handler) => [`on${event}`, handler];
+export const map = (node, f) => ({
+ ...node,
+ attributes: Object.entries(node.attributes).reduce((attrs, [key, value]) => {
+ // It's safe to mutate the `attrs` object here because we created it at
+ // the start of the reduce: it's not shared with any other code.
+
+ // If the attribute is an event handler, wrap it in a function that
+ // transforms
+ if (key.startsWith("on") && typeof value === "function") {
+ attrs[key] = (e) => f(value(e));
+ } else {
+ attrs[key] = value;
+ }
+
+ return attrs;
+ }, {}),
+ childNodes: node.childNodes.map((child) => map(child, f)),
+});
+export const styles = (list) => Object.fromEntries(list.toArray());
diff --git a/src/lustre.gleam b/src/lustre.gleam
index 54f6c55..073d03b 100644
--- a/src/lustre.gleam
+++ b/src/lustre.gleam
@@ -2,9 +2,9 @@
// IMPORTS ---------------------------------------------------------------------
+import gleam/result
import lustre/cmd.{Cmd}
import lustre/element.{Element}
-import gleam/javascript/promise.{Promise}
// TYPES -----------------------------------------------------------------------
@@ -49,13 +49,7 @@ import gleam/javascript/promise.{Promise}
/// <small>Someone please PR the Gleam docs generator to fix the monospace font,
/// thanks! 💖</small>
///
-pub opaque type App(model, msg) {
- App(
- init: #(model, Cmd(msg)),
- update: Update(model, msg),
- render: Render(model, msg),
- )
-}
+pub external type App(model, msg)
pub type Error {
ElementNotFound
@@ -100,11 +94,11 @@ type Render(model, msg) =
/// ```
///
pub fn element(element: Element(msg)) -> App(Nil, msg) {
- let init = #(Nil, cmd.none())
+ let init = fn() { #(Nil, cmd.none()) }
let update = fn(_, _) { #(Nil, cmd.none()) }
let render = fn(_) { element }
- App(init, update, render)
+ application(init, update, render)
}
/// If you start off with a simple `[element`](#element) app, you may find
@@ -157,14 +151,14 @@ pub fn element(element: Element(msg)) -> App(Nil, msg) {
/// ```
///
pub fn simple(
- init: model,
+ init: fn() -> model,
update: fn(model, msg) -> model,
render: fn(model) -> Element(msg),
) -> App(model, msg) {
- let init = #(init, cmd.none())
+ let init = fn() { #(init(), cmd.none()) }
let update = fn(model, msg) { #(update(model, msg), cmd.none()) }
- App(init, update, render)
+ application(init, update, render)
}
/// An evolution of a [`simple`](#simple) app that allows you to return a
@@ -208,13 +202,12 @@ pub fn simple(
/// external fn set_timeout (f: fn () -> a, delay: Int) -> Nil
/// = "" "window.setTimeout"
///```
-pub fn application(
- init: #(model, Cmd(msg)),
+pub external fn application(
+ init: fn() -> #(model, Cmd(msg)),
update: Update(model, msg),
render: Render(model, msg),
-) -> App(model, msg) {
- App(init, update, render)
-}
+) -> App(model, msg) =
+ "./lustre.ffi.mjs" "setup"
// EFFECTS ---------------------------------------------------------------------
@@ -242,12 +235,16 @@ pub fn application(
/// function from your `main` (or elsewhere) you can get events into your Lustre
/// app from the outside world.
///
-pub fn start(app: App(model, msg), selector: String) -> Promise(fn(msg) -> Nil) {
- mount(app, selector)
+pub fn start(
+ app: App(model, msg),
+ selector: String,
+) -> Result(fn(msg) -> Nil, Error) {
+ start_(app, selector)
+ |> result.replace_error(ElementNotFound)
}
-external fn mount(
+external fn start_(
app: App(model, msg),
selector: String,
-) -> Promise(fn(msg) -> Nil) =
- "./lustre.ffi.mjs" "mount"
+) -> Result(fn(msg) -> Nil, Nil) =
+ "./lustre.ffi.mjs" "start"
diff --git a/src/lustre/attribute.gleam b/src/lustre/attribute.gleam
index bac3b0c..898e543 100644
--- a/src/lustre/attribute.gleam
+++ b/src/lustre/attribute.gleam
@@ -3,7 +3,6 @@
import gleam/dynamic.{Dynamic}
import gleam/int
import gleam/list
-import gleam/pair
import gleam/string
// TYPES -----------------------------------------------------------------------
@@ -11,48 +10,47 @@ import gleam/string
/// Attributes are attached to specific elements. They're either key/value pairs
/// or event handlers.
///
-pub opaque type Attribute(msg) {
- Attribute(name: String, value: Dynamic)
- Event(name: String, handler: fn(Dynamic, fn(msg) -> Nil) -> Nil)
-}
+pub external type Attribute(msg)
// CONSTRUCTORS ----------------------------------------------------------------
///
-pub fn attribute(name: String, value: any) -> Attribute(msg) {
- Attribute(name, dynamic.from(value))
-}
-
-///
-pub fn event(
- name: String,
- handler: fn(Dynamic, fn(msg) -> Nil) -> Nil,
-) -> Attribute(msg) {
- Event(name, handler)
-}
+/// Lustre does some work internally to convert common Gleam values into ones that
+/// make sense for JavaScript. Here are the types that are converted:
+///
+/// - `List(a)` -> `Array(a)`
+/// - `Some(a)` -> `a`
+/// - `None` -> `undefined`
+///
+pub external fn attribute(name: String, value: any) -> Attribute(msg) =
+ "../lustre.ffi.mjs" "attr"
// COMMON ATTRIBUTES -----------------------------------------------------------
///
pub fn style(properties: List(#(String, String))) -> Attribute(msg) {
- attribute("style", style_object(properties))
+ attribute("style", styles(properties))
}
-external fn style_object(properties: List(#(String, String))) -> Dynamic =
- "../lustre.ffi.mjs" "to_object"
+external fn styles(properties: List(#(String, String))) -> Dynamic =
+ "../lustre.ffi.mjs" "styles"
///
pub fn class(name: String) -> Attribute(msg) {
- attribute("className", name)
+ attribute("class", name)
}
///
pub fn classes(names: List(#(String, Bool))) -> Attribute(msg) {
attribute(
- "className",
+ "class",
names
- |> list.filter(pair.second)
- |> list.map(pair.first)
+ |> list.filter_map(fn(class) {
+ case class.1 {
+ True -> Ok(class.0)
+ False -> Error(Nil)
+ }
+ })
|> string.join(" "),
)
}
diff --git a/src/lustre/cmd.gleam b/src/lustre/cmd.gleam
index 2c1b019..251908f 100644
--- a/src/lustre/cmd.gleam
+++ b/src/lustre/cmd.gleam
@@ -9,8 +9,7 @@ import gleam/list
/// get information back into your program.
///
pub opaque type Cmd(action) {
- Cmd(fn(fn(action) -> Nil) -> Nil, Cmd(action))
- None
+ Cmd(List(fn(fn(action) -> Nil) -> Nil))
}
// CONSTRUCTORS ----------------------------------------------------------------
@@ -37,7 +36,7 @@ pub opaque type Cmd(action) {
/// ```
///
pub fn from(cmd: fn(fn(action) -> Nil) -> Nil) -> Cmd(action) {
- Cmd(cmd, None)
+ Cmd([cmd])
}
/// Typically our app's `update` function needs to return a tuple of
@@ -45,7 +44,7 @@ pub fn from(cmd: fn(fn(action) -> Nil) -> Nil) -> Cmd(action) {
/// can just return `none()`!
///
pub fn none() -> Cmd(action) {
- None
+ Cmd([])
}
// MANIPULATIONS ---------------------------------------------------------------
@@ -53,26 +52,13 @@ pub fn none() -> Cmd(action) {
///
///
pub fn batch(cmds: List(Cmd(action))) -> Cmd(action) {
- cmds
- |> list.flat_map(to_list)
- |> list.fold_right(None, fn(rest, cmd) { Cmd(cmd, rest) })
+ Cmd({
+ use b, Cmd(a) <- list.fold(cmds, [])
+ list.append(b, a)
+ })
}
pub fn map(cmd: Cmd(a), f: fn(a) -> b) -> Cmd(b) {
- case cmd {
- Cmd(cmd, next) ->
- Cmd(fn(dispatch) { cmd(fn(a) { dispatch(f(a)) }) }, map(next, f))
-
- None -> None
- }
-}
-
-// CONVERSIONS -----------------------------------------------------------------
-
-pub fn to_list(cmd: Cmd(action)) -> List(fn(fn(action) -> Nil) -> Nil) {
- case cmd {
- Cmd(cmd, next) -> [cmd, ..to_list(next)]
-
- None -> []
- }
+ let Cmd(l) = cmd
+ Cmd(list.map(l, fn(cmd) { fn(dispatch) { cmd(fn(a) { dispatch(f(a)) }) } }))
}
diff --git a/src/lustre/element.gleam b/src/lustre/element.gleam
index 85c6852..7a0cae7 100644
--- a/src/lustre/element.gleam
+++ b/src/lustre/element.gleam
@@ -23,6 +23,15 @@ pub external fn node(
) -> Element(msg) =
"../lustre.ffi.mjs" "node"
+// pub external fn stateful(
+// init: state,
+// render: fn(state, fn(state) -> Nil) -> Element(msg),
+// ) -> Element(msg) =
+// "../lustre.ffi.mjs" "stateful"
+
+// pub external fn fragment(children: List(Element(msg))) -> Element(msg) =
+// "../lustre.ffi.mjs" "fragment"
+
/// A stateful element is exactly what it sounds like: an element with local
/// encapsulated state! The `render` function we must provide is called with the
/// element's current state as well as a function to set a new state. Whenever
@@ -62,18 +71,9 @@ pub external fn node(
/// elements don't necessarily produce messages: calling `set_state` is a side
/// effect.
///
-pub external fn stateful(
- init: state,
- render: fn(state, fn(state) -> Nil) -> Element(msg),
-) -> Element(msg) =
- "../lustre.ffi.mjs" "stateful"
-
/// A fragment doesn't appear in the DOM, but allows us to treat a list of elements
/// as if it were a single one.
///
-pub external fn fragment(children: List(Element(msg))) -> Element(msg) =
- "../lustre.ffi.mjs" "fragment"
-
/// Render a Gleam string as an HTML text node.
///
pub external fn text(content: String) -> Element(msg) =
@@ -177,7 +177,7 @@ pub external fn text(content: String) -> Element(msg) =
/// If this feels like a lt of work... sometimes it is! Take a look at the docs
/// for [`stateful`](#stateful) elements to see how all this can be encapsulated.
///
-pub external fn map(element: fn() -> Element(a), f: fn(a) -> b) -> Element(b) =
+pub external fn map(element: Element(a), f: fn(a) -> b) -> Element(b) =
"../lustre.ffi.mjs" "map"
// CONSTRUCTING NODES ----------------------------------------------------------
diff --git a/src/lustre/event.gleam b/src/lustre/event.gleam
index 251b92a..0853c16 100644
--- a/src/lustre/event.gleam
+++ b/src/lustre/event.gleam
@@ -3,6 +3,7 @@
// IMPORTS ---------------------------------------------------------------------
import gleam/dynamic.{DecodeError, Dynamic}
+import gleam/option.{None, Option, Some}
import gleam/result
import lustre/attribute.{Attribute}
@@ -18,19 +19,19 @@ type Decoded(a) =
/// check those out first.
///
/// If you need to handle an event that isn't covered by the helper functions,
-/// then you can use `on` to attach a custom event handler. The callback receives
-/// a `Dynamic` representing the JavaScript event object, and a dispatch function
-/// you can use to send messages to the Lustre runtime.
+/// then you can use `on` to attach a custom event handler. The callback is given
+/// the event object as a `Dynamic`.
///
/// As a simple example, you can implement `on_click` like so:
///
/// ```gleam
+/// import gleam/option.{Some}
/// import lustre/attribute.{Attribute}
/// import lustre/event
///
/// pub fn on_click(msg: msg) -> Attribute(msg) {
-/// use _, dispatch <- event.on("click")
-/// dispatch(msg)
+/// use _ <- event.on("click")
+/// Some(msg)
/// }
/// ```
///
@@ -39,18 +40,19 @@ type Decoded(a) =
///
/// ```gleam
/// import gleam/dynamic
+/// import gleam/option.{None, Some}
+/// import gleam/result
/// import lustre/attribute.{Attribute}
/// import lustre/event
///
/// pub fn on_input(msg: fn(String) -> msg) -> Attribute(msg) {
/// use event, dispatch <- on("input")
-/// let decode_value = dynamic.field("target", dynamic.field("value", dynamic.string))
-/// let emit_value = fn(value) { dispatch(msg(value)) }
+/// let decode = dynamic.field("target", dynamic.field("value", dynamic.string))
///
-/// event
-/// |> decode_value
-/// |> result.map(emit_value)
-/// |> result.unwrap(Nil)
+/// case decode(event) {
+/// Ok(value) -> Some(msg(value))
+/// Error(_) -> None
+/// }
/// }
/// ```
///
@@ -61,93 +63,72 @@ type Decoded(a) =
/// Unlike the helpers in the rest of this module, it is possible to simply ignore
/// the dispatch function and not dispatch a message at all. In fact, we saw this
/// with the `on_input` example above: if we can't decode the event object, we
-/// simply return `Nil` and do nothing.
+/// simply return `None` and emit nothing.
///
-/// Beyond error handling, this can be used to perform side effects we don't need
+/// Beyond ignoring errors, this can be used to perform side effects we don't need
/// to observe in our main application loop, such as logging...
///
/// ```gleam
/// import gleam/io
+/// import gleam/option.{None}
/// import lustre/attribute.{Attribute}
/// import lustre/event
///
/// pub fn log_on_click(msg: String) -> Attribute(msg) {
-/// use _, _ <- event.on("click")
+/// use _ <- event.on("click")
/// io.println(msg)
+/// None
/// }
/// ```
///
-/// ...or calling `set_state` from a `stateful` Lustre element:
-///
-/// ```gleam
-/// import gleam/int
-/// import lustre/attribute.{Attribute}
-/// import lustre/element.{Element}
-/// import lustre/event
-///
-/// pub fn counter() -> Element(msg) {
-/// use state, set_state = lustre.stateful(0)
-///
-/// let decr = event.on("click", fn(_, _) { set_state(state - 1) })
-/// let incr = event.on("click", fn(_, _) { set_state(state + 1) })
-///
-/// element.div([], [
-/// element.button([decr], [element.text("-")]),
-/// element.text(int.to_string(state)),
-/// element.button([incr], [element.text("+")]),
-/// ])
-/// }
-/// ```
-///
-pub fn on(
+pub external fn on(
name: String,
- handler: fn(Dynamic, fn(msg) -> Nil) -> Nil,
-) -> Attribute(msg) {
- attribute.event(name, handler)
-}
+ handler: fn(Dynamic) -> Option(msg),
+) -> Attribute(msg) =
+ "../lustre.ffi.mjs" "on"
// MOUSE EVENTS ----------------------------------------------------------------
///
pub fn on_click(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("click")
- dispatch(msg)
+ use _ <- on("click")
+ Some(msg)
}
///
pub fn on_mouse_down(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseDown")
- dispatch(msg)
+ use _ <- on("mousedown")
+ Some(msg)
}
///
pub fn on_mouse_up(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseUp")
- dispatch(msg)
+ use _ <- on("mouseup")
+ Some(msg)
}
///
pub fn on_mouse_enter(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseEnter")
- dispatch(msg)
+ use _ <- on("mouseenter")
+ Some(msg)
}
///
pub fn on_mouse_leave(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseLeave")
- dispatch(msg)
+ use _ <- on("mouseleave")
+ Some(msg)
}
///
pub fn on_mouse_over(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseOver")
- dispatch(msg)
+ use _ <- on("mouseover")
+ Some(msg)
}
///
pub fn on_mouse_out(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("mouseOut")
- dispatch(msg)
+ use _ <- on("mouseout")
+ Some(msg)
}
// KEYBOARD EVENTS -------------------------------------------------------------
@@ -156,79 +137,74 @@ pub fn on_mouse_out(msg: msg) -> Attribute(msg) {
/// current key being pressed.
///
pub fn on_keypress(msg: fn(String) -> msg) -> Attribute(msg) {
- use event, dispatch <- on("keyPress")
+ use event <- on("keypress")
- event
- |> dynamic.field("key", dynamic.string)
- |> result.map(msg)
- |> result.map(dispatch)
- |> result.unwrap(Nil)
+ case dynamic.field("key", dynamic.string)(event) {
+ Ok(key) -> Some(msg(key))
+ Error(_) -> None
+ }
}
/// Listens for key dow events on an element, and dispatches a message with the
/// current key being pressed.
///
pub fn on_keydown(msg: fn(String) -> msg) -> Attribute(msg) {
- use event, dispatch <- on("keyDown")
+ use event <- on("keydown")
- event
- |> dynamic.field("key", dynamic.string)
- |> result.map(msg)
- |> result.map(dispatch)
- |> result.unwrap(Nil)
+ case dynamic.field("key", dynamic.string)(event) {
+ Ok(key) -> Some(msg(key))
+ Error(_) -> None
+ }
}
/// Listens for key up events on an element, and dispatches a message with the
/// current key being released.
///
pub fn on_keyup(msg: fn(String) -> msg) -> Attribute(msg) {
- use event, dispatch <- on("keyUp")
+ use event <- on("keyup")
- event
- |> dynamic.field("key", dynamic.string)
- |> result.map(msg)
- |> result.map(dispatch)
- |> result.unwrap(Nil)
+ case dynamic.field("key", dynamic.string)(event) {
+ Ok(key) -> Some(msg(key))
+ Error(_) -> None
+ }
}
// FORM EVENTS -----------------------------------------------------------------
///
pub fn on_input(msg: fn(String) -> msg) -> Attribute(msg) {
- use event, dispatch <- on("change")
+ use event <- on("input")
- event
- |> value
- |> result.map(msg)
- |> result.map(dispatch)
- |> result.unwrap(Nil)
+ case value(event) {
+ Ok(val) -> Some(msg(val))
+ Error(_) -> None
+ }
}
pub fn on_check(msg: fn(Bool) -> msg) -> Attribute(msg) {
- use event, dispatch <- on("change")
+ use event <- on("change")
- event
- |> dynamic.field("target", dynamic.field("checked", dynamic.bool))
- |> result.map(msg)
- |> result.map(dispatch)
- |> result.unwrap(Nil)
+ case checked(event) {
+ Ok(val) -> Some(msg(val))
+ Error(_) -> None
+ }
}
pub fn on_submit(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("submit")
- dispatch(msg)
+ use _ <- on("submit")
+ Some(msg)
}
// FOCUS EVENTS ----------------------------------------------------------------
pub fn on_focus(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("focus")
- dispatch(msg)
+ use _ <- on("focus")
+ Some(msg)
}
pub fn on_blur(msg: msg) -> Attribute(msg) {
- use _, dispatch <- on("blur")
- dispatch(msg)
+ use _ <- on("blur")
+ Some(msg)
}
// DECODERS --------------------------------------------------------------------
diff --git a/src/runtime.ffi.mjs b/src/runtime.ffi.mjs
new file mode 100644
index 0000000..f4cf0d1
--- /dev/null
+++ b/src/runtime.ffi.mjs
@@ -0,0 +1,1300 @@
+// This module is vendored and lightly modified from the original diffhtml source
+// available at:
+//
+// https://github.com/tbranyen/diffhtml/
+//
+// You can read a copy of the original license, unchanged, at:
+//
+// https://github.com/tbranyen/diffhtml/blob/master/LICENSE
+//
+
+function t(e, t) {
+ var n = Object.keys(e);
+ if (Object.getOwnPropertySymbols) {
+ var r = Object.getOwnPropertySymbols(e);
+ t &&
+ (r = r.filter(function (t) {
+ return Object.getOwnPropertyDescriptor(e, t).enumerable;
+ })),
+ n.push.apply(n, r);
+ }
+ return n;
+}
+function n(e) {
+ for (var n = 1; n < arguments.length; n++) {
+ var r = null != arguments[n] ? arguments[n] : {};
+ n % 2
+ ? t(Object(r), !0).forEach(function (t) {
+ i(e, t, r[t]);
+ })
+ : Object.getOwnPropertyDescriptors
+ ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r))
+ : t(Object(r)).forEach(function (t) {
+ Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(r, t));
+ });
+ }
+ return e;
+}
+function r(e, t) {
+ if (!(e instanceof t))
+ throw new TypeError("Cannot call a class as a function");
+}
+function a(e, t) {
+ for (var n = 0; n < t.length; n++) {
+ var r = t[n];
+ (r.enumerable = r.enumerable || !1),
+ (r.configurable = !0),
+ "value" in r && (r.writable = !0),
+ Object.defineProperty(e, r.key, r);
+ }
+}
+function o(e, t, n) {
+ return (
+ t && a(e.prototype, t),
+ n && a(e, n),
+ Object.defineProperty(e, "prototype", { writable: !1 }),
+ e
+ );
+}
+function i(e, t, n) {
+ return (
+ t in e
+ ? Object.defineProperty(e, t, {
+ value: n,
+ enumerable: !0,
+ configurable: !0,
+ writable: !0,
+ })
+ : (e[t] = n),
+ e
+ );
+}
+function s(e) {
+ return c(e) || d(e) || l(e) || f();
+}
+function c(e) {
+ if (Array.isArray(e)) return u(e);
+}
+function d(e) {
+ if (
+ ("undefined" != typeof Symbol && null != e[Symbol.iterator]) ||
+ null != e["@@iterator"]
+ )
+ return Array.from(e);
+}
+function l(e, t) {
+ if (e) {
+ if ("string" == typeof e) return u(e, t);
+ var n = Object.prototype.toString.call(e).slice(8, -1);
+ return (
+ "Object" === n && e.constructor && (n = e.constructor.name),
+ "Map" === n || "Set" === n
+ ? Array.from(e)
+ : "Arguments" === n ||
+ /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)
+ ? u(e, t)
+ : void 0
+ );
+ }
+}
+function u(e, t) {
+ (null == t || t > e.length) && (t = e.length);
+ for (var n = 0, r = new Array(t); n < t; n++) r[n] = e[n];
+ return r;
+}
+function f() {
+ throw new TypeError(
+ "Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."
+ );
+}
+function h(e, t) {
+ var n = String(e);
+ switch (t) {
+ case "boolean":
+ return "false" !== n;
+ case "string":
+ return n;
+ case "number":
+ return te(n, 10);
+ case "object":
+ return ne(n);
+ }
+}
+function v(e, t) {
+ var n =
+ arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : typeof t,
+ r = arguments.length > 3 ? arguments[3] : void 0,
+ a = ee.location,
+ o = ee.URLSearchParams,
+ i = void 0 !== o,
+ s = void 0 !== a,
+ c = i && s,
+ d = W.env;
+ if (r && e in r) return r[e];
+ var l = "DIFF_".concat(e.replace(/[^a-zA-Z0-9]/, ""));
+ if (c) {
+ var u = new o(a.search),
+ f = l.toLowerCase();
+ if (u.has(f)) return h(decodeURIComponent(String(u.get(f))), n);
+ }
+ var v = l.toUpperCase();
+ return d && v in W.env ? h(W.env[v.toUpperCase()], n) : t;
+}
+function p(e) {
+ for (
+ var t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : [],
+ n = 0;
+ n < e.length;
+ n++
+ ) {
+ var r = e[n];
+ r && r.rawNodeName === ve ? p(r.childNodes, t) : r && t.push(r);
+ }
+ return t;
+}
+function m(e, t, r) {
+ var a = null;
+ if (he.protected.has(e) || he.allocated.has(e)) a = e;
+ else if (!e || fe(e)) {
+ var o = e ? e.length : 0;
+ r = [];
+ for (var i = 0; i < o; i++) {
+ var c = e && !e[i];
+ c || (e && r.push(e[i]));
+ }
+ a = m(ve, null, r);
+ }
+ if (a) return a;
+ var d = "object" == typeof e,
+ l = e;
+ if (e && d && "ownerDocument" in l) {
+ if (l.nodeType === B.TEXT) {
+ var u = m(pe, l.nodeValue);
+ return X.set(u, l), u;
+ }
+ (t = {}), (r = []);
+ var f = l.attributes;
+ if (l.nodeType === B.ELEMENT && f && f.length)
+ for (var h = 0; h < f.length; h++) {
+ var v = f[h],
+ T = v.name,
+ g = v.value;
+ g === U.STR && T in l ? (t[T] = e[T]) : (t[T] = g);
+ }
+ if (l.nodeType === B.ELEMENT || l.nodeType === B.FRAGMENT) {
+ r = [];
+ for (var b = 0; b < l.childNodes.length; b++) {
+ var N = l.childNodes[b];
+ r.push(m(N));
+ }
+ }
+ return (
+ X.forEach(function (t, n) {
+ t === e && (a = n);
+ }),
+ (a = a || m(l.nodeName, t, r)),
+ (a.attributes = n(n({}, a.attributes), t)),
+ (a.childNodes = r),
+ X.set(a, l),
+ a
+ );
+ }
+ if (d) {
+ var y = e.rawNodeName,
+ E = e.nodeName,
+ w = e.nodeValue,
+ S = e.attributes,
+ O = e.childNodes,
+ k = e.children,
+ R = y || E,
+ C = m(R, S || null, k || O);
+ return w && (C.nodeValue = w), C;
+ }
+ for (
+ var M = arguments.length, A = new Array(M > 3 ? M - 3 : 0), x = 3;
+ x < M;
+ x++
+ )
+ A[x - 3] = arguments[x];
+ A.length && (r = [r].concat(A)), (a = ue.get());
+ var L = e === pe;
+ "string" == typeof e
+ ? ((a.rawNodeName = e), (a.nodeName = a.rawNodeName.toLowerCase()))
+ : ((a.rawNodeName = e), (a.nodeName = ve)),
+ (a.nodeValue = U.STR),
+ (a.key = U.STR),
+ (a.childNodes.length = 0),
+ (a.attributes = {});
+ var D = fe(t) || "object" != typeof t,
+ I = D ? t : r,
+ V = p(fe(I) ? I : [I]);
+ if (L) {
+ var j = V.join(U.STR);
+ return (a.nodeType = B.TEXT), (a.nodeValue = String(j)), a;
+ }
+ if (
+ (a.nodeName === ve
+ ? (a.nodeType = B.FRAGMENT)
+ : (a.nodeType = "#comment" === e ? B.COMMENT : B.ELEMENT),
+ I && V.length && (!t || !t.childNodes))
+ )
+ for (var _ = 0; _ < V.length; _++) {
+ var P = V[_];
+ if (fe(P)) {
+ var H;
+ (H = a.childNodes).push.apply(H, s(P));
+ } else {
+ if (!P) continue;
+ if (P.nodeType === B.FRAGMENT && "string" == typeof P.rawNodeName) {
+ var F;
+ (F = a.childNodes).push.apply(F, s(P.childNodes));
+ } else
+ P && "object" == typeof P
+ ? a.childNodes.push(m(P))
+ : a.childNodes.push(m(pe, null, P));
+ }
+ }
+ if (
+ t &&
+ "object" == typeof t &&
+ !fe(t) &&
+ ((a.attributes = n({}, t)), t.childNodes)
+ ) {
+ var z = "object" == typeof t.childNodes;
+ a.childNodes.push(z ? m(t.childNodes) : m("#text", t.childNodes));
+ }
+ return (
+ "script" === a.nodeName &&
+ a.attributes.src &&
+ (a.key = String(a.attributes.src)),
+ a.attributes && "key" in a.attributes && (a.key = String(a.attributes.key)),
+ Y.size &&
+ Y.forEach(function (e, t) {
+ (t = e(a)) && (a = m(t));
+ }),
+ a
+ );
+}
+function T(e) {
+ var t = e.mount,
+ n = e.input,
+ r = n,
+ a = ge++;
+ return v("collectMetrics", !1)
+ ? function (e) {
+ e = "[".concat(a, "] ").concat(e);
+ var n = t.host;
+ t && n
+ ? (e = "".concat(n.constructor.name, " ").concat(e))
+ : r &&
+ "function" == typeof r.rawNodeName &&
+ (e = "".concat(r.rawNodeName.name, " ").concat(e));
+ var o = "".concat(e, "-end");
+ if (Te.has(e)) {
+ var i = Te.get(e) || 0,
+ s = (performance.now() - i).toFixed(3);
+ Te.delete(e),
+ performance.mark(o),
+ performance.measure(
+ "".concat(me, " ").concat(e, " (").concat(s, "ms)"),
+ e,
+ o
+ );
+ } else Te.set(e, performance.now()), performance.mark(e);
+ }
+ : U.FUN;
+}
+function g(e) {
+ if ((be(e), e.childNodes.length))
+ for (var t = 0; t < e.childNodes.length; t++) g(e.childNodes[t]);
+}
+function b(e) {
+ if (e.childNodes.length)
+ for (var t = 0; t < e.childNodes.length; t++) b(e.childNodes[t]);
+ X.delete(e), Ne(e);
+}
+function N() {
+ ye.allocated.forEach(function (e) {
+ (e.attributes = {}),
+ (e.childNodes.length = 0),
+ ye.free.add(e),
+ ye.allocated.delete(e),
+ X.delete(e);
+ });
+}
+function y(e) {
+ var t = e.state,
+ n = e.state.isRendering;
+ t.measure("schedule"),
+ G.forEach(function (r) {
+ var a = r.activeTransaction && r.activeTransaction.mount,
+ o = e.mount;
+ a &&
+ o &&
+ r.isRendering &&
+ ((a.contains && a.contains(o)) || (o.contains && o.contains(a))
+ ? ((t = r), (n = !0))
+ : a === o && ((t = r), (n = !0)));
+ });
+ var r = t,
+ a = r.activeTransaction,
+ o = r.nextTransaction;
+ if (n) {
+ var i = e.tasks;
+ (t.nextTransaction = e), e.abort();
+ var s = (o && o.promise) || a.promise || Promise.resolve();
+ return (e.promise = s.then(function () {
+ return (
+ (e.aborted = !1),
+ (e.state.isRendering = !0),
+ (e.state.activeTransaction = e),
+ t.measure("schedule"),
+ Je.flow(e, i.slice(1))
+ );
+ }));
+ }
+ (t.isRendering = !0), (t.activeTransaction = e), t.measure("schedule");
+}
+function E(e) {
+ var t = e.mount,
+ n = e.input,
+ r = e.state.measure,
+ a = e.config,
+ o = a.inner ? "innerHTML" : "outerHTML";
+ r("should update");
+ var i = t;
+ if ("string" == typeof n && i[o] === n) return e.abort(!0);
+ r("should update");
+}
+function w(e) {
+ if (G.has(e)) {
+ var t = G.get(e),
+ n = t.mutationObserver,
+ r = t.oldTree;
+ n && n.disconnect(),
+ r &&
+ !X.has(r) &&
+ (K.forEach(function (e) {
+ return e(r);
+ }),
+ b(r)),
+ G.delete(e);
+ }
+ if (e) {
+ var a = e;
+ if (a.childNodes && a.childNodes.length)
+ for (var o = 0; o < a.childNodes.length; o++) w(a.childNodes[o]);
+ a.shadowRoot && w(a.shadowRoot),
+ X.forEach(function (e, t) {
+ e === a &&
+ (K.forEach(function (e) {
+ return e(t);
+ }),
+ b(t));
+ }),
+ ke(Se),
+ (Se = Oe(N));
+ }
+}
+function S(e) {
+ var t = e.state,
+ n = e.mount,
+ r = e.input,
+ a = e.config,
+ o = a.inner,
+ i = n;
+ t.mutationObserver && !t.isDirty
+ ? (t.isDirty = Boolean(t.mutationObserver.takeRecords().length))
+ : t.mutationObserver || (t.isDirty = !1),
+ (!t.isDirty && t.oldTree) ||
+ (w(i),
+ i.ownerDocument &&
+ t.mutationObserver &&
+ t.mutationObserver.observe(i, {
+ subtree: !0,
+ childList: !0,
+ attributes: !0,
+ characterData: !0,
+ }),
+ (t.oldTree = m(i)),
+ g(t.oldTree),
+ G.set(n, t));
+ var s = t.oldTree,
+ c = s.nodeName,
+ d = s.attributes;
+ e.newTree || (e.newTree = m(r));
+ var l = e.newTree;
+ if (!o && l.nodeType === B.FRAGMENT && t.oldTree.nodeType !== B.FRAGMENT) {
+ for (var u = [], f = 0; f < l.childNodes.length; f++) {
+ var h = l.childNodes[f];
+ (h.nodeType === B.TEXT && !h.nodeValue.trim()) || u.push(h);
+ }
+ 1 === u.length
+ ? (e.newTree = u[0])
+ : u.length > 1 && (e.newTree = m(l.childNodes));
+ }
+ e.oldTree = t.oldTree;
+ var v = e.oldTree,
+ p = e.newTree;
+ if (o && v && p) {
+ var T = "string" != typeof p.rawNodeName,
+ b = p.nodeType === B.FRAGMENT,
+ N = b && !T ? p.childNodes : p;
+ e.newTree = m(c, d, N);
+ }
+}
+function O(e, t) {
+ var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : [],
+ r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {},
+ a = arguments.length > 4 && void 0 !== arguments[4] ? arguments[4] : U.OBJ,
+ o = arguments.length > 5 ? arguments[5] : void 0;
+ e || (e = U.OBJ), t || (t = U.OBJ);
+ var i = r.svgElements,
+ s = void 0 === i ? new Set() : i,
+ c = e.nodeName,
+ d = t.nodeName,
+ l = e === U.OBJ || o,
+ u = "svg" === d || s.has(t),
+ f = null;
+ if (
+ ($.size &&
+ $.forEach(function (r) {
+ var o = r(e, t, a);
+ o && o === e ? (f = n) : !1 === o ? (f = !1) : o && (t = o);
+ }),
+ null !== f || !t)
+ )
+ return f;
+ if (d === Me) {
+ if (c === Me && e.nodeValue !== t.nodeValue)
+ return (
+ n.push(F.NODE_VALUE, e, t.nodeValue, e.nodeValue),
+ (e.nodeValue = t.nodeValue),
+ n
+ );
+ if (l) return n.push(F.NODE_VALUE, t, t.nodeValue, null), n;
+ }
+ var h = t.childNodes || [];
+ if (t.nodeType === B.ELEMENT) {
+ var v = l ? U.OBJ : e.attributes,
+ p = t.attributes || {};
+ for (var m in p) {
+ var T = p[m];
+ (m in v && v[m] === p[m]) ||
+ (l || (v[m] = T),
+ ((e && "script" === e.nodeName) ||
+ "script" !== t.nodeName ||
+ "type" !== m) &&
+ n.push(F.SET_ATTRIBUTE, l ? t : e, m, T));
+ }
+ if (!l)
+ for (var g in v)
+ g in p || (n.push(F.REMOVE_ATTRIBUTE, e, g), delete v[g]);
+ }
+ if (o) {
+ for (var b = 0; b < h.length; b++)
+ u && s.add(h[b]), O(null, h[b], n, r, a, !0);
+ return n;
+ }
+ for (var N = { old: new Map(), new: new Map() }, y = 0; y < Ce.length; y++) {
+ var E = Ce[y],
+ w = N[E],
+ S = arguments[y],
+ k = S && S.childNodes;
+ if (k && k.length)
+ for (var R = 0; R < k.length; R++) {
+ var C = k[R];
+ C.key && w.set(C.key, C);
+ }
+ }
+ for (
+ var M = e.childNodes || [], A = Re(h.length, M.length), x = 0;
+ x < A;
+ x++
+ ) {
+ var L = M && M[x],
+ D = h[x];
+ if (((u || (D && "svg" === D.nodeName)) && s.add(D), D))
+ if (L) {
+ var I = D.key,
+ V = L.key,
+ j = N.new.has(V),
+ _ = N.old.has(I);
+ if (V || I) {
+ if (!j && !_) {
+ M.splice(M.indexOf(L), 1, D),
+ O(null, D, n, r, a, !0),
+ n.push(F.REPLACE_CHILD, D, L),
+ (x -= 1);
+ continue;
+ }
+ if (!j) {
+ n.push(F.REMOVE_CHILD, L), M.splice(M.indexOf(L), 1), (x -= 1);
+ continue;
+ }
+ if (I !== V) {
+ var P = D;
+ I && _ ? ((P = N.old.get(I)), M.splice(M.indexOf(P), 1)) : (P = D),
+ O(null, P, n, r, a, !0),
+ n.push(F.INSERT_BEFORE, e, P, L),
+ M.splice(x, 0, P);
+ continue;
+ }
+ }
+ var H = L.nodeName === D.nodeName,
+ z = O(L, D, n, r, a, !H);
+ if (!1 !== z) {
+ if (!H) {
+ M[x] = D;
+ var J = M.lastIndexOf(D);
+ J > x && M.splice(J, 1), n.push(F.REPLACE_CHILD, D, L);
+ }
+ } else h.splice(x, 0, L), (A += 1);
+ } else
+ M.push(D), O(null, D, n, r, a, !0), n.push(F.INSERT_BEFORE, e, D, null);
+ else !1 === O(L, null, n, r, a, !0) && h.splice(x, 0, L);
+ }
+ if (M.length !== h.length) {
+ for (var G = h.length; G < M.length; G++) n.push(F.REMOVE_CHILD, M[G]);
+ M.length = h.length;
+ }
+ return n;
+}
+function k(e) {
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1]
+ ? arguments[1]
+ : ee.document,
+ n = arguments.length > 2 ? arguments[2] : void 0,
+ r = m(e),
+ a = X.get(r);
+ if (a) return a;
+ var o = r.nodeName,
+ i = r.rawNodeName,
+ s = void 0 === i ? o : i,
+ c = r.childNodes,
+ d = void 0 === c ? [] : c;
+ n = n || "svg" === o;
+ var l = null,
+ u = null;
+ if (
+ (Z.forEach(function (e) {
+ (u = e(r)) && (l = u);
+ }),
+ !t)
+ )
+ return l;
+ var f = l;
+ f ||
+ ((f =
+ "#text" === o
+ ? t.createTextNode(r.nodeValue || U.STR)
+ : "#document-fragment" === o
+ ? t.createDocumentFragment()
+ : n
+ ? t.createElementNS(Ae, s)
+ : t.createElement(s)),
+ "script" === o && (f.type = "no-execute")),
+ X.set(r, f);
+ for (var h = 0; h < d.length; h++) {
+ var v = k(d[h], t, n);
+ f && v && f.appendChild(v);
+ }
+ return f;
+}
+function R(e) {
+ var t = e.state,
+ n = e.state.measure,
+ r = e.oldTree,
+ a = e.newTree,
+ o = e.mount;
+ if (
+ (n("sync trees"),
+ r && a && r.nodeName !== a.nodeName && a.nodeType !== B.FRAGMENT)
+ ) {
+ (e.patches = [F.REPLACE_CHILD, a, r]), (e.oldTree = t.oldTree = a);
+ var i = k(a);
+ G.delete(o),
+ G.set(i, t),
+ (e.mount = i),
+ "script" === a.nodeName &&
+ t.scriptsToExecute.set(a, a.attributes.type || U.STR);
+ } else e.patches = O(r || null, a || null, [], t, e);
+ n("sync trees");
+}
+function C(e, t) {
+ var n;
+ null === (n = J.get(e)) || void 0 === n || n.add(t);
+}
+function M(e, t) {
+ if (!t && e) {
+ var n;
+ null === (n = J.get(e)) || void 0 === n || n.clear();
+ } else if (e && t) {
+ var r;
+ null === (r = J.get(e)) || void 0 === r || r.delete(t);
+ } else
+ for (var a = 0; a < z.length; a++) {
+ var o;
+ null === (o = J.get(z[a])) || void 0 === o || o.clear();
+ }
+}
+function A(e) {
+ for (
+ var t = arguments.length, n = new Array(t > 1 ? t - 1 : 0), r = 1;
+ r < t;
+ r++
+ )
+ n[r - 1] = arguments[r];
+ var a = J.get(e),
+ o = [];
+ if (!a) return o;
+ var i = n[0],
+ c = i.nodeType === B.ELEMENT;
+ return !a.size || ("textChanged" !== e && !c)
+ ? o
+ : (a.forEach(function (e) {
+ var t = n.map(function (e) {
+ return X.get(e) || e;
+ }),
+ r = e.apply(void 0, s(t));
+ "object" == typeof r && r.then && o.push(r);
+ }),
+ ("attached" !== e && "detached" !== e) ||
+ i.childNodes.forEach(function (t) {
+ o.push.apply(o, s(A.apply(void 0, [e, t].concat(s(n.slice(1))))));
+ }),
+ o);
+}
+function x(e) {
+ return xe && e && e.indexOf && e.includes("&")
+ ? ((xe.innerHTML = e), xe.textContent || U.STR)
+ : e;
+}
+function L(e) {
+ for (
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : U.OBJ,
+ n = [],
+ r = t.ownerDocument,
+ a = t.svgElements,
+ o = void 0 === a ? new Set() : a,
+ i = e.length,
+ c = 0;
+ ;
+
+ ) {
+ var d = e[c];
+ if (c === i) break;
+ switch (d) {
+ case F.REMOVE_ATTRIBUTE:
+ case F.SET_ATTRIBUTE:
+ if (
+ "break" ===
+ (function () {
+ var t = d === F.SET_ATTRIBUTE,
+ a = e[c + 1],
+ i = e[c + 2],
+ l = t ? x(e[c + 3]) : null;
+ c += t ? 4 : 3;
+ var u = o.has(a),
+ f = k(a, r, u),
+ h = f.getAttribute(i),
+ v = A("attributeChanged", a, i, h, l);
+ g(a);
+ var p = t ? _e : Pe;
+ return (
+ v.length
+ ? (Promise.all(v).then(function () {
+ return p(a, f, i, l);
+ }),
+ n.push.apply(n, s(v)))
+ : p(a, f, i, l),
+ "break"
+ );
+ })()
+ )
+ break;
+ case F.NODE_VALUE:
+ if (
+ "break" ===
+ (function () {
+ var t = e[c + 1],
+ a = e[c + 2],
+ i = e[c + 3],
+ d = o.has(t);
+ c += 4;
+ var l = k(t, r, d);
+ g(t);
+ var u = A("textChanged", t, i, a);
+ return (
+ u.length
+ ? (Promise.all(u).then(function () {
+ return He(l, a);
+ }),
+ n.push.apply(n, s(u)))
+ : He(l, a),
+ "break"
+ );
+ })()
+ )
+ break;
+ case F.INSERT_BEFORE:
+ var l = e[c + 1],
+ u = e[c + 2],
+ f = e[c + 3];
+ if (((c += 4), !X.has(l) && l !== Le)) continue;
+ var h = X.get(l);
+ if (l === Le) {
+ var v = X.get(f);
+ v && ((h = v.parentNode), (f = v.nextSibling ? v.nextSibling : null));
+ }
+ var p = o.has(u);
+ g(u);
+ var m = f && k(f, r, p),
+ T = k(u, r, p);
+ h.insertBefore(T, m || null), n.push.apply(n, s(A("attached", u)));
+ break;
+ case F.REPLACE_CHILD:
+ if (
+ "break" ===
+ (function () {
+ var t,
+ a,
+ i,
+ d = e[c + 1],
+ l = e[c + 2];
+ c += 3;
+ var u = o.has(d),
+ f = X.get(l),
+ h = k(d, r, u);
+ if (!f || !f.parentNode) return "break";
+ g(d);
+ var v =
+ null === (t = J.get("attached")) || void 0 === t
+ ? void 0
+ : t.size,
+ p =
+ null === (a = J.get("detached")) || void 0 === a
+ ? void 0
+ : a.size,
+ m =
+ null === (i = J.get("replaced")) || void 0 === i
+ ? void 0
+ : i.size;
+ if (!v && !p && !m)
+ return f.parentNode.replaceChild(h, f), b(l), "break";
+ f.parentNode.insertBefore(h, f);
+ var T = [].concat(
+ s((v && A("attached", d)) || U.ARR),
+ s((p && A("detached", l)) || U.ARR),
+ s((m && A("replaced", l, d)) || U.ARR)
+ );
+ return (
+ T.length
+ ? (Promise.all(T).then(function () {
+ f.parentNode && f.parentNode.removeChild(f), b(l);
+ }),
+ n.push.apply(n, s(T)))
+ : (f.parentNode.removeChild(f), b(l)),
+ "break"
+ );
+ })()
+ )
+ break;
+ case F.REMOVE_CHILD:
+ if (
+ "break" ===
+ (function () {
+ var t = e[c + 1];
+ c += 2;
+ var r = X.get(t);
+ if (!r || !r.parentNode) return "break";
+ var a = A("detached", t);
+ return (
+ a.length
+ ? (Promise.all(a).then(function () {
+ r.parentNode && r.parentNode.removeChild(r), b(t);
+ }),
+ n.push.apply(n, s(a)))
+ : (r.parentNode.removeChild(r), b(t)),
+ "break"
+ );
+ })()
+ )
+ break;
+ }
+ }
+ return n;
+}
+function D(e) {
+ var t = e.mount,
+ n = e.state,
+ r = e.patches,
+ a = n.mutationObserver,
+ o = n.measure,
+ i = n.scriptsToExecute;
+ o("patch node");
+ var c = t.ownerDocument,
+ d = e.promises || [];
+ (n.ownerDocument = c || ee.document), a && a.disconnect();
+ var l = function (e) {
+ "script" === e.nodeName && i.set(e, e.attributes.type);
+ };
+ Z.add(l),
+ n.ownerDocument && d.push.apply(d, s(L(r, n))),
+ Z.delete(l),
+ (e.promises = d),
+ o("patch node");
+}
+function I(e) {
+ var t = e.promises;
+ return t && t.length
+ ? (e.promise = Promise.all(t).then(function () {
+ return e.end();
+ }))
+ : (e.promise = Promise.resolve(e.end()));
+}
+function V() {
+ return Boolean(Be && "noModule" in Be);
+}
+function j(e) {
+ return e.replace(/[&<>]/g, function (e) {
+ return "&#".concat(e.charCodeAt(0), ";");
+ });
+}
+function _(e) {
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : U.STR,
+ n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
+ return (
+ (n.inner = !0),
+ (n.executeScripts = !("executeScripts" in n) || n.executeScripts),
+ (n.tasks = n.tasks || Fe),
+ Je.create(e, t, n).start()
+ );
+}
+function P(e) {
+ var t =
+ arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : U.STR,
+ n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {};
+ return (
+ (n.inner = !1),
+ (n.executeScripts = !("executeScripts" in n) || n.executeScripts),
+ (n.tasks = n.tasks || Fe),
+ Je.create(e, t, n).start()
+ );
+}
+function H(e) {
+ var t = "function" == typeof e,
+ n = e.subscribe,
+ r = e.unsubscribe,
+ a = e.createTreeHook,
+ o = e.createNodeHook,
+ i = e.syncTreeHook,
+ s = e.releaseHook,
+ c = e.parseHook;
+ return (
+ t && q.add(e),
+ n && n(Xe),
+ a && Y.add(a),
+ o && Z.add(o),
+ i && $.add(i),
+ s && K.add(s),
+ c && Q.add(c),
+ function () {
+ t && q.delete(e),
+ r && r(Xe),
+ a && Y.delete(a),
+ o && Z.delete(o),
+ i && $.delete(i),
+ s && K.delete(s),
+ c && Q.delete(c);
+ }
+ );
+}
+var B = { ELEMENT: 1, ATTR: 2, TEXT: 3, COMMENT: 8, FRAGMENT: 11 },
+ U = {
+ STR: "",
+ NUM: 1,
+ OBJ: {},
+ ARR: [],
+ MAP: new Map(),
+ SET: new Set(),
+ DOM: {},
+ FUN: function () {},
+ },
+ F = {
+ SET_ATTRIBUTE: 0,
+ REMOVE_ATTRIBUTE: 1,
+ NODE_VALUE: 2,
+ INSERT_BEFORE: 3,
+ REPLACE_CHILD: 4,
+ REMOVE_CHILD: 5,
+ },
+ z = ["attached", "detached", "replaced", "attributeChanged", "textChanged"],
+ J = new Map([
+ ["attached", new Set()],
+ ["detached", new Set()],
+ ["replaced", new Set()],
+ ["attributeChanged", new Set()],
+ ["textChanged", new Set()],
+ ]),
+ G = new Map(),
+ X = new Map(),
+ q = new Set(),
+ Y = new Set(),
+ Z = new Set(),
+ $ = new Set(),
+ K = new Set(),
+ Q = new Set(),
+ W = { env: { NODE_ENV: "production" } },
+ ee =
+ "object" == typeof global
+ ? global
+ : ("object" == typeof window ? window : self) || {},
+ te = Number.parseInt,
+ ne = JSON.parse,
+ re = { collectMetrics: !0, executeScripts: !0 },
+ ae = v("initialPoolSize", 5e3),
+ oe = new Set(),
+ ie = new Set(),
+ se = new Set(),
+ ce = function () {
+ return {
+ rawNodeName: U.STR,
+ nodeName: U.STR,
+ nodeValue: U.STR,
+ nodeType: B.ELEMENT,
+ key: U.STR,
+ childNodes: [],
+ attributes: {},
+ };
+ },
+ de = { free: oe, allocated: ie, protected: se },
+ le = oe.values(),
+ ue = {
+ size: ae,
+ memory: de,
+ fill: function () {
+ for (var e = this, t = oe.size; t < this.size; t++) oe.add(ce());
+ this.size < oe.size &&
+ oe.forEach(function (t) {
+ oe.size !== e.size && oe.delete(t);
+ });
+ },
+ get: function () {
+ var e = le.next(),
+ t = e.value,
+ n = void 0 === t ? ce() : t;
+ return e.done && (le = oe.values()), oe.delete(n), ie.add(n), n;
+ },
+ protect: function (e) {
+ ie.delete(e), se.add(e);
+ },
+ unprotect: function (e) {
+ (se.has(e) || ie.has(e)) && (se.delete(e), ie.delete(e), oe.add(e));
+ },
+ };
+ue.fill();
+var fe = Array.isArray,
+ he = ue.memory,
+ ve = "#document-fragment",
+ pe = "#text",
+ me = "diffHTML",
+ Te = new Map(),
+ ge = 0,
+ be = ue.protect,
+ Ne = ue.unprotect,
+ ye = ue.memory,
+ Ee = Object.freeze({
+ __proto__: null,
+ protectVTree: g,
+ unprotectVTree: b,
+ gc: N,
+ }),
+ we = "undefined" != typeof requestIdleCallback,
+ Se = -1,
+ Oe = function (e) {
+ return (we ? requestIdleCallback : setTimeout)(e);
+ },
+ ke = function (e) {
+ return (we ? cancelIdleCallback : clearTimeout)(e);
+ },
+ Re = Math.max,
+ Ce = ["old", "new"],
+ Me = "#text",
+ Ae = "http://www.w3.org/2000/svg",
+ xe = ee.document ? document.createElement("div") : null,
+ Le = Symbol.for("diff.after"),
+ De = Symbol.for("diffHTML"),
+ Ie = Object.keys,
+ Ve = new Set(),
+ je = new Set(),
+ _e = function (e, t, n, r) {
+ var a = "object" == typeof r && r,
+ o = "function" == typeof r,
+ i = "symbol" == typeof r,
+ s = 0 === n.indexOf("on"),
+ c = t,
+ d = s ? n.toLowerCase() : n,
+ l = "s-" + e.nodeName + "-" + d,
+ u = t;
+ if (je.has(l)) c[d] = r;
+ else if (!Ve.has(l))
+ try {
+ (c[d] = r), je.add(l);
+ } catch (e) {
+ Ve.add(l);
+ }
+ if (a || o || i) {
+ if (a && "style" === d)
+ for (var f = Ie(r), h = 0; h < f.length; h++) u.style[f[h]] = r[f[h]];
+ } else {
+ var v = null === r || void 0 === r || !0 === r;
+ u.setAttribute(d, v ? U.STR : r);
+ }
+ },
+ Pe = function (e, t, n) {
+ var r = "r-" + e.nodeName + "-" + n,
+ a = t;
+ if (je.has(r)) (a[n] = void 0), delete a[n];
+ else if (!Ve.has(r))
+ try {
+ (a[n] = void 0), delete a[n], je.add(r);
+ } catch (e) {
+ Ve.add(r);
+ }
+ t.removeAttribute(n);
+ },
+ He = function (e, t) {
+ var n = e;
+ t.includes("&") ? (n.nodeValue = x(t)) : (n.nodeValue = t);
+ },
+ Be = ee.document ? document.createElement("script") : null,
+ Ue = Object.assign,
+ Fe = [y, E, S, R, D, I],
+ ze = {
+ schedule: y,
+ shouldUpdate: E,
+ reconcileTrees: S,
+ syncTrees: R,
+ patchNode: D,
+ endAsPromise: I,
+ },
+ Je = (function () {
+ function e(t, n, a) {
+ r(this, e),
+ i(this, "state", U.OBJ),
+ i(this, "mount", U.OBJ),
+ i(this, "input", U.OBJ),
+ i(this, "oldTree", void 0),
+ i(this, "newTree", void 0),
+ i(this, "promise", void 0),
+ i(this, "promises", void 0),
+ i(this, "tasks", []),
+ i(this, "patches", []),
+ (this.mount = t),
+ (this.input = n),
+ (this.config = a);
+ var o =
+ !a.disableMutationObserver &&
+ "MutationObserver" in (ee.window || U.OBJ);
+ (this.state = G.get(t) || {
+ measure: T(this),
+ svgElements: new Set(),
+ scriptsToExecute: new Map(),
+ activeTransaction: this,
+ mutationObserver: o && new ee.window.MutationObserver(U.FUN),
+ }),
+ (this.tasks = v("tasks", Fe, void 0, a).slice()),
+ (this.endedCallbacks = new Set()),
+ G.set(t, this.state);
+ }
+ return (
+ o(
+ e,
+ [
+ {
+ key: "start",
+ value: function () {
+ var t = this.state.measure,
+ n = this.tasks,
+ r = n.pop();
+ return (
+ t("render"),
+ (this.aborted = !1),
+ e.invokeMiddleware(this),
+ r && n.push(r),
+ e.flow(this, n)
+ );
+ },
+ },
+ {
+ key: "abort",
+ value: function (e) {
+ if (((this.aborted = !0), e))
+ return this.tasks[this.tasks.length - 1](this);
+ },
+ },
+ {
+ key: "end",
+ value: function () {
+ var e = this,
+ t = this.state,
+ n = this.config,
+ r = this.mount,
+ a = t.mutationObserver,
+ o = t.measure,
+ i = t.svgElements,
+ s = t.scriptsToExecute,
+ c = r;
+ return (
+ o("finalize"),
+ (this.completed = !0),
+ i.clear(),
+ (t.isRendering = !1),
+ (t.isDirty = !1),
+ c.ownerDocument && a
+ ? a.observe(c, {
+ subtree: !0,
+ childList: !0,
+ attributes: !0,
+ characterData: !0,
+ })
+ : (t.isDirty = !0),
+ s.forEach(function (e, r) {
+ var a = X.get(r);
+ if (
+ ((a.type = e),
+ n.executeScripts && (!V() || "nomodule" !== e))
+ ) {
+ var o = Ue(a.ownerDocument.createElement("script"), a);
+ for (var i in r.attributes) {
+ var s = r.attributes[i];
+ o.setAttribute(i, s);
+ }
+ (o.textContent = a.textContent),
+ G.has(a) && (w(a), G.set(o, t)),
+ X.set(r, o),
+ a.parentNode && a.parentNode.replaceChild(o, a);
+ }
+ }),
+ s.clear(),
+ this.endedCallbacks.forEach(function (t) {
+ return t(e);
+ }),
+ this.endedCallbacks.clear(),
+ o("finalize"),
+ o("render"),
+ t.oldTree && g(t.oldTree),
+ this
+ );
+ },
+ },
+ {
+ key: "onceEnded",
+ value: function (e) {
+ this.endedCallbacks.add(e);
+ },
+ },
+ ],
+ [
+ {
+ key: "create",
+ value: function (t, n, r) {
+ return new e(t, n, r);
+ },
+ },
+ {
+ key: "flow",
+ value: function (e, t) {
+ for (var n = e, r = 0; r < t.length; r++) {
+ if (e.aborted) return n;
+ if (void 0 !== (n = t[r](e)) && n !== e) return n;
+ }
+ return n;
+ },
+ },
+ { key: "assert", value: function (e) {} },
+ {
+ key: "invokeMiddleware",
+ value: function (e) {
+ var t = e.state.measure,
+ n = e.tasks;
+ q.forEach(function (r) {
+ var a = "invoke ".concat(r.name || "anon");
+ t(a);
+ var o = r(e);
+ o && n.push(o), t(a);
+ });
+ },
+ },
+ ]
+ ),
+ e
+ );
+ })(),
+ Ge = {
+ StateCache: G,
+ NodeCache: X,
+ TransitionCache: J,
+ MiddlewareCache: q,
+ CreateTreeHookCache: Y,
+ CreateNodeHookCache: Z,
+ SyncTreeHookCache: $,
+ ReleaseHookCache: K,
+ ParseHookCache: Q,
+ },
+ Xe = n(
+ {
+ decodeEntities: x,
+ escape: j,
+ makeMeasure: T,
+ memory: Ee,
+ Pool: ue,
+ process: W,
+ PATCH_TYPE: F,
+ globalConfig: re,
+ createNode: k,
+ syncTree: O,
+ Transaction: Je,
+ defaultTasks: Fe,
+ tasks: ze,
+ },
+ Ge
+ ),
+ qe = Object.assign,
+ Ye = "".concat("1.0.0-beta.29", "-lite");
+qe(Xe, { VERSION: Ye });
+var $e = ee;
+if (De in ee) {
+ var Ke = $e[De];
+ Ye !== Ke.VERSION &&
+ console.log("Loaded ".concat(Ye, " after ").concat(Ke.VERSION));
+}
+$e.devTools && ($e.unsubscribeDevTools = H($e.devTools(Xe)));
+
+export const Internals = Xe;
+export const VERSION = Ye;
+export const addTransitionState = C;
+export const createTree = m;
+export const html = m;
+export const innerHTML = _;
+export const outerHTML = P;
+export const release = w;
+export const removeTransitionState = M;
+export const use = H;
+
+export default {
+ VERSION: Ye,
+ addTransitionState: C,
+ removeTransitionState: M,
+ release: w,
+ createTree: m,
+ use: H,
+ outerHTML: P,
+ innerHTML: _,
+ html: m,
+ Internals: Xe,
+};
diff --git a/test/counter.gleam b/test/counter.gleam
new file mode 100644
index 0000000..5a5326b
--- /dev/null
+++ b/test/counter.gleam
@@ -0,0 +1,73 @@
+// IMPORTS ---------------------------------------------------------------------
+
+import gleam/int
+import gleam/io
+import gleam/option.{None}
+import lustre
+import lustre/element.{Element, button, div, text}
+import lustre/event
+
+// MAIN ------------------------------------------------------------------------
+
+pub fn main() {
+ // A `simple` lustre application doesn't produce `Cmd`s. These are best to
+ // start with if you're just getting started with lustre or you know you don't
+ // need the runtime to manage any side effects.
+ let app = lustre.simple(init, update, view)
+ let assert Ok(dispatch) = lustre.start(app, "body")
+
+ dispatch(Incr)
+ dispatch(Incr)
+ dispatch(Incr)
+}
+
+// MODEL -----------------------------------------------------------------------
+
+type Model =
+ Int
+
+fn init() -> Model {
+ 0
+}
+
+// UPDATE ----------------------------------------------------------------------
+
+type Msg {
+ Incr
+ Decr
+ Reset
+}
+
+fn update(model: Model, msg: Msg) -> Model {
+ case msg {
+ Incr -> model + 1
+ Decr -> model - 1
+ Reset -> 0
+ }
+}
+
+// VIEW ------------------------------------------------------------------------
+
+fn view(model: Model) -> Element(Msg) {
+ div(
+ [],
+ [
+ button([event.on_click(Incr)], [text("+")]),
+ button([event.on_click(Decr)], [text("-")]),
+ button([event.on_click(Reset)], [text("Reset")]),
+ button(
+ [
+ event.on(
+ "click",
+ fn(_) {
+ io.println("Do nothing")
+ None
+ },
+ ),
+ ],
+ [text("Do Nothing")],
+ ),
+ div([], [text(int.to_string(model))]),
+ ],
+ )
+}
diff --git a/test/counter.html b/test/counter.html
new file mode 100644
index 0000000..2589c00
--- /dev/null
+++ b/test/counter.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>lustre | counter</title>
+
+ <script type="module">
+ import { main } from "../build/dev/javascript/lustre/counter.mjs";
+
+ document.addEventListener("DOMContentLoaded", main);
+ </script>
+ </head>
+ <body></body>
+</html>
diff --git a/test/example/index.html b/test/example/index.html
deleted file mode 100644
index da38644..0000000
--- a/test/example/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" hidden>
- <head>
- <meta charset="UTF-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Document</title>
-
- <script type="module">
- // `example` is set up as an alias in our `package.json` to point to
- // some of Gleam's build artifacts.
- import { main } from "example/src/main.mjs";
-
- document.addEventListener("DOMContentLoaded", main);
-
- // This is so dumb. Parcel refuses to work with https imports, and when
- // we try to use a script tag it "helpfully" strips the `type="module"`
- // attribute meaning the shim doesn't work anyway.
- //
- // Here we're manually creating the script and setting its source using
- // a string to stop parcle meddling with it. It works but,, eesh.
- document.querySelector("head").appendChild(
- (() => {
- const script = document.createElement("script");
- script.type = "module";
- script.innerHTML = `import 'https://cdn.skypack.dev/twind/shim'`;
-
- return script;
- })()
- );
- </script>
- </head>
-
- <body class="bg-gray-100 mx-8 md:mx-32 lg:mx-64">
- <div data-lustre-container class="prose lg:prose-xl p-8"></div>
- </body>
-</html>
diff --git a/test/example/src/main.gleam b/test/example/src/main.gleam
deleted file mode 100644
index 7c9400f..0000000
--- a/test/example/src/main.gleam
+++ /dev/null
@@ -1,56 +0,0 @@
-// IMPORTS ---------------------------------------------------------------------
-
-import gleam/javascript/promise.{Promise}
-import gleam/string
-import lustre
-import lustre/cmd.{Cmd}
-import lustre/element.{Element}
-import lustre/event
-
-// MAIN ------------------------------------------------------------------------
-
-pub fn main() -> Promise(fn(Msg) -> Nil) {
- let selector = "[data-lustre-container]"
- let program = lustre.application(init(), update, render)
-
- use _ <- promise.tap(lustre.start(program, selector))
- Nil
-}
-
-// MODEL -----------------------------------------------------------------------
-
-type Model =
- Int
-
-fn init() -> #(Model, Cmd(Msg)) {
- #(0, cmd.none())
-}
-
-// UPDATE ----------------------------------------------------------------------
-
-pub opaque type Msg {
- SetCount(Int)
-}
-
-fn update(_: Model, msg: Msg) -> #(Model, Cmd(Msg)) {
- case msg {
- SetCount(n) -> #(n, cmd.none())
- }
-}
-
-// RENDER ----------------------------------------------------------------------
-
-fn render(model: Model) -> Element(Msg) {
- element.div(
- [],
- [
- element.map(
- fn() {
- element.button([event.on_click(model + 1)], [element.text("+")])
- },
- SetCount,
- ),
- element.text(string.inspect(model)),
- ],
- )
-}
diff --git a/test/lustre_test.gleam b/test/lustre_test.gleam
deleted file mode 100644
index 382d1e4..0000000
--- a/test/lustre_test.gleam
+++ /dev/null
@@ -1,3 +0,0 @@
-pub fn main () {
- Nil
-} \ No newline at end of file
diff --git a/test/playground.mjs b/test/playground.mjs
deleted file mode 100644
index 54d77a8..0000000
--- a/test/playground.mjs
+++ /dev/null
@@ -1,7 +0,0 @@
-import * as Lustre from 'lustre/ffi.mjs'
-import * as React from 'react'
-import Editor from '@monaco-editor/react'
-
-export const monaco = (attributes) => (dispatch) => {
- return React.createElement(Editor, Lustre.toProps(attributes, dispatch), null)
-}
diff --git a/test/playground/index.html b/test/playground/index.html
deleted file mode 100644
index c20cc48..0000000
--- a/test/playground/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE html>
-<html lang="en" hidden>
-
-<head>
- <meta charset="UTF-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Lustre Playground</title>
-
- <script type="module">
- // `example` is set up as an alias in our `package.json` to point to
- // some of Gleam's build artifacts.
- import { main } from 'playground/main.mjs'
-
- document.addEventListener('DOMContentLoaded', main)
-
- // This is so dumb. Parcel refuses to work with https imports, and when
- // we try to use a script tag it "helpfully" strips the `type="module"`
- // attribute meaning the shim doesn't work anyway.
- //
- // Here we're manually creating the script and setting its source using
- // a string to stop parcle meddling with it. It works but,, eesh.
- document.querySelector('head').appendChild((() => {
- const script = document.createElement('script')
- script.type = 'module'
- script.innerHTML = `import 'https://cdn.skypack.dev/twind/shim'`
-
- return script
- })())
- </script>
-</head>
-
-<body class="bg-gray-100">
- <div data-lustre-container class="p-8 h-screen w-screen"></div>
-</body>
-
-</html> \ No newline at end of file
diff --git a/test/playground/main.gleam b/test/playground/main.gleam
deleted file mode 100644
index 0b0bbe1..0000000
--- a/test/playground/main.gleam
+++ /dev/null
@@ -1,28 +0,0 @@
-import gleam/io
-import lustre
-import lustre/attribute.{attribute}
-import playground/monaco
-
-pub type Action {
- OnInput(String)
-}
-
-pub fn main() {
- let init = "// Write some Gleam code here"
-
- let update = fn(_, action) {
- case action {
- OnInput(input) -> io.debug(input)
- }
- }
-
- let render = fn(state) {
- monaco.render([
- attribute("value", state),
- monaco.on_change(fn(code, dispatch) { dispatch(OnInput(code)) }),
- ])
- }
-
- lustre.simple(init, update, render)
- |> lustre.start("[data-lustre-container]")
-}
diff --git a/test/playground/monaco.gleam b/test/playground/monaco.gleam
deleted file mode 100644
index 14958ac..0000000
--- a/test/playground/monaco.gleam
+++ /dev/null
@@ -1,15 +0,0 @@
-import gleam/dynamic
-import lustre/attribute.{ Attribute }
-import lustre/element.{ Element }
-import lustre/event
-
-pub external fn render (attributes: List(Attribute(action))) -> Element(action)
- = "../playground.mjs" "monaco"
-
-pub fn on_change (handler: fn (String, fn (action) -> Nil) -> Nil) -> Attribute(action) {
- event.on("change", fn (e, dispatch) {
- let assert Ok(code) = dynamic.string(e)
-
- handler(code, dispatch)
- })
-} \ No newline at end of file
diff --git a/test/test_ffi.mjs b/test/test_ffi.mjs
deleted file mode 100644
index e4fc06a..0000000
--- a/test/test_ffi.mjs
+++ /dev/null
@@ -1,5 +0,0 @@
-export const after = (f, delay) => {
- const id = window.setTimeout(() => {
- f(id)
- }, delay)
-}