diff --git a/.gitignore b/.gitignore index 1fc89ad6..e37b6120 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ dist dist2 .vscode coverage +build-element temp etc diff --git a/esbuild-custom-element.mjs b/esbuild-custom-element.mjs new file mode 100644 index 00000000..fced48e3 --- /dev/null +++ b/esbuild-custom-element.mjs @@ -0,0 +1,85 @@ + +import * as esbuild from 'esbuild'; +import { promises as fs } from 'fs'; +import { minify } from 'html-minifier'; +import sass from 'sass'; +import cssnano from 'cssnano'; +import postcss from 'postcss'; + +const html_minifier_options = { + removeComments: true, + collapseWhitespace: true, +}; + +const options = { + minify: false, // true, +}; + +/** html -> string, optionally minified */ +const html_plugin = { + name: 'html', + setup(build) { + build.onLoad({ filter: /\.html$/ }, async (args) => { + const text = await fs.readFile(args.path, 'utf8'); + return { + contents: options.minify ? minify(text, html_minifier_options) : text, + loader: 'text', + }; + }); + }, +}; + +/** sass -> string, optionally minified */ +const sass_plugin = { + name: 'sass', + setup(build) { + build.onLoad({ filter: /\.scss$/ }, async (args) => { + + const result = await sass.compile(args.path, {}); + const files = (result.loadedUrls || []).map(url => url.pathname); + + let contents = result.css; + if (options.minify) { + const minified = await postcss([cssnano]).process(result.css, { from: undefined }); + contents = minified.css; + } + + return { + contents, + loader: 'text', + watchFiles: files, + }; + + }); + }, +}; + +const context = await esbuild.context({ + entryPoints: ['treb-embed/custom-element/treb-spreadsheet-element.ts'], + bundle: true, + outfile: 'build-element/script/treb-spreadsheet.mjs', + minify: options.minify, + format: 'esm', + define: { + 'process.env.WORKER_TEXT': `""`, + 'process.env.NODE_ENV': `""`, + 'process.env.BUILD_VERSION': `""`, + 'process.env.BUILD_NAME': `""`, + }, + plugins: [ + html_plugin, + sass_plugin, + + /* + sassPlugin({ + type: "css-text", + minify: true, + }), + */ + + ], +}); + +await context.watch(); + +// ... diff --git a/package-lock.json b/package-lock.json index 9eb43b61..98fb6a40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "treb", - "version": "23.1.3", + "version": "23.6.5", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "treb", - "version": "23.1.3", + "version": "23.6.5", "devDependencies": { "@types/base64-js": "^1.3.0", "@types/he": "^1.1.1", @@ -15,12 +15,13 @@ "@typescript-eslint/parser": "^5.30.4", "archiver": "^5.3.0", "cssnano": "^5.1.5", - "esbuild": "^0.16.11", + "esbuild": "^0.17.9", "esbuild-sass-plugin": "^2.0.3", "eslint": "^8.19.0", "fast-xml-parser": "^4.0.7", "fs-extra": "^11.1.0", "he": "^1.2.0", + "html-minifier": "^4.0.0", "jszip": "^3.6.0", "sass": "^1.53.0", "treb-base-types": "file:treb-base-types", @@ -48,9 +49,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.9.tgz", + "integrity": "sha512-efHnZVJldh2e18fK40RYzYTTRDzZ0QgL9V/73PSsAH43BauvjVwkqSHPhbcn77H0EQOUM2JPuO/XCg7jcKt94A==", "cpu": [ "arm" ], @@ -64,9 +65,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.11.tgz", - "integrity": "sha512-CPwhZd15PasQSlkFuZv1st37xvuBeklztfb9y2GZWLQu59zcMIDkZVSEz/TTIxzt811+eJfblg5HhP49iVVDWQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.9.tgz", + "integrity": "sha512-bqds/6lXsCA7JhHGKIM/R80sy3BAIBR0HWyeas0bW57QVHT3Rz5sf4oUVS4ZsmN+J+8IgNnaIT2PXZ0pnRcLKg==", "cpu": [ "arm64" ], @@ -80,9 +81,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.11.tgz", - "integrity": "sha512-vbFn+0JXX6FkKq+0sNeA6aF2QhuOt9ZkBl+DSyqKIF+Ms58lUOhbqSwberKWQDm0udgOp3d/LhOFTYmpvmlZmA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.9.tgz", + "integrity": "sha512-pP+MLR/k8BAYZuOqEkjAaQd9/pzbNS52pNFiXgdiCHb/16u6o7s0rPF8vPlVg+1s8ii+M6HrymL4534xYwCQCA==", "cpu": [ "x64" ], @@ -96,9 +97,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.11.tgz", - "integrity": "sha512-1tqsIG6AySZ9njT8V2ddH1F/J01zX+0obPCpP0uD9TMIUlAA5WUF/+abFlnIsNY4jACcbN/13NUbLRWE9bayjw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.9.tgz", + "integrity": "sha512-Gdbnu/RCIGHE/zqLHZwujTXnHz0lBQxK9+llrbxm5tO46CMhqiOhUuA5Zt6q2imULNoPJtxmhspHSAQtcx2pkw==", "cpu": [ "arm64" ], @@ -112,9 +113,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.11.tgz", - "integrity": "sha512-Gqx2/nYqnK46dwEDPGv3SwLqgLIZQJ7m2xNoNRzO50VZPvoCWSUqDaoirrZZf7uVfl+fxHoZBcdQJx2gOdxffQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.9.tgz", + "integrity": "sha512-GEZsUsDjJnCTVWuaq1cJ1Y3oV9GmNj/h4j6jA29VYSip7S7nSSiAo4dQFBJg734QKZZFos8fHc4abJpoN2ebGw==", "cpu": [ "x64" ], @@ -128,9 +129,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.11.tgz", - "integrity": "sha512-58FTdlgIQ3ZxFtGphjbIBmo7kfDhQih/PlfAnKraAcCDZOYXWcRFmHJtW+EVg32IIxuEAqhLAzCgrqpm5o8Wlw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.9.tgz", + "integrity": "sha512-l3v6bZdpZIG4RpNKObqNqJhDvqQO5JqQlU2S+KyMCbf0xQhYCbTuhu5kKY8hndM1oKhmqq6VfPWhOSf6P3XT/g==", "cpu": [ "arm64" ], @@ -144,9 +145,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.11.tgz", - "integrity": "sha512-L7hr6VnpqZzYEDVQeaViz1QnmfFRCRm3zVtljbYi/CU6InKs6tda1J3pAvqVsbNpbGMA9AvyiyBrgjJAFCawVg==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.9.tgz", + "integrity": "sha512-o/qhS0gbIdS0AjgiT0mbdiRIyNVRD31N81c1H7NNM4p6jVkSvScqo0v9eYJ+30mPhJsL26BwSNiuFJzD/SCyuw==", "cpu": [ "x64" ], @@ -160,9 +161,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.11.tgz", - "integrity": "sha512-Mk6TZij71alyS0FGuKEKYjTZGjUw2uXi07V/AiGZW1b5grTfGx6lpsbQdystgDJqju99Osq2Ix+C7WteSnwrHg==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.9.tgz", + "integrity": "sha512-AhSVW1uIbcXssQ1D+Mn0txGgcxU32ikvIxuqkmjLC7dUpcX0JuwkPgdqTOicuBjG06GV4WvXSHcKCBUjN+oBxA==", "cpu": [ "arm" ], @@ -176,9 +177,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.11.tgz", - "integrity": "sha512-OKU0ajh9Xu7Pd1MlSq8Xqj5SJEV+4yVnALydPTDrrmTyvU72P8mTRJgZMilHw7H+Jqc0utryjNOwlJ/+fOkwGw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.9.tgz", + "integrity": "sha512-o3bvDJn9txfMxrCVJATbL3NeksMT9MGqSN7vTeG9g+387rDzfUiWpF5CN/L0MoI3QTicTydEDOx0PVX8/q+nCA==", "cpu": [ "arm64" ], @@ -192,9 +193,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.11.tgz", - "integrity": "sha512-pr1/tdDfgQQ9hp2IskSKMuwkx2X4jR7iHLbqEmmj/lPLKeoa6AUulnglGY4y0OPo+0eAYd6DzWp7ve3KI4lOCA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.9.tgz", + "integrity": "sha512-fh3Eb+jMHDJUd08vEYL8swRT7zJo4lhrcG8NYuosHVeT49XQ0Bn9xLMtgtYXjCw5aB11aphAUwnzawvDqJCqTQ==", "cpu": [ "ia32" ], @@ -208,9 +209,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.11.tgz", - "integrity": "sha512-2MCYdDBh9R+R1xuBFiApgkbp/tW1uV+aVeefKYqWSEk3o6MHzWo1FxEGA4dSnC+kThSBOMVpCV9z4/DPouA3bQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.9.tgz", + "integrity": "sha512-+DvqOzQLkXonfQTHo4PTlbiTCfz0Rx6oYn3fQrUlPX2PffGOth4HjuP4jHeFbw0YFfOErhjM6n481nB4VTmmFQ==", "cpu": [ "loong64" ], @@ -224,9 +225,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.11.tgz", - "integrity": "sha512-IyotdnRg0J8F9FKttYe3cy/M9ZJ5W/Gm6whH08sbXMxRVKs/TyyoqFIA8oT1MzR+si6GLlRpcF7JbUnOXssjPA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.9.tgz", + "integrity": "sha512-9O0HhtxRzx9OOqavv7kIONncJXxhzrbDFmOD+cJ/3UUsy8dn52J6X2xCeUOxbmEOXYP2K+uha7b1AXG/URhF5Q==", "cpu": [ "mips64el" ], @@ -240,9 +241,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.11.tgz", - "integrity": "sha512-NUMtxvb0j41UL8yf8VnTMNbCQxKqIPmF0Wf/N44UrxpKE8iCNmWT95Wt98Ivr2ebHdz+V3kptlgBuZNYcJLI6g==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.9.tgz", + "integrity": "sha512-tOwSTDZ0X5rcYK3OyfJVf4fFlvYLv3HGCOJxdE9gZVeRkXXd6O9CJ/A4Li1Tt9JQs9kJcFWCXxCwhY70h+t9iw==", "cpu": [ "ppc64" ], @@ -256,9 +257,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.11.tgz", - "integrity": "sha512-03/B26az/JezvVkgck+lhauP13t6RqzCQgnrkBCBrXXpX+2r02DfSU43BEhpErJrsrDA8GXSE/rvsfbGCX6OvA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.9.tgz", + "integrity": "sha512-mmirCaZItLSPw7loFPHvdDXO0A2I+cYOQ96eerbWEjqi9V4u+vvYSoUR3Or7HLe1JUZS+T0YWN+jPUASc1hqzg==", "cpu": [ "riscv64" ], @@ -272,9 +273,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.11.tgz", - "integrity": "sha512-Xs2tRB0fgly4XfC4FMv1Fd699AMEH8BClp36mzqRuVzm/285XIJaK5cPEZ9cLLn9ukNHdvvSX/83u5uS1BCd8g==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.9.tgz", + "integrity": "sha512-zuL5TDhxstsvxYVZ1McsnfNrO6vlpZmxiNShJmYuYPt8COBJ/4iRkwHZ5Rbf1OkEVazB3/WASNtopv1/Gq19IQ==", "cpu": [ "s390x" ], @@ -288,9 +289,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.11.tgz", - "integrity": "sha512-CiNialxsjJllrG3ggzOKzSaqQK/De/Mv4g/3r7jxLt01GLerPh0Q3TVTndFG9VfOrR1PdN7Fz5AOV3bE6Isd1Q==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.9.tgz", + "integrity": "sha512-jVa5NKqwBmq57aNDZOSnNuRTV5GrI93HdjTlyQyRrOs7OSEQq2r9NyaGd6KmzuxLz19XTanFt4WeGoLnjFT1Ug==", "cpu": [ "x64" ], @@ -304,9 +305,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.11.tgz", - "integrity": "sha512-PiljZi6QZ3Pz0pL8rfJqPln8F/a3mEJwh2vhBb1kDYLniLufo9/7AInb/ZyhvgR7FxUQluUYyz64owPomgaLJA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.9.tgz", + "integrity": "sha512-BRoQyPJ7aiQ7USFCtGmmrYTbRDa9muZAwoYchfqspd+ef8n2kKcXGQ0K2OqcLEqNFOwhLpAY4y4YAl22FbP+BA==", "cpu": [ "x64" ], @@ -320,9 +321,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.11.tgz", - "integrity": "sha512-Nyk8aJM+w6NoS4RGQJ0ybb516jEIbEVlLvhRIdpCssUuqKU0lr9lJPHnFY2QqyoVaJkd6VxaHOBU/v/ieuiENQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.9.tgz", + "integrity": "sha512-gDCVw9M2k8tyA9GokQEeh+L2gl0EZeGIIj5WB5H97Mb0ADq5Ea8vWyQs2iY1Q/tebcuP8cUoOZWxkCsmlyl1NA==", "cpu": [ "x64" ], @@ -336,9 +337,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.11.tgz", - "integrity": "sha512-shxBLdNJecr7KxuyZQ19idBU8x7Mq7m+N5Fj8ROWMWQbDdjSjlBPxz7EZJIxSh7FUgSMKl7qSCCVaczXrta4MQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.9.tgz", + "integrity": "sha512-f89/xt0Hzp7POTDJYSJvotyFXatxXBGXJyFFTQGJW+NTYhFHaMcrrb41OB3L8sfzYi3PSlM3pZnwlEk1QiBX2g==", "cpu": [ "x64" ], @@ -352,9 +353,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.11.tgz", - "integrity": "sha512-vyTbfoEBn7cGXK8writbsB+G2wyRoOA+EbTNQ9cu5lyLU65sfWetCaL8T7mX338AN8tTbCYl6ce5YRKTonpA3w==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.9.tgz", + "integrity": "sha512-jrU/SBHXc3NPS5mPgYeL8pgIrBTwdrnaoLtygkQtuPzz0oBjsTyxV46tZoOctv4Q1Jq06+4zsJWkTzVaoik8FQ==", "cpu": [ "arm64" ], @@ -368,9 +369,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.11.tgz", - "integrity": "sha512-ATGCGc52LNqakUE9i54RzFC4lm70UTcTW721AFGjQotc6uCg7sf7QeRd05wD5tLBFafHdMSZv4rsU/Nh7LT/rQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.9.tgz", + "integrity": "sha512-/oVEu7DurNFM0E6qA18R8xkbYU6xilaTnqG65rqm4XJo8ONuqTzLnj/93bQps7RJIxPI+yKPl0Zx2KifvWUa5A==", "cpu": [ "ia32" ], @@ -384,9 +385,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.11.tgz", - "integrity": "sha512-7NcClJIctrO3iRu5CCqwdSBePm8bL2Iu1DYsuOnxuYJ+a1Kv3Wn3MzNdJIrUPLi1yADVwRliRUU/jtMC/tJnJA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.9.tgz", + "integrity": "sha512-PLKuXKwlPljFrzzsUO6hHNWcYeE4a8FOX/6AJ7U7PajgKqtBGw2mGYxsfJHGb+UdfgdOapIOsYPgzMTG+SGDrg==", "cpu": [ "x64" ], @@ -400,9 +401,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -555,9 +556,9 @@ "dev": true }, "node_modules/@types/he": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/he/-/he-1.1.2.tgz", - "integrity": "sha512-kSJPcLO1x+oolc0R89pUl2kozldQ/fVQ1C1p5mp8fPoLdF/ZcBvckaTC2M8xXh3GYendXvCpy5m/a2eSbfgNgw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.0.tgz", + "integrity": "sha512-uH2smqTN4uGReAiKedIVzoLUAXIYLBTbSofhx3hbNqj74Ua6KqFsLYszduTrLCMEAEAozF73DbGi/SC1bzQq4g==", "dev": true }, "node_modules/@types/json-schema": { @@ -567,9 +568,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true }, "node_modules/@types/semver": { @@ -591,15 +592,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.1.tgz", - "integrity": "sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/type-utils": "5.47.1", - "@typescript-eslint/utils": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -624,14 +626,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.1.tgz", - "integrity": "sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/typescript-estree": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "debug": "^4.3.4" }, "engines": { @@ -651,13 +653,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz", - "integrity": "sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/visitor-keys": "5.47.1" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -668,13 +670,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.47.1.tgz", - "integrity": "sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.47.1", - "@typescript-eslint/utils": "5.47.1", + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -695,9 +697,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.1.tgz", - "integrity": "sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -708,13 +710,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz", - "integrity": "sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/visitor-keys": "5.47.1", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -735,16 +737,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.1.tgz", - "integrity": "sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/typescript-estree": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" @@ -761,12 +763,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz", - "integrity": "sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.47.1", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -778,9 +780,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "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, "bin": { "acorn": "bin/acorn" @@ -1031,9 +1033,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "funding": [ { @@ -1046,10 +1048,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -1106,6 +1108,16 @@ "node": ">=6" } }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -1119,9 +1131,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001456", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", "dev": true, "funding": [ { @@ -1189,6 +1201,18 @@ "node": ">= 6" } }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1360,12 +1384,12 @@ } }, "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -1381,22 +1405,22 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -1411,7 +1435,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -1568,9 +1592,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", + "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==", "dev": true }, "node_modules/end-of-stream": { @@ -1592,9 +1616,9 @@ } }, "node_modules/esbuild": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.11.tgz", - "integrity": "sha512-Al0hhRUz/cCDvDp9VZp1L500HZZQ/HLjgTnQTmnW97+PoLmw+PuvB3e19JHYZtWnrxoh3qYrN/0tiRIbrE2oVQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.9.tgz", + "integrity": "sha512-m3b2MR76QkwKPw/KQBlBJVaIncfQhhXsDMCFPoyqEOIziV+O7BAKqOYT1NbHsnFUX0/98CLWxUfM5stzh4yq4Q==", "dev": true, "hasInstallScript": true, "bin": { @@ -1604,430 +1628,44 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.16.11", - "@esbuild/android-arm64": "0.16.11", - "@esbuild/android-x64": "0.16.11", - "@esbuild/darwin-arm64": "0.16.11", - "@esbuild/darwin-x64": "0.16.11", - "@esbuild/freebsd-arm64": "0.16.11", - "@esbuild/freebsd-x64": "0.16.11", - "@esbuild/linux-arm": "0.16.11", - "@esbuild/linux-arm64": "0.16.11", - "@esbuild/linux-ia32": "0.16.11", - "@esbuild/linux-loong64": "0.16.11", - "@esbuild/linux-mips64el": "0.16.11", - "@esbuild/linux-ppc64": "0.16.11", - "@esbuild/linux-riscv64": "0.16.11", - "@esbuild/linux-s390x": "0.16.11", - "@esbuild/linux-x64": "0.16.11", - "@esbuild/netbsd-x64": "0.16.11", - "@esbuild/openbsd-x64": "0.16.11", - "@esbuild/sunos-x64": "0.16.11", - "@esbuild/win32-arm64": "0.16.11", - "@esbuild/win32-ia32": "0.16.11", - "@esbuild/win32-x64": "0.16.11" + "@esbuild/android-arm": "0.17.9", + "@esbuild/android-arm64": "0.17.9", + "@esbuild/android-x64": "0.17.9", + "@esbuild/darwin-arm64": "0.17.9", + "@esbuild/darwin-x64": "0.17.9", + "@esbuild/freebsd-arm64": "0.17.9", + "@esbuild/freebsd-x64": "0.17.9", + "@esbuild/linux-arm": "0.17.9", + "@esbuild/linux-arm64": "0.17.9", + "@esbuild/linux-ia32": "0.17.9", + "@esbuild/linux-loong64": "0.17.9", + "@esbuild/linux-mips64el": "0.17.9", + "@esbuild/linux-ppc64": "0.17.9", + "@esbuild/linux-riscv64": "0.17.9", + "@esbuild/linux-s390x": "0.17.9", + "@esbuild/linux-x64": "0.17.9", + "@esbuild/netbsd-x64": "0.17.9", + "@esbuild/openbsd-x64": "0.17.9", + "@esbuild/sunos-x64": "0.17.9", + "@esbuild/win32-arm64": "0.17.9", + "@esbuild/win32-ia32": "0.17.9", + "@esbuild/win32-x64": "0.17.9" } }, "node_modules/esbuild-sass-plugin": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.4.4.tgz", - "integrity": "sha512-nxyscxQbvKcy12rLOh52zDqk0anOvWIdUcAlvaoCVQcpmR9GkrFbyGLsRNpoEYyB3Rho9Raq+YE6A6ehMDkN0g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.5.0.tgz", + "integrity": "sha512-SKWcvZwB+3/3eLhSCscJfb9AEOgL3oYlwOaItnXpXNPVj9Hc1Iwf5Cx4muUd+H+6zKyUwviAtVdRwcUsocUYgA==", "dev": true, "dependencies": { - "esbuild": "^0.15.17", + "resolve": "^1.22.1" + }, + "peerDependencies": { + "esbuild": "^0.16.17", "resolve": "^1.22.1", "sass": "^1.56.1" } }, - "node_modules/esbuild-sass-plugin/node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sass-plugin/node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.11.tgz", - "integrity": "sha512-j2xsG1OETgCe+OBA54DG5vLuGjmMZtQvyxt+rTw2aYK/RqjcG/F+UDdj43uoUOv8lSRC3lM4XpKLOVZfY/82yA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -2050,12 +1688,12 @@ } }, "node_modules/eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2194,9 +1832,9 @@ } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -2300,9 +1938,9 @@ "dev": true }, "node_modules/fast-xml-parser": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.12.tgz", - "integrity": "sha512-/Nmo3823Rfx7UTJosQNz6hBVbszfv1Unb7A4iNJZhvCGCgtIHv/uODmrYIH8vc05+XKZ4hNIOv6SlBejvJgATw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", + "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", "dev": true, "dependencies": { "strnum": "^1.0.5" @@ -2316,9 +1954,9 @@ } }, "node_modules/fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -2462,9 +2100,9 @@ } }, "node_modules/globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "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" @@ -2538,6 +2176,33 @@ "he": "bin/he" } }, + "node_modules/html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "dependencies": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier/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/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -2574,9 +2239,9 @@ "dev": true }, "node_modules/immutable": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.1.tgz", - "integrity": "sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", "dev": true }, "node_modules/import-fresh": { @@ -2696,9 +2361,9 @@ "dev": true }, "node_modules/js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", "dev": true, "funding": { "type": "opencollective", @@ -2919,6 +2584,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2978,9 +2649,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3029,10 +2700,19 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, "node_modules/node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "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": { @@ -3130,6 +2810,15 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3203,9 +2892,9 @@ } }, "node_modules/postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "funding": [ { @@ -3241,12 +2930,12 @@ } }, "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -3339,9 +3028,9 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, "dependencies": { "browserslist": "^4.21.4", @@ -3571,9 +3260,9 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, "dependencies": { "browserslist": "^4.21.4", @@ -3667,9 +3356,9 @@ "dev": true }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -3728,9 +3417,9 @@ } }, "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -3763,6 +3452,15 @@ "url": "https://github.com/sponsors/mysticatea" } }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -3858,9 +3556,9 @@ ] }, "node_modules/sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "version": "1.58.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.3.tgz", + "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -4251,9 +3949,9 @@ } }, "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, "node_modules/tsutils": { @@ -4302,9 +4000,9 @@ } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -4314,6 +4012,18 @@ "node": ">=4.2.0" } }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -4349,6 +4059,12 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4479,7 +4195,7 @@ } }, "treb-grid": { - "version": "16.0.0", + "version": "16.0.2", "dev": true }, "treb-parser": { @@ -4502,163 +4218,163 @@ } }, "@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.9.tgz", + "integrity": "sha512-efHnZVJldh2e18fK40RYzYTTRDzZ0QgL9V/73PSsAH43BauvjVwkqSHPhbcn77H0EQOUM2JPuO/XCg7jcKt94A==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.11.tgz", - "integrity": "sha512-CPwhZd15PasQSlkFuZv1st37xvuBeklztfb9y2GZWLQu59zcMIDkZVSEz/TTIxzt811+eJfblg5HhP49iVVDWQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.9.tgz", + "integrity": "sha512-bqds/6lXsCA7JhHGKIM/R80sy3BAIBR0HWyeas0bW57QVHT3Rz5sf4oUVS4ZsmN+J+8IgNnaIT2PXZ0pnRcLKg==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.11.tgz", - "integrity": "sha512-vbFn+0JXX6FkKq+0sNeA6aF2QhuOt9ZkBl+DSyqKIF+Ms58lUOhbqSwberKWQDm0udgOp3d/LhOFTYmpvmlZmA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.9.tgz", + "integrity": "sha512-pP+MLR/k8BAYZuOqEkjAaQd9/pzbNS52pNFiXgdiCHb/16u6o7s0rPF8vPlVg+1s8ii+M6HrymL4534xYwCQCA==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.11.tgz", - "integrity": "sha512-1tqsIG6AySZ9njT8V2ddH1F/J01zX+0obPCpP0uD9TMIUlAA5WUF/+abFlnIsNY4jACcbN/13NUbLRWE9bayjw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.9.tgz", + "integrity": "sha512-Gdbnu/RCIGHE/zqLHZwujTXnHz0lBQxK9+llrbxm5tO46CMhqiOhUuA5Zt6q2imULNoPJtxmhspHSAQtcx2pkw==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.11.tgz", - "integrity": "sha512-Gqx2/nYqnK46dwEDPGv3SwLqgLIZQJ7m2xNoNRzO50VZPvoCWSUqDaoirrZZf7uVfl+fxHoZBcdQJx2gOdxffQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.9.tgz", + "integrity": "sha512-GEZsUsDjJnCTVWuaq1cJ1Y3oV9GmNj/h4j6jA29VYSip7S7nSSiAo4dQFBJg734QKZZFos8fHc4abJpoN2ebGw==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.11.tgz", - "integrity": "sha512-58FTdlgIQ3ZxFtGphjbIBmo7kfDhQih/PlfAnKraAcCDZOYXWcRFmHJtW+EVg32IIxuEAqhLAzCgrqpm5o8Wlw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.9.tgz", + "integrity": "sha512-l3v6bZdpZIG4RpNKObqNqJhDvqQO5JqQlU2S+KyMCbf0xQhYCbTuhu5kKY8hndM1oKhmqq6VfPWhOSf6P3XT/g==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.11.tgz", - "integrity": "sha512-L7hr6VnpqZzYEDVQeaViz1QnmfFRCRm3zVtljbYi/CU6InKs6tda1J3pAvqVsbNpbGMA9AvyiyBrgjJAFCawVg==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.9.tgz", + "integrity": "sha512-o/qhS0gbIdS0AjgiT0mbdiRIyNVRD31N81c1H7NNM4p6jVkSvScqo0v9eYJ+30mPhJsL26BwSNiuFJzD/SCyuw==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.11.tgz", - "integrity": "sha512-Mk6TZij71alyS0FGuKEKYjTZGjUw2uXi07V/AiGZW1b5grTfGx6lpsbQdystgDJqju99Osq2Ix+C7WteSnwrHg==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.9.tgz", + "integrity": "sha512-AhSVW1uIbcXssQ1D+Mn0txGgcxU32ikvIxuqkmjLC7dUpcX0JuwkPgdqTOicuBjG06GV4WvXSHcKCBUjN+oBxA==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.11.tgz", - "integrity": "sha512-OKU0ajh9Xu7Pd1MlSq8Xqj5SJEV+4yVnALydPTDrrmTyvU72P8mTRJgZMilHw7H+Jqc0utryjNOwlJ/+fOkwGw==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.9.tgz", + "integrity": "sha512-o3bvDJn9txfMxrCVJATbL3NeksMT9MGqSN7vTeG9g+387rDzfUiWpF5CN/L0MoI3QTicTydEDOx0PVX8/q+nCA==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.11.tgz", - "integrity": "sha512-pr1/tdDfgQQ9hp2IskSKMuwkx2X4jR7iHLbqEmmj/lPLKeoa6AUulnglGY4y0OPo+0eAYd6DzWp7ve3KI4lOCA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.9.tgz", + "integrity": "sha512-fh3Eb+jMHDJUd08vEYL8swRT7zJo4lhrcG8NYuosHVeT49XQ0Bn9xLMtgtYXjCw5aB11aphAUwnzawvDqJCqTQ==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.11.tgz", - "integrity": "sha512-2MCYdDBh9R+R1xuBFiApgkbp/tW1uV+aVeefKYqWSEk3o6MHzWo1FxEGA4dSnC+kThSBOMVpCV9z4/DPouA3bQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.9.tgz", + "integrity": "sha512-+DvqOzQLkXonfQTHo4PTlbiTCfz0Rx6oYn3fQrUlPX2PffGOth4HjuP4jHeFbw0YFfOErhjM6n481nB4VTmmFQ==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.11.tgz", - "integrity": "sha512-IyotdnRg0J8F9FKttYe3cy/M9ZJ5W/Gm6whH08sbXMxRVKs/TyyoqFIA8oT1MzR+si6GLlRpcF7JbUnOXssjPA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.9.tgz", + "integrity": "sha512-9O0HhtxRzx9OOqavv7kIONncJXxhzrbDFmOD+cJ/3UUsy8dn52J6X2xCeUOxbmEOXYP2K+uha7b1AXG/URhF5Q==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.11.tgz", - "integrity": "sha512-NUMtxvb0j41UL8yf8VnTMNbCQxKqIPmF0Wf/N44UrxpKE8iCNmWT95Wt98Ivr2ebHdz+V3kptlgBuZNYcJLI6g==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.9.tgz", + "integrity": "sha512-tOwSTDZ0X5rcYK3OyfJVf4fFlvYLv3HGCOJxdE9gZVeRkXXd6O9CJ/A4Li1Tt9JQs9kJcFWCXxCwhY70h+t9iw==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.11.tgz", - "integrity": "sha512-03/B26az/JezvVkgck+lhauP13t6RqzCQgnrkBCBrXXpX+2r02DfSU43BEhpErJrsrDA8GXSE/rvsfbGCX6OvA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.9.tgz", + "integrity": "sha512-mmirCaZItLSPw7loFPHvdDXO0A2I+cYOQ96eerbWEjqi9V4u+vvYSoUR3Or7HLe1JUZS+T0YWN+jPUASc1hqzg==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.11.tgz", - "integrity": "sha512-Xs2tRB0fgly4XfC4FMv1Fd699AMEH8BClp36mzqRuVzm/285XIJaK5cPEZ9cLLn9ukNHdvvSX/83u5uS1BCd8g==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.9.tgz", + "integrity": "sha512-zuL5TDhxstsvxYVZ1McsnfNrO6vlpZmxiNShJmYuYPt8COBJ/4iRkwHZ5Rbf1OkEVazB3/WASNtopv1/Gq19IQ==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.11.tgz", - "integrity": "sha512-CiNialxsjJllrG3ggzOKzSaqQK/De/Mv4g/3r7jxLt01GLerPh0Q3TVTndFG9VfOrR1PdN7Fz5AOV3bE6Isd1Q==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.9.tgz", + "integrity": "sha512-jVa5NKqwBmq57aNDZOSnNuRTV5GrI93HdjTlyQyRrOs7OSEQq2r9NyaGd6KmzuxLz19XTanFt4WeGoLnjFT1Ug==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.11.tgz", - "integrity": "sha512-PiljZi6QZ3Pz0pL8rfJqPln8F/a3mEJwh2vhBb1kDYLniLufo9/7AInb/ZyhvgR7FxUQluUYyz64owPomgaLJA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.9.tgz", + "integrity": "sha512-BRoQyPJ7aiQ7USFCtGmmrYTbRDa9muZAwoYchfqspd+ef8n2kKcXGQ0K2OqcLEqNFOwhLpAY4y4YAl22FbP+BA==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.11.tgz", - "integrity": "sha512-Nyk8aJM+w6NoS4RGQJ0ybb516jEIbEVlLvhRIdpCssUuqKU0lr9lJPHnFY2QqyoVaJkd6VxaHOBU/v/ieuiENQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.9.tgz", + "integrity": "sha512-gDCVw9M2k8tyA9GokQEeh+L2gl0EZeGIIj5WB5H97Mb0ADq5Ea8vWyQs2iY1Q/tebcuP8cUoOZWxkCsmlyl1NA==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.11.tgz", - "integrity": "sha512-shxBLdNJecr7KxuyZQ19idBU8x7Mq7m+N5Fj8ROWMWQbDdjSjlBPxz7EZJIxSh7FUgSMKl7qSCCVaczXrta4MQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.9.tgz", + "integrity": "sha512-f89/xt0Hzp7POTDJYSJvotyFXatxXBGXJyFFTQGJW+NTYhFHaMcrrb41OB3L8sfzYi3PSlM3pZnwlEk1QiBX2g==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.11.tgz", - "integrity": "sha512-vyTbfoEBn7cGXK8writbsB+G2wyRoOA+EbTNQ9cu5lyLU65sfWetCaL8T7mX338AN8tTbCYl6ce5YRKTonpA3w==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.9.tgz", + "integrity": "sha512-jrU/SBHXc3NPS5mPgYeL8pgIrBTwdrnaoLtygkQtuPzz0oBjsTyxV46tZoOctv4Q1Jq06+4zsJWkTzVaoik8FQ==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.11.tgz", - "integrity": "sha512-ATGCGc52LNqakUE9i54RzFC4lm70UTcTW721AFGjQotc6uCg7sf7QeRd05wD5tLBFafHdMSZv4rsU/Nh7LT/rQ==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.9.tgz", + "integrity": "sha512-/oVEu7DurNFM0E6qA18R8xkbYU6xilaTnqG65rqm4XJo8ONuqTzLnj/93bQps7RJIxPI+yKPl0Zx2KifvWUa5A==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.11.tgz", - "integrity": "sha512-7NcClJIctrO3iRu5CCqwdSBePm8bL2Iu1DYsuOnxuYJ+a1Kv3Wn3MzNdJIrUPLi1yADVwRliRUU/jtMC/tJnJA==", + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.9.tgz", + "integrity": "sha512-PLKuXKwlPljFrzzsUO6hHNWcYeE4a8FOX/6AJ7U7PajgKqtBGw2mGYxsfJHGb+UdfgdOapIOsYPgzMTG+SGDrg==", "dev": true, "optional": true }, "@eslint/eslintrc": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.0.tgz", - "integrity": "sha512-7yfvXy6MWLgWSFsLhz5yH3iQ52St8cdUY6FoGieKkRDVxuxmrNuUetIuu6cmjNWwniUHiWXjxCr5tTXDrbYS5A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -4780,9 +4496,9 @@ "dev": true }, "@types/he": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@types/he/-/he-1.1.2.tgz", - "integrity": "sha512-kSJPcLO1x+oolc0R89pUl2kozldQ/fVQ1C1p5mp8fPoLdF/ZcBvckaTC2M8xXh3GYendXvCpy5m/a2eSbfgNgw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/he/-/he-1.2.0.tgz", + "integrity": "sha512-uH2smqTN4uGReAiKedIVzoLUAXIYLBTbSofhx3hbNqj74Ua6KqFsLYszduTrLCMEAEAozF73DbGi/SC1bzQq4g==", "dev": true }, "@types/json-schema": { @@ -4792,9 +4508,9 @@ "dev": true }, "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", "dev": true }, "@types/semver": { @@ -4816,15 +4532,16 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.47.1.tgz", - "integrity": "sha512-r4RZ2Jl9kcQN7K/dcOT+J7NAimbiis4sSM9spvWimsBvDegMhKLA5vri2jG19PmIPbDjPeWzfUPQ2hjEzA4Nmg==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz", + "integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/type-utils": "5.47.1", - "@typescript-eslint/utils": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/type-utils": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", @@ -4833,53 +4550,53 @@ } }, "@typescript-eslint/parser": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.47.1.tgz", - "integrity": "sha512-9Vb+KIv29r6GPu4EboWOnQM7T+UjpjXvjCPhNORlgm40a9Ia9bvaPJswvtae1gip2QEeVeGh6YquqAzEgoRAlw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz", + "integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/typescript-estree": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.47.1.tgz", - "integrity": "sha512-9hsFDsgUwrdOoW1D97Ewog7DYSHaq4WKuNs0LHF9RiCmqB0Z+XRR4Pf7u7u9z/8CciHuJ6yxNws1XznI3ddjEw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz", + "integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/visitor-keys": "5.47.1" + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0" } }, "@typescript-eslint/type-utils": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.47.1.tgz", - "integrity": "sha512-/UKOeo8ee80A7/GJA427oIrBi/Gd4osk/3auBUg4Rn9EahFpevVV1mUK8hjyQD5lHPqX397x6CwOk5WGh1E/1w==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz", + "integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.47.1", - "@typescript-eslint/utils": "5.47.1", + "@typescript-eslint/typescript-estree": "5.52.0", + "@typescript-eslint/utils": "5.52.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.47.1.tgz", - "integrity": "sha512-CmALY9YWXEpwuu6377ybJBZdtSAnzXLSQcxLSqSQSbC7VfpMu/HLVdrnVJj7ycI138EHqocW02LPJErE35cE9A==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz", + "integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.47.1.tgz", - "integrity": "sha512-4+ZhFSuISAvRi2xUszEj0xXbNTHceV9GbH9S8oAD2a/F9SW57aJNQVOCxG8GPfSWH/X4eOPdMEU2jYVuWKEpWA==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz", + "integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/visitor-keys": "5.47.1", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/visitor-keys": "5.52.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -4888,35 +4605,35 @@ } }, "@typescript-eslint/utils": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.47.1.tgz", - "integrity": "sha512-l90SdwqfmkuIVaREZ2ykEfCezepCLxzWMo5gVfcJsJCaT4jHT+QjgSkYhs5BMQmWqE9k3AtIfk4g211z/sTMVw==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz", + "integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.47.1", - "@typescript-eslint/types": "5.47.1", - "@typescript-eslint/typescript-estree": "5.47.1", + "@typescript-eslint/scope-manager": "5.52.0", + "@typescript-eslint/types": "5.52.0", + "@typescript-eslint/typescript-estree": "5.52.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { - "version": "5.47.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.47.1.tgz", - "integrity": "sha512-rF3pmut2JCCjh6BLRhNKdYjULMb1brvoaiWDlHfLNVgmnZ0sBVJrs3SyaKE1XoDDnJuAx/hDQryHYmPUuNq0ig==", + "version": "5.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz", + "integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.47.1", + "@typescript-eslint/types": "5.52.0", "eslint-visitor-keys": "^3.3.0" } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "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 }, "acorn-jsx": { @@ -5113,15 +4830,15 @@ } }, "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer": { @@ -5152,6 +4869,16 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -5165,9 +4892,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001441", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", - "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "version": "1.0.30001456", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001456.tgz", + "integrity": "sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==", "dev": true }, "chalk": { @@ -5207,6 +4934,15 @@ } } }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -5334,33 +5070,33 @@ "dev": true }, "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dev": true, "requires": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -5375,7 +5111,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -5483,9 +5219,9 @@ } }, "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "version": "1.4.302", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", + "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==", "dev": true }, "end-of-stream": { @@ -5504,232 +5240,42 @@ "dev": true }, "esbuild": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.11.tgz", - "integrity": "sha512-Al0hhRUz/cCDvDp9VZp1L500HZZQ/HLjgTnQTmnW97+PoLmw+PuvB3e19JHYZtWnrxoh3qYrN/0tiRIbrE2oVQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.16.11", - "@esbuild/android-arm64": "0.16.11", - "@esbuild/android-x64": "0.16.11", - "@esbuild/darwin-arm64": "0.16.11", - "@esbuild/darwin-x64": "0.16.11", - "@esbuild/freebsd-arm64": "0.16.11", - "@esbuild/freebsd-x64": "0.16.11", - "@esbuild/linux-arm": "0.16.11", - "@esbuild/linux-arm64": "0.16.11", - "@esbuild/linux-ia32": "0.16.11", - "@esbuild/linux-loong64": "0.16.11", - "@esbuild/linux-mips64el": "0.16.11", - "@esbuild/linux-ppc64": "0.16.11", - "@esbuild/linux-riscv64": "0.16.11", - "@esbuild/linux-s390x": "0.16.11", - "@esbuild/linux-x64": "0.16.11", - "@esbuild/netbsd-x64": "0.16.11", - "@esbuild/openbsd-x64": "0.16.11", - "@esbuild/sunos-x64": "0.16.11", - "@esbuild/win32-arm64": "0.16.11", - "@esbuild/win32-ia32": "0.16.11", - "@esbuild/win32-x64": "0.16.11" - }, - "dependencies": { - "@esbuild/android-arm": { - "version": "0.16.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.11.tgz", - "integrity": "sha512-j2xsG1OETgCe+OBA54DG5vLuGjmMZtQvyxt+rTw2aYK/RqjcG/F+UDdj43uoUOv8lSRC3lM4XpKLOVZfY/82yA==", - "dev": true, - "optional": true - } + "version": "0.17.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.9.tgz", + "integrity": "sha512-m3b2MR76QkwKPw/KQBlBJVaIncfQhhXsDMCFPoyqEOIziV+O7BAKqOYT1NbHsnFUX0/98CLWxUfM5stzh4yq4Q==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.9", + "@esbuild/android-arm64": "0.17.9", + "@esbuild/android-x64": "0.17.9", + "@esbuild/darwin-arm64": "0.17.9", + "@esbuild/darwin-x64": "0.17.9", + "@esbuild/freebsd-arm64": "0.17.9", + "@esbuild/freebsd-x64": "0.17.9", + "@esbuild/linux-arm": "0.17.9", + "@esbuild/linux-arm64": "0.17.9", + "@esbuild/linux-ia32": "0.17.9", + "@esbuild/linux-loong64": "0.17.9", + "@esbuild/linux-mips64el": "0.17.9", + "@esbuild/linux-ppc64": "0.17.9", + "@esbuild/linux-riscv64": "0.17.9", + "@esbuild/linux-s390x": "0.17.9", + "@esbuild/linux-x64": "0.17.9", + "@esbuild/netbsd-x64": "0.17.9", + "@esbuild/openbsd-x64": "0.17.9", + "@esbuild/sunos-x64": "0.17.9", + "@esbuild/win32-arm64": "0.17.9", + "@esbuild/win32-ia32": "0.17.9", + "@esbuild/win32-x64": "0.17.9" } }, "esbuild-sass-plugin": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.4.4.tgz", - "integrity": "sha512-nxyscxQbvKcy12rLOh52zDqk0anOvWIdUcAlvaoCVQcpmR9GkrFbyGLsRNpoEYyB3Rho9Raq+YE6A6ehMDkN0g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/esbuild-sass-plugin/-/esbuild-sass-plugin-2.5.0.tgz", + "integrity": "sha512-SKWcvZwB+3/3eLhSCscJfb9AEOgL3oYlwOaItnXpXNPVj9Hc1Iwf5Cx4muUd+H+6zKyUwviAtVdRwcUsocUYgA==", "dev": true, "requires": { - "esbuild": "^0.15.17", - "resolve": "^1.22.1", - "sass": "^1.56.1" - }, - "dependencies": { - "@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "dev": true, - "optional": true - }, - "esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "dev": true, - "optional": true - }, - "esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "dev": true, - "optional": true - }, - "esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "dev": true, - "optional": true - }, - "esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "dev": true, - "optional": true - }, - "esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "dev": true, - "optional": true - }, - "esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "dev": true, - "optional": true - }, - "esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "dev": true, - "optional": true - }, - "esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "dev": true, - "optional": true - }, - "esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "dev": true, - "optional": true - } + "resolve": "^1.22.1" } }, "escalade": { @@ -5745,12 +5291,12 @@ "dev": true }, "eslint": { - "version": "8.30.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.30.0.tgz", - "integrity": "sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==", + "version": "8.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz", + "integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.4.0", + "@eslint/eslintrc": "^1.4.1", "@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -5854,9 +5400,9 @@ } }, "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", + "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "requires": { "estraverse": "^5.1.0" @@ -5942,18 +5488,18 @@ "dev": true }, "fast-xml-parser": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.0.12.tgz", - "integrity": "sha512-/Nmo3823Rfx7UTJosQNz6hBVbszfv1Unb7A4iNJZhvCGCgtIHv/uODmrYIH8vc05+XKZ4hNIOv6SlBejvJgATw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.1.2.tgz", + "integrity": "sha512-CDYeykkle1LiA/uqQyNwYpFbyF6Axec6YapmpUP+/RHWIoR1zKjocdvNaTsxCxZzQ6v9MLXaSYm9Qq0thv0DHg==", "dev": true, "requires": { "strnum": "^1.0.5" } }, "fastq": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.14.0.tgz", - "integrity": "sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -6063,9 +5609,9 @@ } }, "globals": { - "version": "13.19.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", - "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -6118,6 +5664,29 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "html-minifier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-4.0.0.tgz", + "integrity": "sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==", + "dev": true, + "requires": { + "camel-case": "^3.0.0", + "clean-css": "^4.2.1", + "commander": "^2.19.0", + "he": "^1.2.0", + "param-case": "^2.1.1", + "relateurl": "^0.2.7", + "uglify-js": "^3.5.1" + }, + "dependencies": { + "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 + } + } + }, "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -6137,9 +5706,9 @@ "dev": true }, "immutable": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.1.tgz", - "integrity": "sha512-7WYV7Q5BTs0nlQm7tl92rDYYoyELLKHoDMBKhrxEoiV4mrfVdRz8hzPiYOzH7yWjzoVEamxRuAqhxL2PLRwZYQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", "dev": true }, "import-fresh": { @@ -6232,9 +5801,9 @@ "dev": true }, "js-sdsl": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.2.0.tgz", - "integrity": "sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", "dev": true }, "js-yaml": { @@ -6435,6 +6004,12 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "dev": true }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6482,9 +6057,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { @@ -6518,10 +6093,19 @@ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "node-releases": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", - "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, "normalize-path": { @@ -6592,6 +6176,15 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6644,9 +6237,9 @@ "dev": true }, "postcss": { - "version": "8.4.20", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.20.tgz", - "integrity": "sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==", + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", "dev": true, "peer": true, "requires": { @@ -6666,12 +6259,12 @@ } }, "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" @@ -6726,9 +6319,9 @@ } }, "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", "dev": true, "requires": { "browserslist": "^4.21.4", @@ -6869,9 +6462,9 @@ } }, "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", "dev": true, "requires": { "browserslist": "^4.21.4", @@ -6935,9 +6528,9 @@ "dev": true }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "queue-microtask": { @@ -6976,9 +6569,9 @@ } }, "minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -7001,6 +6594,12 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -7049,9 +6648,9 @@ "dev": true }, "sass": { - "version": "1.57.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", - "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "version": "1.58.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.3.tgz", + "integrity": "sha512-Q7RaEtYf6BflYrQ+buPudKR26/lH+10EmO9bBqbmPh/KeLqv8bjpTNqxe71ocONqXq+jYiCbpPUmQMS+JJPk4A==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0", @@ -7328,9 +6927,9 @@ } }, "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, "tsutils": { @@ -7366,9 +6965,15 @@ "dev": true }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true }, "universalify": { @@ -7387,6 +6992,12 @@ "picocolors": "^1.0.0" } }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 20515c3f..7c31eb28 100644 --- a/package.json +++ b/package.json @@ -10,12 +10,13 @@ "@typescript-eslint/parser": "^5.30.4", "archiver": "^5.3.0", "cssnano": "^5.1.5", - "esbuild": "^0.16.11", + "esbuild": "^0.17.9", "esbuild-sass-plugin": "^2.0.3", "eslint": "^8.19.0", "fast-xml-parser": "^4.0.7", "fs-extra": "^11.1.0", "he": "^1.2.0", + "html-minifier": "^4.0.0", "jszip": "^3.6.0", "sass": "^1.53.0", "treb-base-types": "file:treb-base-types", diff --git a/treb-embed/custom-element/content-types.d.ts b/treb-embed/custom-element/content-types.d.ts new file mode 100644 index 00000000..93bb19d6 --- /dev/null +++ b/treb-embed/custom-element/content-types.d.ts @@ -0,0 +1,13 @@ + +/** imported html as text */ +declare module '*.html' { + const text: string; + export default text; +} + +/** imported css as text */ +declare module '*.scss' { + const text: string; + export default text; +} + diff --git a/treb-embed/custom-element/layout-template.html b/treb-embed/custom-element/layout-template.html new file mode 100644 index 00000000..71851f08 --- /dev/null +++ b/treb-embed/custom-element/layout-template.html @@ -0,0 +1,132 @@ + +
+ + + + + + + +
+ + + +
+ + + +
+
+ + + +
+
+
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+
+ +
+ + +
+ +
+ +
+
+
+
+
+ +
+ +
+ + + + + +
+ + + + + +
+ +
+ + + +
+ Dialog is whack +
diff --git a/treb-embed/custom-element/spreadsheet-constructor.ts b/treb-embed/custom-element/spreadsheet-constructor.ts new file mode 100644 index 00000000..eae3f1f2 --- /dev/null +++ b/treb-embed/custom-element/spreadsheet-constructor.ts @@ -0,0 +1,352 @@ + +import html from './layout-template.html'; +import css from './style-main.scss'; + +import css1 from 'treb-grid/style/grid-layout.scss'; +import css2 from 'treb-grid/style/grid.scss'; +import css3 from '../style/embed.scss'; + +import { EmbeddedSpreadsheet } from '../src/embedded-spreadsheet'; +import type { EmbeddedSpreadsheetOptions } from 'treb-embed/src/options'; + +interface ElementMap { + toolbar: HTMLElement, + sidebar: HTMLElement, + dialog: HTMLElement, + container: HTMLElement, + spreadsheet: HTMLElement, + 'toggle-sidebar-button': HTMLElement, +} + +export class SpreadsheetConstructor { + + protected static attached_stylesheets = false; + + public elements: Partial = {}; + + public sheet?: EmbeddedSpreadsheet; + + /** + * this is just lazy, we could use a list + */ + public MapElements(element: Element|ShadowRoot) { + for (const child of Array.from(element.children)) { + if (child.id) { + this.elements[child.id as keyof ElementMap] = child as HTMLElement; + } + if (child.nodeType === 1) { + this.MapElements(child); + } + } + } + + public ConstructElement(root: HTMLElement) { + + if (!SpreadsheetConstructor.attached_stylesheets) { + + const stylesheets: CSSStyleSheet[] = []; + + for (const text of [css, css1, css2, css3]) { + const sheet = new CSSStyleSheet(); + sheet.replaceSync(text); + stylesheets.push(sheet); + } + + document.adoptedStyleSheets = [...document.adoptedStyleSheets, ...stylesheets]; + SpreadsheetConstructor.attached_stylesheets = true; + + } + + root.classList.add('treb-root-node'); + root.innerHTML = html; + + + /* + + root.attachShadow({ mode: 'open' }); + if (root.shadowRoot) { + + const sheet = new CSSStyleSheet(); + sheet.replaceSync(css); + + const stylesheets: CSSStyleSheet[] = [sheet]; + + for (const text of [css1, css2, css3]) { + const sheet = new CSSStyleSheet(); + sheet.replaceSync(text); + stylesheets.push(sheet); + } + + root.shadowRoot.adoptedStyleSheets = stylesheets; + root.shadowRoot.innerHTML = html; + } + + */ + + } + + public AttachElement(root: HTMLElement) { + + (window as any).sheet = this; + + const options: Partial = {}; + const names = root.getAttributeNames(); + + for (const name of names) { + let value: any = root.getAttribute(name); + if (value === null || value.toLowerCase() === 'true') { + value = true; + } + else { + const test = Number(value); + if (!isNaN(test)) { + value = test; + } + } + (options as any)[name] = value; + } + + console.info({options}); + + this.MapElements(root); + this.sheet = new EmbeddedSpreadsheet({ + container: this.elements.spreadsheet, + storage_key: 'temp', + tab_bar: 'auto', + add_tab: true, + delete_tab: true, + scale_control: true, + stats: true, + ...options, + }); + + this.elements.sidebar?.addEventListener('click', event => { + const command = (event.target as HTMLElement)?.dataset.command; + if (command) { + this.sheet?.ExecToolbarCommand(command, root); + } + }); + + // hide toolbar/sidebar here, if desired, before we attach transitions + + // this.toolbar_element?.classList.add('hidden'); + // this.sidebar_element?.classList.add('hidden'); + + // now attach transitions to marked elements (async) + + const animated = Array.from(root.querySelectorAll('.animate')); + + Promise.resolve().then(() => { + for (const element of animated) { + element.classList.remove('animate'); + element.classList.add('animated'); + } + }); + + const button = this.elements['toggle-sidebar-button']; + if (button) { + button.addEventListener('click', () => { + root.classList.toggle('collapsed'); + }); + } + + ////////////////////////// + + // FIXME: could simplify + // could also walk the tree... + + const resize_handle = root.querySelector('#resize-handle') as HTMLElement; + const resize_layout = root.querySelector('#resize-layout') as HTMLElement; + const mask = root.querySelector('#mask') as HTMLElement; + const target = root.querySelector('.treb-layout-resize-container') as HTMLElement; + + const size = { width: 0, height: 0 }; + const position = { x: 0, y: 0 }; + const delta = { x: 0, y: 0 }; + + const Finish = () => { + mask.classList.remove('visible'); + + resize_layout?.classList.remove('visible'); + resize_handle?.classList.remove('retain-opacity'); + + if (delta.x || delta.y) { + const rect = root.getBoundingClientRect(); + (root as HTMLElement).style.width = (rect.width + delta.x) + 'px'; + (root as HTMLElement).style.height = (rect.height + delta.y) + 'px'; + + this.sheet?.Resize(); + + } + + }; + + mask?.addEventListener('mousemove', (event: MouseEvent) => { + + if (event.buttons === 0) { + Finish(); + } + else { + delta.x = event.screenX - position.x; + delta.y = event.screenY - position.y, + resize_layout.style.width = (size.width + delta.x) + 'px'; + resize_layout.style.height = (size.height + delta.y) + 'px'; + } + }); + + mask?.addEventListener('mouseup', (event: MouseEvent) => Finish()); + + resize_handle?.addEventListener('mousedown', (event: MouseEvent) => { + + event.stopPropagation(); + event.preventDefault(); + + mask.classList.add('visible'); + mask.style.cursor = 'nw-resize'; + + resize_handle?.classList.add('retain-opacity'); + + + position.x = event.screenX; + position.y = event.screenY; + + delta.x = 0; + delta.y = 0; + + if (resize_layout) { + resize_layout.classList.add('visible'); + if (target) { + const host_rect = root.getBoundingClientRect() || { left: 0, top: 0 }; + const rect = target.getBoundingClientRect(); + + resize_layout.style.top = (rect.top - host_rect.top) + 'px'; + resize_layout.style.left = (rect.left - host_rect.left) + 'px'; + resize_layout.style.width = rect.width + 'px'; + resize_layout.style.height = rect.height + 'px'; + + size.width = rect.width; + size.height = rect.height; + } + } + }); + + /////////////////////////////////////////// + + /* + + const shadow = root.shadowRoot; + + if (shadow) { + + this.MapElements(shadow); + + console.info('calling new ES, container', this.elements.container) + const sheet = new EmbeddedSpreadsheet({ + container: this.elements.spreadsheet, + storage_key: 'temp', + }); + + + // hide toolbar/sidebar here, if desired + + // this.toolbar_element?.classList.add('hidden'); + // this.sidebar_element?.classList.add('hidden'); + + // element transitions are set separately so we can hide stuff + // on the initial load without triggering any animations. + + Promise.resolve().then(() => { + this.elements.toolbar?.classList.add('animated'); + this.elements.sidebar?.classList.add('animated'); + }); + + const button = this.elements['toggle-sidebar-button']; + if (button) { + button.addEventListener('click', () => { + this.elements.sidebar?.classList.toggle('hidden'); + button.classList.toggle('sidebar-hidden'); + }); + } + + // FIXME: could simplify + // could also walk the tree... + + const resize_handle = shadow.querySelector('#resize-handle') as HTMLElement; + const resize_layout = shadow.querySelector('#resize-layout') as HTMLElement; + const mask = shadow.querySelector('#mask') as HTMLElement; + const target = shadow.querySelector('#main') as HTMLElement; + + const size = { width: 0, height: 0 }; + const position = { x: 0, y: 0 }; + const delta = { x: 0, y: 0 }; + + const Finish = () => { + mask.classList.remove('visible'); + + resize_layout?.classList.remove('visible'); + resize_handle?.classList.remove('retain-opacity'); + + if (delta.x || delta.y) { + const rect = shadow.host.getBoundingClientRect(); + (shadow.host as HTMLElement).style.width = (rect.width + delta.x) + 'px'; + (shadow.host as HTMLElement).style.height = (rect.height + delta.y) + 'px'; + } + + }; + + mask?.addEventListener('mousemove', (event: MouseEvent) => { + + if (event.buttons === 0) { + Finish(); + } + else { + delta.x = event.screenX - position.x; + delta.y = event.screenY - position.y, + resize_layout.style.width = (size.width + delta.x) + 'px'; + resize_layout.style.height = (size.height + delta.y) + 'px'; + } + }); + + mask?.addEventListener('mouseup', (event: MouseEvent) => Finish()); + + resize_handle?.addEventListener('mousedown', (event: MouseEvent) => { + + event.stopPropagation(); + event.preventDefault(); + + mask.classList.add('visible'); + mask.style.cursor = 'nw-resize'; + + resize_handle?.classList.add('retain-opacity'); + + + position.x = event.screenX; + position.y = event.screenY; + + delta.x = 0; + delta.y = 0; + + if (resize_layout) { + resize_layout.classList.add('visible'); + if (target) { + const host_rect = shadow.host.getBoundingClientRect() || { left: 0, top: 0 }; + const rect = target.getBoundingClientRect(); + + resize_layout.style.top = (rect.top - host_rect.top) + 'px'; + resize_layout.style.left = (rect.left - host_rect.left) + 'px'; + resize_layout.style.width = rect.width + 'px'; + resize_layout.style.height = rect.height + 'px'; + + size.width = rect.width; + size.height = rect.height; + } + } + }); + + } + + */ + + } + +} \ No newline at end of file diff --git a/treb-embed/custom-element/style-main.scss b/treb-embed/custom-element/style-main.scss new file mode 100644 index 00000000..c7fde2b0 --- /dev/null +++ b/treb-embed/custom-element/style-main.scss @@ -0,0 +1,370 @@ + +@import 'treb-icons.scss'; + +:host, .treb-root-node { + + all: initial; + font-family: var(--treb-font-stack, sans-serif); // stack + position: relative; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + grid-template-rows: auto minmax(0, 1fr); + + // can we make these optional? [probably] + width: 600px; + height: 450px; + +} + +* { + box-sizing: border-box; +} + +#toolbar { + // background: pink; + + grid-row: 1; + grid-column: 1/3; + display: flex; + flex-direction: row; + align-items: center; + gap: .5em; + overflow: hidden; + + &.animated { + transition: height var(--treb-layout-transition, .25s ease), + opacity var(--treb-layout-transition, .25s ease); + } + + // toolbar defaults to hidden, set .toolbar-visible on the host/root + // element to show + + // height: 2rem; + + height: 0px; + opacity: 0; + +} + +#sidebar { + // background: lightskyblue; + + padding-top: 1em; + grid-row: 2; + grid-column: 2; + display: flex; + flex-direction: column; + gap: .75em; + justify-content: flex-start; + overflow: hidden; + width: 2.5rem; + align-items: center; + + // we use margin on the contained elements instead + // of padding on this component so that we can set + // width -> 0 to hide it + + // actually we will need to use an explicit width for + // that to work (unless we want to measure it, which + // won't work if it starts closed) + + &.animated { + transition: width var(--treb-sidebar-transition, .2s ease), + opacity var(--treb-sidebar-transition, .2s ease); + } + + /* + &.hidden { + width: 0px; + opacity: 0; + } + */ + +} + +:host, .treb-root-node { + &.toolbar-visible #toolbar { + height: 2rem; + opacity: 1; + } +} + +:host, .treb-root-node { + &.collapsed #sidebar { + width: 0px; + opacity: 0; + } +} + + +#sidebar > button { + + padding: 0; + margin: 0; + border: 0; + background: transparent; + +} + +#sidebar > button, #toggle-sidebar-button { + + &::after { + display: block; + height: 24px; + width: 24px; + content: ''; + background: #ccc; + mask-position: center; + -webkit-mask-position: center; + mask-repeat: no-repeat; + -webkit-mask-repeat: no-repeat; + transition: background-color 0.1s ease; + } + + &:hover::after { + background: #666; + } + +} + +#toggle-sidebar-button { + + position: absolute; + right: .5rem; + bottom: 4rem; + background: transparent; + border: 0; + border: 1px solid transparent; + height: 24px; + width: 24px; + + border-radius: 12px; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + margin: 0; + + z-index: 99; + + &::after { + height: 12px; + width: 12px; + mask-image: var(--treb-sidebar-icon-chevron-right); + -webkit-mask-image: var(--treb-sidebar-icon-chevron-right); + } + +} + +:host, .treb-root-node { + &.collapsed #toggle-sidebar-button { + + border-color: #ccc; + border-right-color: #fff; + right: 0px; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + &::after { + mask-image: var(--treb-sidebar-icon-chevron-left); + -webkit-mask-image: var(--treb-sidebar-icon-chevron-left); + } + background: #fff; + + } +} + +#spreadsheet { + + grid-row: 2; + grid-column: 1; + + position: relative; + display: grid; + + grid-template-rows: auto minmax(0, 1fr) auto; + grid-template-columns: minmax(0, 1fr); + +} + +#main { + // border: 1px solid orange; + // grid-row: 3; + // grid-column: 1; + + // this is relative so we can place the resize handle on top + // of the scrollbars in the contained element via absolute + + position: relative; + box-shadow: 0 4px 6px -4px rgba(0, 0, 0, .61); + +} + +.treb-layout-resize-container { + overflow: hidden; + position: relative; + display: flex; +} + +#container { + overflow: scroll; + width: 100%; + height: 100%; +} + +#spreadsheet-tiles { + display: grid; + grid-template-rows: 1fr 1fr; + grid-template-columns: 1fr 1fr; +} + +.tile { + width: 400px; + height: 300px; +} + +#resize-handle { + border: .5rem solid var(--treb-resize-handle-color, blue); + border-top-color: transparent; + border-left-color: transparent; + position: absolute; + bottom: 0px; + right: 0px; + cursor: nw-resize; + + // the opacity change is just annoying, don't bother + /* + opacity: .35; + transition: opacity var(--treb-resize-transition, .1s ease-in-out); + &:hover, &.retain-opacity { + opacity: 1; + } + */ + + &.disabled { + display: none; + } + +} + +.spreadsheet-header { + &.hidden { + display: none; + } +} + +#spreadsheet-header { + // background-color: aquamarine; + // grid-row: 2; + // grid-column: 1; + display: flex; + flex-direction: row; + gap: .5em; + padding: .5em 0; + + & > div { + border-radius: 3px; + border: 1px solid #ccc; + padding: .25em; + line-height: 1.6; + } + +} + +#formula-editor { + flex-grow: 1; +} + +/** + * switch to class for dupes + * this one (generally?) doesn't change, so we don't animate it + * / +.spreadsheet-footer { + + display: flex; + flex-direction: row; + gap: .5em; + + + &.hidden { + opacity: 0; + height: 0px; + overflow: hidden; + } + +} +*/ + +.spreadsheet-footer { + &.hidden { + display: none; + } +} + +.flex-grow { + flex-grow: 1; +} + +#mask { + + // background: pink; + // opacity: .5; + + z-index: 9999; // ugh + + position: fixed; + top: 0px; + left: 0px; + width: 100vw; + height: 100vh; + display: none; + pointer-events: none; + + &.visible { + display: block; + pointer-events: initial; + } + +} + + +#resize-layout { + + z-index: 9998; // ugh + + + position: absolute; + top: 0px; + left: 0px; + border: 1px dotted var(--treb-resize-frame-color, blue); + width: 100%; + height: 100%; + display: none; + + &.visible { + display: block; + } + +} + +#dialog { + position: absolute; + transform: translate(-50%, -50%); + top: 50%; + left: 50%; + border: 1px solid red; + border-radius: 3px; + box-shadow: 0 4px 6px -4px rgba(0, 0, 0, .61); + background: #fff; + padding: 1rem; + display: none; + + &.visible { + display: block; + } + +} + +.disable-on-dialog.disabled { + opacity: .5; + pointer-events: none; +} diff --git a/treb-embed/custom-element/treb-icons.scss b/treb-embed/custom-element/treb-icons.scss new file mode 100644 index 00000000..7041fd1f --- /dev/null +++ b/treb-embed/custom-element/treb-icons.scss @@ -0,0 +1,363 @@ + +// :host { +:root { + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/external-link-alt.svg */ + --treb-sidebar-icon-popout: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/sliders-h.svg */ + --treb-sidebar-icon-toolbar: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/download.svg */ + --treb-sidebar-icon-export: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/sync-alt.svg */ + --treb-sidebar-icon-reset: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/question-circle.svg */ + --treb-sidebar-icon-about: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/chevron-left.svg */ + --treb-sidebar-icon-chevron-left: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/chevron-right.svg */ + --treb-sidebar-icon-chevron-right: url("data:image/svg+xml, "); + + /* source: fontawesome-free-5.15.4-desktop/svgs/solid/history.svg */ + --treb-sidebar-icon-revert: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/text-left.svg */ + --treb-icon-text-align-left: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/text-center.svg */ + --treb-icon-text-align-center: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/text-right.svg */ + --treb-icon-text-align-right: url("data:image/svg+xml, "); + + /* source: treb/align-up.svg */ + --treb-icon-text-align-top: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/arrows-collapse.svg */ + --treb-icon-text-align-middle: url("data:image/svg+xml, "); + + /* source: treb/align-down.svg */ + --treb-icon-text-align-bottom: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/folder.svg */ + --treb-icon-file-menu: url("data:image/svg+xml, "); + + /* source: treb/wrap.svg */ + --treb-icon-wrap-text: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/fullscreen.svg */ + --treb-icon-unmerge-cells: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/fullscreen-exit.svg */ + --treb-icon-merge-cells: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/lock.svg */ + --treb-icon-lock: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/chat-square.svg */ + --treb-icon-comment: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/paint-bucket.svg */ + --treb-icon-fill-color: url("data:image/svg+xml, "); + + /* source: treb/letter.svg */ + --treb-icon-text-color: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-bottom.svg */ + --treb-icon-border-bottom: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-top.svg */ + --treb-icon-border-top: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-left.svg */ + --treb-icon-border-left: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-right.svg */ + --treb-icon-border-right: url("data:image/svg+xml, "); + + /* source: treb/border-double-bottom.svg */ + --treb-icon-border-double-bottom: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-all.svg */ + --treb-icon-border-all: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border-outer.svg */ + --treb-icon-border-outer: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/border.svg */ + --treb-icon-border-none: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/palette2.svg */ + --treb-icon-palette: url("data:image/svg+xml, "); + + /* source: treb/square.svg */ + --treb-icon-layout: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/snow.svg */ + --treb-icon-freeze: url("data:image/svg+xml, "); + + /* source: treb/column-chart.svg */ + --treb-icon-column-chart: url("data:image/svg+xml, "); + + /* source: treb/donut-chart.svg */ + --treb-icon-donut-chart: url("data:image/svg+xml, "); + + /* source: treb/bar-chart.svg */ + --treb-icon-bar-chart: url("data:image/svg+xml, "); + + /* source: treb/line-chart.svg */ + --treb-icon-line-chart: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/image.svg */ + --treb-icon-image: url("data:image/svg+xml, "); + + /* source: treb/rotate.svg */ + --treb-icon-recalculate: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/check2.svg */ + --treb-icon-check: url("data:image/svg+xml, "); + + /* source: bootstrap-icons-1.8.3/table.svg */ + --treb-icon-table: url("data:image/svg+xml,"); + +} + + +#sidebar-recalculate-button::after { + mask-image: var(--treb-sidebar-icon-reset); + -webkit-mask-image: var(--treb-sidebar-icon-reset); +} + +#sidebar-toolbar-button::after { + mask-image: var(--treb-sidebar-icon-toolbar); + -webkit-mask-image: var(--treb-sidebar-icon-toolbar); +} + +#sidebar-export-button::after { + mask-image: var(--treb-sidebar-icon-export); + -webkit-mask-image: var(--treb-sidebar-icon-export); +} + +#sidebar-about-button::after { + mask-image: var(--treb-sidebar-icon-about); + -webkit-mask-image: var(--treb-sidebar-icon-about); +} + +#sidebar-revert-button::after { + mask-image: var(--treb-sidebar-icon-revert); + -webkit-mask-image: var(--treb-sidebar-icon-revert); +} + +/* + .treb-sidebar-icon-popout { + mask-image: var(--treb-sidebar-icon-popout); + -webkit-mask-image: var(--treb-sidebar-icon-popout); + } + + .treb-sidebar-icon-toolbar { + mask-image: var(--treb-sidebar-icon-toolbar); + -webkit-mask-image: var(--treb-sidebar-icon-toolbar); + } + + .treb-sidebar-icon-export { + mask-image: var(--treb-sidebar-icon-export); + -webkit-mask-image: var(--treb-sidebar-icon-export); + } + + .treb-sidebar-icon-reset { + mask-image: var(--treb-sidebar-icon-reset); + -webkit-mask-image: var(--treb-sidebar-icon-reset); + } + + .treb-sidebar-icon-about { + mask-image: var(--treb-sidebar-icon-about); + -webkit-mask-image: var(--treb-sidebar-icon-about); + } + + .treb-sidebar-icon-chevron-left { + mask-image: var(--treb-sidebar-icon-chevron-left); + -webkit-mask-image: var(--treb-sidebar-icon-chevron-left); + } + + .treb-sidebar-icon-chevron-right { + mask-image: var(--treb-sidebar-icon-chevron-right); + -webkit-mask-image: var(--treb-sidebar-icon-chevron-right); + } + + .treb-sidebar-icon-revert { + mask-image: var(--treb-sidebar-icon-revert); + -webkit-mask-image: var(--treb-sidebar-icon-revert); + } + + .treb-icon-text-align-left { + mask-image: var(--treb-icon-text-align-left); + -webkit-mask-image: var(--treb-icon-text-align-left); + } + + .treb-icon-text-align-center { + mask-image: var(--treb-icon-text-align-center); + -webkit-mask-image: var(--treb-icon-text-align-center); + } + + .treb-icon-text-align-right { + mask-image: var(--treb-icon-text-align-right); + -webkit-mask-image: var(--treb-icon-text-align-right); + } + + .treb-icon-text-align-top { + mask-image: var(--treb-icon-text-align-top); + -webkit-mask-image: var(--treb-icon-text-align-top); + } + + .treb-icon-text-align-middle { + mask-image: var(--treb-icon-text-align-middle); + -webkit-mask-image: var(--treb-icon-text-align-middle); + } + + .treb-icon-text-align-bottom { + mask-image: var(--treb-icon-text-align-bottom); + -webkit-mask-image: var(--treb-icon-text-align-bottom); + } + + .treb-icon-file-menu { + mask-image: var(--treb-icon-file-menu); + -webkit-mask-image: var(--treb-icon-file-menu); + } + + .treb-icon-wrap-text { + mask-image: var(--treb-icon-wrap-text); + -webkit-mask-image: var(--treb-icon-wrap-text); + } + + .treb-icon-unmerge-cells { + mask-image: var(--treb-icon-unmerge-cells); + -webkit-mask-image: var(--treb-icon-unmerge-cells); + } + + .treb-icon-merge-cells { + mask-image: var(--treb-icon-merge-cells); + -webkit-mask-image: var(--treb-icon-merge-cells); + } + + .treb-icon-lock { + mask-image: var(--treb-icon-lock); + -webkit-mask-image: var(--treb-icon-lock); + } + + .treb-icon-comment { + mask-image: var(--treb-icon-comment); + -webkit-mask-image: var(--treb-icon-comment); + } + + .treb-icon-fill-color { + mask-image: var(--treb-icon-fill-color); + -webkit-mask-image: var(--treb-icon-fill-color); + } + + .treb-icon-text-color { + mask-image: var(--treb-icon-text-color); + -webkit-mask-image: var(--treb-icon-text-color); + } + + .treb-icon-border-bottom { + mask-image: var(--treb-icon-border-bottom); + -webkit-mask-image: var(--treb-icon-border-bottom); + } + + .treb-icon-border-top { + mask-image: var(--treb-icon-border-top); + -webkit-mask-image: var(--treb-icon-border-top); + } + + .treb-icon-border-left { + mask-image: var(--treb-icon-border-left); + -webkit-mask-image: var(--treb-icon-border-left); + } + + .treb-icon-border-right { + mask-image: var(--treb-icon-border-right); + -webkit-mask-image: var(--treb-icon-border-right); + } + + .treb-icon-border-double-bottom { + mask-image: var(--treb-icon-border-double-bottom); + -webkit-mask-image: var(--treb-icon-border-double-bottom); + } + + .treb-icon-border-all { + mask-image: var(--treb-icon-border-all); + -webkit-mask-image: var(--treb-icon-border-all); + } + + .treb-icon-border-outer { + mask-image: var(--treb-icon-border-outer); + -webkit-mask-image: var(--treb-icon-border-outer); + } + + .treb-icon-border-none { + mask-image: var(--treb-icon-border-none); + -webkit-mask-image: var(--treb-icon-border-none); + } + + .treb-icon-palette { + mask-image: var(--treb-icon-palette); + -webkit-mask-image: var(--treb-icon-palette); + } + + .treb-icon-layout { + mask-image: var(--treb-icon-layout); + -webkit-mask-image: var(--treb-icon-layout); + } + + .treb-icon-freeze { + mask-image: var(--treb-icon-freeze); + -webkit-mask-image: var(--treb-icon-freeze); + } + + .treb-icon-column-chart { + mask-image: var(--treb-icon-column-chart); + -webkit-mask-image: var(--treb-icon-column-chart); + } + + .treb-icon-donut-chart { + mask-image: var(--treb-icon-donut-chart); + -webkit-mask-image: var(--treb-icon-donut-chart); + } + + .treb-icon-bar-chart { + mask-image: var(--treb-icon-bar-chart); + -webkit-mask-image: var(--treb-icon-bar-chart); + } + + .treb-icon-line-chart { + mask-image: var(--treb-icon-line-chart); + -webkit-mask-image: var(--treb-icon-line-chart); + } + + .treb-icon-image { + mask-image: var(--treb-icon-image); + -webkit-mask-image: var(--treb-icon-image); + } + + .treb-icon-recalculate { + mask-image: var(--treb-icon-recalculate); + -webkit-mask-image: var(--treb-icon-recalculate); + } + + .treb-icon-check { + mask-image: var(--treb-icon-check); + -webkit-mask-image: var(--treb-icon-check); + } + + .treb-icon-table { + mask-image: var(--treb-icon-table); + -webkit-mask-image: var(--treb-icon-table); + } + +} +*/ diff --git a/treb-embed/custom-element/treb-spreadsheet-element.ts b/treb-embed/custom-element/treb-spreadsheet-element.ts new file mode 100644 index 00000000..878923ca --- /dev/null +++ b/treb-embed/custom-element/treb-spreadsheet-element.ts @@ -0,0 +1,23 @@ + +import { SpreadsheetConstructor } from './spreadsheet-constructor'; + +export { SpreadsheetConstructor }; // re-export + +class TREBElement extends HTMLElement { + + public instance = new SpreadsheetConstructor(); + + constructor() { + super(); + this.instance.ConstructElement(this); + } + + public connectedCallback() { + this.instance.AttachElement(this); + } + +} + +customElements.define('treb-spreadsheet', TREBElement); + + diff --git a/treb-embed/src/embedded-spreadsheet.ts b/treb-embed/src/embedded-spreadsheet.ts index 85bcdca9..a5db761e 100644 --- a/treb-embed/src/embedded-spreadsheet.ts +++ b/treb-embed/src/embedded-spreadsheet.ts @@ -595,6 +595,9 @@ export class EmbeddedSpreadsheet { if (container) { + + /* TEMP disabling (for component) + this.view = document.createElement('div'); this.view.classList.add('treb-view'); @@ -606,6 +609,10 @@ export class EmbeddedSpreadsheet { this.view.appendChild(this.node); container.appendChild(this.view); + */ + + this.node = container; + this.node.addEventListener('focusin', () => { this.focus_target = this; }); @@ -1031,6 +1038,11 @@ export class EmbeddedSpreadsheet { * @internal */ public Unsplit(): void { + + throw new Error('ENOTIMPL'); + + /* + // console.info("unsplit", this.views); const target = this.views.pop(); if (target) { @@ -1055,6 +1067,9 @@ export class EmbeddedSpreadsheet { this.node?.focus(); } + + */ + } /** @@ -1066,6 +1081,10 @@ export class EmbeddedSpreadsheet { */ public Split(): void { + throw new Error('ENOTIMPL'); + + /* + const view = this.CreateView(); view.grid.EnsureActiveSheet(true); @@ -1122,6 +1141,8 @@ export class EmbeddedSpreadsheet { subscription, }); + */ + } protected HandleToolbarEvent(event: ToolbarEvent): void { @@ -1466,6 +1487,26 @@ export class EmbeddedSpreadsheet { } + /** + * + * @internal + */ + public ExecToolbarCommand(command: string, host: HTMLElement) { + switch (command) { + case 'toggle-toolbar': + host.classList.toggle('toolbar-visible'); + break; + + case 'recalculate': + this.Recalculate(); + break; + + default: + console.info('unhandled command', command); + break; + } + } + /** * this is public because it's created by the composite sheet. * FIXME: perhaps there's a better way to do that? via message passing? (...) diff --git a/treb-grid/src/editors/formula_bar.ts b/treb-grid/src/editors/formula_bar.ts index ae7057b0..fc63ad8c 100644 --- a/treb-grid/src/editors/formula_bar.ts +++ b/treb-grid/src/editors/formula_bar.ts @@ -1,24 +1,24 @@ -/* - * This file is part of TREB. - * - * TREB is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * TREB is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along - * with TREB. If not, see . - * - * Copyright 2022-2023 trebco, llc. - * info@treb.app - * - */ - +/* + * This file is part of TREB. + * + * TREB is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * TREB is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with TREB. If not, see . + * + * Copyright 2022-2023 trebco, llc. + * info@treb.app + * + */ + import { Yield } from 'treb-utils'; import { DOMUtilities } from '../util/dom_utilities'; @@ -176,21 +176,25 @@ export class FormulaBar extends FormulaEditorBase { // create layout. need a flex patch for chrome - const outer_node = DOMUtilities.CreateDiv('treb-formula-bar-container notranslate', container); - const inner_node = DOMUtilities.CreateDiv('treb-formula-bar', outer_node); + // const outer_node = DOMUtilities.CreateDiv('treb-formula-bar-container notranslate', container); + //const inner_node = DOMUtilities.CreateDiv('treb-formula-bar', outer_node); + + // const outer_node = container.querySelector('.treb-formula-bar-container') as HTMLDivElement; + // outer_node.classList.remove('hidden'); + + const inner_node= container.querySelector('.treb-formula-bar') as HTMLDivElement; - // this.node = DOMUtilities.CreateDiv('treb-formula-bar', container); + // this.address_label_container = DOMUtilities.CreateDiv('address-label', inner_node); + // this.address_label = DOMUtilities.CreateDiv('', this.address_label_container); - this.address_label_container = DOMUtilities.CreateDiv('address-label', inner_node); - this.address_label = DOMUtilities.CreateDiv('', this.address_label_container); + this.address_label_container = inner_node.querySelector('.address-label') as HTMLDivElement; + this.address_label = this.address_label_container.querySelector('div') as HTMLDivElement; this.InitAddressLabel(); if (this.options.insert_function_button) { this.button = DOMUtilities.Create('button', 'formula-button', inner_node); - //const text1 = DOMUtilities.Create('span', 'text-1', this.button); - //const text2 = DOMUtilities.Create('span', 'text-2', this.button); this.button.addEventListener('click', () => { const formula: string = this.editor_node ? this.editor_node.textContent || '' : ''; @@ -199,9 +203,12 @@ export class FormulaBar extends FormulaEditorBase { } - this.container_node = DOMUtilities.CreateDiv('editor-container', inner_node); - this.editor_node = DOMUtilities.CreateDiv('formula-editor', this.container_node); - this.editor_node.setAttribute('contenteditable', 'true'); + // this.container_node = DOMUtilities.CreateDiv('editor-container', inner_node); + // this.editor_node = DOMUtilities.CreateDiv('formula-editor', this.container_node); + // this.editor_node.setAttribute('contenteditable', 'true'); + + this.container_node = inner_node.querySelector('.editor-container') as HTMLDivElement; + this.editor_node = this.container_node.querySelector('.formula-editor') as HTMLDivElement; // flag for composing via IME. when this is set we don't want to // handle input events. diff --git a/treb-grid/src/editors/formula_editor_base.ts b/treb-grid/src/editors/formula_editor_base.ts index 1cb3079e..e3a083b9 100644 --- a/treb-grid/src/editors/formula_editor_base.ts +++ b/treb-grid/src/editors/formula_editor_base.ts @@ -1,24 +1,24 @@ -/* - * This file is part of TREB. - * - * TREB is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * TREB is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along - * with TREB. If not, see . - * - * Copyright 2022-2023 trebco, llc. - * info@treb.app - * - */ - +/* + * This file is part of TREB. + * + * TREB is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * TREB is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with TREB. If not, see . + * + * Copyright 2022-2023 trebco, llc. + * info@treb.app + * + */ + import { Area, Cell, Theme, Rectangle, Localization, ICellAddress } from 'treb-base-types'; import { Yield, EventSource } from 'treb-utils'; import type { Parser, UnitRange, UnitAddress, ParseResult, ExpressionUnit } from 'treb-parser'; @@ -303,6 +303,12 @@ export abstract class FormulaEditorBase extends EventSou */ protected SubstringToCaret(node: HTMLDivElement): string { + // there are some issues with selection and shadow DOM. + // meaning it doesn't work. there are workarounds, but we + // have to watch out for browser issues. sigh. + + // https://github.com/WICG/webcomponents/issues/79 + // FIXME: x/browser // not sure about x/browser with this... only for electron atm diff --git a/treb-grid/src/layout/grid_layout.ts b/treb-grid/src/layout/grid_layout.ts index 812bbd2d..8e9a2062 100644 --- a/treb-grid/src/layout/grid_layout.ts +++ b/treb-grid/src/layout/grid_layout.ts @@ -1,24 +1,24 @@ -/* - * This file is part of TREB. - * - * TREB is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * TREB is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along - * with TREB. If not, see . - * - * Copyright 2022-2023 trebco, llc. - * info@treb.app - * - */ - +/* + * This file is part of TREB. + * + * TREB is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * TREB is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with TREB. If not, see . + * + * Copyright 2022-2023 trebco, llc. + * info@treb.app + * + */ + import { BaseLayout } from './base_layout'; import type { Tile } from '../types/tile'; import { DOMUtilities } from '../util/dom_utilities'; @@ -31,115 +31,46 @@ export class GridLayout extends BaseLayout { constructor(model: DataModel, view: ViewModel){ super(model, view); - /* - const nodes = tmpl` - -
- -
- -
- -
- -
- - -
- -
- -
- -
- -
-
-
- - `; - - this.column_header = nodes.column_header as HTMLDivElement; - this.row_header = nodes.row_header as HTMLDivElement; - this.corner = nodes.corner as HTMLDivElement; - this.corner_canvas = nodes.corner_canvas as HTMLCanvasElement; - this.contents = nodes.contents as HTMLDivElement; - this.grid_selection = (nodes.grid_selection as any) as SVGSVGElement; - this.row_header_selection = (nodes.row_header_selection as any) as SVGSVGElement; - this.column_header_selection = (nodes.column_header_selection as any) as SVGSVGElement; - this.corner_selection = (nodes.corner_selection as any) as SVGSVGElement; - this.annotation_container = nodes.annotation_container as HTMLDivElement; - this.grid_cover = nodes.grid_cover as HTMLDivElement; - this.column_header_cover = nodes.column_header_cover as HTMLDivElement; - this.row_header_cover = nodes.row_header_cover as HTMLDivElement; - */ - - // nodes always exist - - // everything except the selection node and the mouse - // mask needs to get attached to a container, when it's - // available + // in this model, the nodes aren't ready immediately; this is an issue + // because we may call things like update theme out of order. better to + // fix that properly than to make this more resilient (although we could + // do both) - this.column_header = DOMUtilities.CreateDiv('top-header'); - this.row_header = DOMUtilities.CreateDiv('left-header'); - - this.corner = DOMUtilities.CreateDiv('corner'); - this.corner_canvas = document.createElement('canvas'); - this.corner.appendChild(this.corner_canvas); - - this.contents = DOMUtilities.CreateDiv('contents'); - this.buffer_canvas = DOMUtilities.Create('canvas', 'treb-buffer-canvas', this.contents); - - // selection node attached to contents - this.grid_selection = document.createElementNS(SVGNS, 'svg'); - this.grid_selection.classList.add('grid-selection'); - this.contents.appendChild(this.grid_selection); - - // selection node for frozen rows - this.row_header_selection = document.createElementNS(SVGNS, 'svg'); - this.row_header_selection.classList.add('frozen-selection'); - this.row_header_selection.classList.add('frozen-selection-rows'); - this.column_header.appendChild(this.row_header_selection); - this.row_header_annotations = DOMUtilities.CreateDiv('frozen-annotation-container frozen-annotation-container-rows', this.column_header); + } - // ...columns - this.column_header_selection = document.createElementNS(SVGNS, 'svg'); - this.column_header_selection.classList.add('frozen-selection'); - this.column_header_selection.classList.add('frozen-selection-columns'); - this.row_header.appendChild(this.column_header_selection); - this.column_header_annotations = DOMUtilities.CreateDiv('frozen-annotation-container frozen-annotation-container-columns', this.row_header); + /** connect nodes */ + public InitializeInternal(container: HTMLElement, scroll_callback: () => void): void { - // ...corner - this.corner_selection = document.createElementNS(SVGNS, 'svg'); - this.corner_selection.classList.add('frozen-selection'); - this.corner.appendChild(this.corner_selection); - this.corner_annotations = DOMUtilities.CreateDiv('frozen-annotation-container frozen-annotation-container-corner', this.corner); + console.info('initialize internal'); + this.container = container; + this.container.classList.add('grid-layout'); - this.annotation_container = DOMUtilities.CreateDiv('annotation-container'); + this.scroll_reference_node = this.container; - this.grid_cover = DOMUtilities.CreateDiv('tile-cover grid-cover'); - this.column_header_cover = DOMUtilities.CreateDiv('tile-cover column-header-cover'); - this.row_header_cover = DOMUtilities.CreateDiv('tile-cover row-header-cover'); + this.column_header = container.querySelector('.top-header') as HTMLDivElement; + this.row_header_selection = this.column_header.querySelector('.frozen-selection') as SVGSVGElement; + this.row_header_annotations = this.column_header.querySelector('.frozen-annotation-container') as HTMLDivElement; - } + this.row_header = container.querySelector('.left-header') as HTMLDivElement; + this.column_header_selection = this.row_header.querySelector('.frozen-selection') as SVGSVGElement; + this.column_header_annotations = this.row_header.querySelector('.frozen-annotation-container') as HTMLDivElement; - /** attach node structure to container */ - public InitializeInternal(container: HTMLElement, scroll_callback: () => void): void { + this.corner = container.querySelector('.corner') as HTMLDivElement; + this.corner_canvas = this.corner.querySelector('canvas') as HTMLCanvasElement; + this.corner_selection = this.corner.querySelector('.frozen-selection') as SVGSVGElement; + this.corner_annotations = this.corner.querySelector('.frozen-annotation-container') as HTMLDivElement; - this.container = container; - this.container.classList.add('grid-layout'); + this.contents = container.querySelector('.contents') as HTMLDivElement; + this.buffer_canvas = this.contents.querySelector('.treb-buffer-canvas') as HTMLCanvasElement; + this.grid_selection = this.contents.querySelector('.grid-selection') as SVGSVGElement; - this.scroll_reference_node = this.container; + this.annotation_container = container.querySelector('.annotation-container') as HTMLDivElement; + + this.grid_cover = container.querySelector('.grid-cover') as HTMLDivElement; + this.column_header_cover = container.querySelector('.column-header-cover') as HTMLDivElement; + this.row_header_cover = container.querySelector('.row-header-cover') as HTMLDivElement; - container.appendChild(this.column_header); - container.appendChild(this.row_header); - container.appendChild(this.corner); - container.appendChild(this.contents); - container.appendChild(this.annotation_container); - container.appendChild(this.grid_cover); - container.appendChild(this.column_header_cover); - container.appendChild(this.row_header_cover); container.appendChild(this.mock_selection); this.container.addEventListener('scroll', () => scroll_callback()); diff --git a/treb-grid/src/render/tile_renderer.ts b/treb-grid/src/render/tile_renderer.ts index d7c8953d..b869f2f4 100644 --- a/treb-grid/src/render/tile_renderer.ts +++ b/treb-grid/src/render/tile_renderer.ts @@ -85,7 +85,7 @@ export class TileRenderer { */ protected overflow_areas: OverflowRecord[] = []; - protected buffer_canvas: HTMLCanvasElement; + protected buffer_canvas!: HTMLCanvasElement; protected buffer_context!: CanvasRenderingContext2D; protected buffer_canvas_size: Size = { width: 256, height: 256 }; @@ -96,9 +96,18 @@ export class TileRenderer { protected view: ViewModel, protected options: GridOptions, ) { + console.info('tile renderer ctor'); + + } + + /** initialize when layout is in place so we have the buffer */ + public Initialize() { + + console.info('tile renderer init'); + // this.buffer_canvas = document.createElement('canvas'); - this.buffer_canvas = layout.buffer_canvas; + this.buffer_canvas = this.layout.buffer_canvas; this.buffer_canvas.width = this.buffer_canvas_size.width; this.buffer_canvas.height = this.buffer_canvas_size.height; diff --git a/treb-grid/src/types/grid.ts b/treb-grid/src/types/grid.ts index 5b99577e..0875c258 100644 --- a/treb-grid/src/types/grid.ts +++ b/treb-grid/src/types/grid.ts @@ -1619,7 +1619,7 @@ export class Grid extends GridBase { // using `.treb-main.treb-theme`. we have some extra classes we still // need to clean up, though. - grid_container.classList.add('treb-main'); + // grid_container.classList.add('treb-main'); if (UA.is_windows) { grid_container.classList.add('treb-ua-windows'); @@ -1628,26 +1628,34 @@ export class Grid extends GridBase { grid_container.classList.add('treb-ua-osx'); } - grid_container.classList.add('treb-theme'); + // grid_container.classList.add('treb-theme'); // this.ApplyTheme(); - this.UpdateTheme(true); + // moving // this.UpdateTheme(true); - const container = document.createElement('div'); + // const higher_level_container = grid_container.querySelector('.treb-layout-master'); + + // this node is the actual grid, plus nodes that provide other UI + // or functionality on top of the grid like tooltips, and AC + this.container = grid_container.querySelector('#inner-container') as HTMLElement; + + /* + const container = document.createElement('div'); const higher_level_container = document.createElement('div'); higher_level_container.classList.add('treb-layout-master'); higher_level_container.setAttribute('role', 'grid'); higher_level_container.appendChild(container); grid_container.appendChild(higher_level_container); + */ // grid_container.appendChild(container); let autocomplete: Autocomplete | undefined; - if (this.options.formula_bar) { + if (this.container && this.options.formula_bar) { if (!autocomplete) { - autocomplete = new Autocomplete({ theme: this.theme, container }); + autocomplete = new Autocomplete({ theme: this.theme, container: this.container }); } this.InitFormulaBar(grid_container, autocomplete); } @@ -1664,33 +1672,6 @@ export class Grid extends GridBase { { let scale = this.layout.scale; - /* - // RiskAMP web used 5% increments above 100% and 2.5% below... - // that worked well, but it does require the decimal point - // which (IMO) looks messy - - switch (event.action) { - case 'increase': - if (scale >= 1) { - scale += 0.05; - } - else { - scale += 0.025; - } - break; - case 'decrease': - if (scale >= 1.05) { - scale -= 0.05; - } - else { - scale -= 0.025; - } - break; - default: - scale = event.action; - } - */ - scale = Math.round(event.value * 1000) / 1000; scale = Math.min(2, Math.max(scale, .5)); @@ -1739,8 +1720,8 @@ export class Grid extends GridBase { // set container and add class for our styles - this.container = container; - this.container.classList.add('treb-grid'); + // this.container = container; + // this.container.classList.add('treb-grid'); // we can force scrollbars, but it breaks sticky (apparently) // @@ -1753,7 +1734,7 @@ export class Grid extends GridBase { // accept focus, keyboard input - this.container.setAttribute('tabindex', '-1'); + // this.container.setAttribute('tabindex', '-1'); /* see method comment @@ -1773,7 +1754,7 @@ export class Grid extends GridBase { // create dom structure - this.layout.Initialize(container, { + this.layout.Initialize(this.container, { // scroll callback scroll: () => this.OnScroll(), @@ -1796,7 +1777,12 @@ export class Grid extends GridBase { focus: () => this.Focus(), }, this.options.scrollbars); - + + this.tile_renderer.Initialize(); + + // moved here // + this.UpdateTheme(true); + this.selection_renderer.Initialize(); this.layout.UpdateTiles(); @@ -1805,7 +1791,7 @@ export class Grid extends GridBase { // Sheet.sheet_events.Subscribe(this.HandleSheetEvent.bind(this)); if (!autocomplete) { - autocomplete = new Autocomplete({ theme: this.theme, container }); + autocomplete = new Autocomplete({ theme: this.theme, container: this.container }); } this.InitOverlayEditor(autocomplete); diff --git a/treb-grid/src/types/tab_bar.ts b/treb-grid/src/types/tab_bar.ts index 65c526f0..88e1b489 100644 --- a/treb-grid/src/types/tab_bar.ts +++ b/treb-grid/src/types/tab_bar.ts @@ -1,24 +1,24 @@ -/* - * This file is part of TREB. - * - * TREB is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * TREB is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along - * with TREB. If not, see . - * - * Copyright 2022-2023 trebco, llc. - * info@treb.app - * - */ - +/* + * This file is part of TREB. + * + * TREB is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * TREB is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with TREB. If not, see . + * + * Copyright 2022-2023 trebco, llc. + * info@treb.app + * + */ + import type { DataModel, ViewModel } from './data_model'; import { EventSource } from 'treb-utils'; import type { Sheet } from './sheet'; @@ -183,14 +183,16 @@ export class TabBar extends EventSource { this._visible = show; if (show) { - this.grid_container.classList.add('treb-tab-bar-layout'); - this.grid_container.parentElement?.classList.add('has-tab-bar'); - this.container.style.display = 'flex'; + // this.grid_container.classList.add('treb-tab-bar-layout'); + // this.grid_container.parentElement?.classList.add('has-tab-bar'); + // this.container.style.display = 'flex'; + this.container.classList.remove('hidden'); } else { - this.grid_container.classList.remove('treb-tab-bar-layout'); - this.grid_container.parentElement?.classList.remove('has-tab-bar'); - this.container.style.display = 'none'; + // this.grid_container.classList.remove('treb-tab-bar-layout'); + // this.grid_container.parentElement?.classList.remove('has-tab-bar'); + // this.container.style.display = 'none'; + this.container.classList.add('hidden'); } } @@ -262,8 +264,8 @@ export class TabBar extends EventSource { this.Show(true); } - this.grid_container.classList.add('treb-tab-bar-layout'); - this.grid_container.parentElement?.classList.add('has-tab-bar'); + // this.grid_container.classList.add('treb-tab-bar-layout'); + // this.grid_container.parentElement?.classList.add('has-tab-bar'); const target = this.node; @@ -579,9 +581,14 @@ export class TabBar extends EventSource { */ private Init(grid_container: HTMLElement) { - this.container = document.createElement('div'); + this.container = grid_container.querySelector('.spreadsheet-footer') as HTMLElement; + + // if we're here, show + this.container.classList.remove('hidden'); + + // this.container = document.createElement('div'); this.container.classList.add('treb-tab-bar-container'); - grid_container.appendChild(this.container); + // grid_container.appendChild(this.container); this.node = document.createElement('div'); this.node.classList.add('treb-tab-bar'); diff --git a/treb-grid/style/formula-bar.scss b/treb-grid/style/formula-bar.scss index 7e720462..0d9c6354 100644 --- a/treb-grid/style/formula-bar.scss +++ b/treb-grid/style/formula-bar.scss @@ -1,32 +1,34 @@ -/* - * This file is part of TREB. - * - * TREB is free software: you can redistribute it and/or modify it under the - * terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any - * later version. - * - * TREB is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along - * with TREB. If not, see . - * - * Copyright 2022-2023 trebco, llc. - * info@treb.app - * - */ - +/* + * This file is part of TREB. + * + * TREB is free software: you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any + * later version. + * + * TREB is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along + * with TREB. If not, see . + * + * Copyright 2022-2023 trebco, llc. + * info@treb.app + * + */ + .treb-main { /* flex patch for chrome */ - .treb-formula-bar-container { + //.treb-formula-bar-container { + + // display: block; + // order: 1; - display: block; - order: 1; + // &.hidden { display: none; } & .treb-formula-bar { @@ -186,6 +188,6 @@ } } - } + //} } \ No newline at end of file