editor working under webcomponate
- session is now an EventTarget using CustomEvent
This commit is contained in:
@@ -31,6 +31,7 @@
|
||||
"autoprefixer": "^10.4.19",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"css-loader": "^6.10.0",
|
||||
"extract-loader": "^5.1.0",
|
||||
"hello-wasm-pack": "^0.1.0",
|
||||
"html-webpack-plugin": "^5.6.0",
|
||||
"image-minimizer-webpack-plugin": "^4.0.0",
|
||||
@@ -39,6 +40,7 @@
|
||||
"imagemin-jpegtran": "^7.0.0",
|
||||
"imagemin-optipng": "^8.0.0",
|
||||
"imagemin-svgo": "^10.0.1",
|
||||
"lit-scss-loader": "^2.0.1",
|
||||
"mini-css-extract-plugin": "^2.8.1",
|
||||
"postcss-loader": "^8.1.1",
|
||||
"sass": "^1.72.0",
|
||||
|
||||
739
www/pnpm-lock.yaml
generated
739
www/pnpm-lock.yaml
generated
@@ -76,6 +76,9 @@ devDependencies:
|
||||
css-loader:
|
||||
specifier: ^6.10.0
|
||||
version: 6.10.0(webpack@5.91.0)
|
||||
extract-loader:
|
||||
specifier: ^5.1.0
|
||||
version: 5.1.0
|
||||
hello-wasm-pack:
|
||||
specifier: ^0.1.0
|
||||
version: 0.1.0
|
||||
@@ -100,6 +103,9 @@ devDependencies:
|
||||
imagemin-svgo:
|
||||
specifier: ^10.0.1
|
||||
version: 10.0.1
|
||||
lit-scss-loader:
|
||||
specifier: ^2.0.1
|
||||
version: 2.0.1(webpack@5.91.0)
|
||||
mini-css-extract-plugin:
|
||||
specifier: ^2.8.1
|
||||
version: 2.8.1(webpack@5.91.0)
|
||||
@@ -950,6 +956,519 @@ packages:
|
||||
postcss-value-parser: 4.2.0
|
||||
dev: true
|
||||
|
||||
/babel-code-frame@6.26.0:
|
||||
resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==}
|
||||
dependencies:
|
||||
chalk: 1.1.3
|
||||
esutils: 2.0.3
|
||||
js-tokens: 3.0.2
|
||||
dev: true
|
||||
|
||||
/babel-core@6.26.3:
|
||||
resolution: {integrity: sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==}
|
||||
dependencies:
|
||||
babel-code-frame: 6.26.0
|
||||
babel-generator: 6.26.1
|
||||
babel-helpers: 6.24.1
|
||||
babel-messages: 6.23.0
|
||||
babel-register: 6.26.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
babylon: 6.18.0
|
||||
convert-source-map: 1.9.0
|
||||
debug: 2.6.9
|
||||
json5: 0.5.1
|
||||
lodash: 4.17.21
|
||||
minimatch: 3.1.2
|
||||
path-is-absolute: 1.0.1
|
||||
private: 0.1.8
|
||||
slash: 1.0.0
|
||||
source-map: 0.5.7
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-generator@6.26.1:
|
||||
resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==}
|
||||
dependencies:
|
||||
babel-messages: 6.23.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
detect-indent: 4.0.0
|
||||
jsesc: 1.3.0
|
||||
lodash: 4.17.21
|
||||
source-map: 0.5.7
|
||||
trim-right: 1.0.1
|
||||
dev: true
|
||||
|
||||
/babel-helper-builder-binary-assignment-operator-visitor@6.24.1:
|
||||
resolution: {integrity: sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==}
|
||||
dependencies:
|
||||
babel-helper-explode-assignable-expression: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-call-delegate@6.24.1:
|
||||
resolution: {integrity: sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==}
|
||||
dependencies:
|
||||
babel-helper-hoist-variables: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-define-map@6.26.0:
|
||||
resolution: {integrity: sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==}
|
||||
dependencies:
|
||||
babel-helper-function-name: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
lodash: 4.17.21
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-explode-assignable-expression@6.24.1:
|
||||
resolution: {integrity: sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-function-name@6.24.1:
|
||||
resolution: {integrity: sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==}
|
||||
dependencies:
|
||||
babel-helper-get-function-arity: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-get-function-arity@6.24.1:
|
||||
resolution: {integrity: sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-helper-hoist-variables@6.24.1:
|
||||
resolution: {integrity: sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-helper-optimise-call-expression@6.24.1:
|
||||
resolution: {integrity: sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-helper-regex@6.26.0:
|
||||
resolution: {integrity: sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
lodash: 4.17.21
|
||||
dev: true
|
||||
|
||||
/babel-helper-remap-async-to-generator@6.24.1:
|
||||
resolution: {integrity: sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==}
|
||||
dependencies:
|
||||
babel-helper-function-name: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helper-replace-supers@6.24.1:
|
||||
resolution: {integrity: sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==}
|
||||
dependencies:
|
||||
babel-helper-optimise-call-expression: 6.24.1
|
||||
babel-messages: 6.23.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-helpers@6.24.1:
|
||||
resolution: {integrity: sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-messages@6.23.0:
|
||||
resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-add-module-exports@1.0.4:
|
||||
resolution: {integrity: sha512-g+8yxHUZ60RcyaUpfNzy56OtWW+x9cyEe9j+CranqLiqbju2yf/Cy6ZtYK40EZxtrdHllzlVZgLmcOUCTlJ7Jg==}
|
||||
dev: true
|
||||
|
||||
/babel-plugin-check-es2015-constants@6.22.0:
|
||||
resolution: {integrity: sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-syntax-async-functions@6.13.0:
|
||||
resolution: {integrity: sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==}
|
||||
dev: true
|
||||
|
||||
/babel-plugin-syntax-exponentiation-operator@6.13.0:
|
||||
resolution: {integrity: sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==}
|
||||
dev: true
|
||||
|
||||
/babel-plugin-syntax-trailing-function-commas@6.22.0:
|
||||
resolution: {integrity: sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==}
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-async-to-generator@6.24.1:
|
||||
resolution: {integrity: sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==}
|
||||
dependencies:
|
||||
babel-helper-remap-async-to-generator: 6.24.1
|
||||
babel-plugin-syntax-async-functions: 6.13.0
|
||||
babel-runtime: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-arrow-functions@6.22.0:
|
||||
resolution: {integrity: sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-block-scoped-functions@6.22.0:
|
||||
resolution: {integrity: sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-block-scoping@6.26.0:
|
||||
resolution: {integrity: sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
lodash: 4.17.21
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-classes@6.24.1:
|
||||
resolution: {integrity: sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==}
|
||||
dependencies:
|
||||
babel-helper-define-map: 6.26.0
|
||||
babel-helper-function-name: 6.24.1
|
||||
babel-helper-optimise-call-expression: 6.24.1
|
||||
babel-helper-replace-supers: 6.24.1
|
||||
babel-messages: 6.23.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-computed-properties@6.24.1:
|
||||
resolution: {integrity: sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-destructuring@6.23.0:
|
||||
resolution: {integrity: sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-duplicate-keys@6.24.1:
|
||||
resolution: {integrity: sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-for-of@6.23.0:
|
||||
resolution: {integrity: sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-function-name@6.24.1:
|
||||
resolution: {integrity: sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==}
|
||||
dependencies:
|
||||
babel-helper-function-name: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-literals@6.22.0:
|
||||
resolution: {integrity: sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-modules-amd@6.24.1:
|
||||
resolution: {integrity: sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==}
|
||||
dependencies:
|
||||
babel-plugin-transform-es2015-modules-commonjs: 6.26.2
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-modules-commonjs@6.26.2:
|
||||
resolution: {integrity: sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==}
|
||||
dependencies:
|
||||
babel-plugin-transform-strict-mode: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-modules-systemjs@6.24.1:
|
||||
resolution: {integrity: sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==}
|
||||
dependencies:
|
||||
babel-helper-hoist-variables: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-modules-umd@6.24.1:
|
||||
resolution: {integrity: sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==}
|
||||
dependencies:
|
||||
babel-plugin-transform-es2015-modules-amd: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-object-super@6.24.1:
|
||||
resolution: {integrity: sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==}
|
||||
dependencies:
|
||||
babel-helper-replace-supers: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-parameters@6.24.1:
|
||||
resolution: {integrity: sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==}
|
||||
dependencies:
|
||||
babel-helper-call-delegate: 6.24.1
|
||||
babel-helper-get-function-arity: 6.24.1
|
||||
babel-runtime: 6.26.0
|
||||
babel-template: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-shorthand-properties@6.24.1:
|
||||
resolution: {integrity: sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-spread@6.22.0:
|
||||
resolution: {integrity: sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-sticky-regex@6.24.1:
|
||||
resolution: {integrity: sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==}
|
||||
dependencies:
|
||||
babel-helper-regex: 6.26.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-template-literals@6.22.0:
|
||||
resolution: {integrity: sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-typeof-symbol@6.23.0:
|
||||
resolution: {integrity: sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-es2015-unicode-regex@6.24.1:
|
||||
resolution: {integrity: sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==}
|
||||
dependencies:
|
||||
babel-helper-regex: 6.26.0
|
||||
babel-runtime: 6.26.0
|
||||
regexpu-core: 2.0.0
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-exponentiation-operator@6.24.1:
|
||||
resolution: {integrity: sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==}
|
||||
dependencies:
|
||||
babel-helper-builder-binary-assignment-operator-visitor: 6.24.1
|
||||
babel-plugin-syntax-exponentiation-operator: 6.13.0
|
||||
babel-runtime: 6.26.0
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-regenerator@6.26.0:
|
||||
resolution: {integrity: sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==}
|
||||
dependencies:
|
||||
regenerator-transform: 0.10.1
|
||||
dev: true
|
||||
|
||||
/babel-plugin-transform-strict-mode@6.24.1:
|
||||
resolution: {integrity: sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
dev: true
|
||||
|
||||
/babel-preset-env@1.7.0:
|
||||
resolution: {integrity: sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==}
|
||||
dependencies:
|
||||
babel-plugin-check-es2015-constants: 6.22.0
|
||||
babel-plugin-syntax-trailing-function-commas: 6.22.0
|
||||
babel-plugin-transform-async-to-generator: 6.24.1
|
||||
babel-plugin-transform-es2015-arrow-functions: 6.22.0
|
||||
babel-plugin-transform-es2015-block-scoped-functions: 6.22.0
|
||||
babel-plugin-transform-es2015-block-scoping: 6.26.0
|
||||
babel-plugin-transform-es2015-classes: 6.24.1
|
||||
babel-plugin-transform-es2015-computed-properties: 6.24.1
|
||||
babel-plugin-transform-es2015-destructuring: 6.23.0
|
||||
babel-plugin-transform-es2015-duplicate-keys: 6.24.1
|
||||
babel-plugin-transform-es2015-for-of: 6.23.0
|
||||
babel-plugin-transform-es2015-function-name: 6.24.1
|
||||
babel-plugin-transform-es2015-literals: 6.22.0
|
||||
babel-plugin-transform-es2015-modules-amd: 6.24.1
|
||||
babel-plugin-transform-es2015-modules-commonjs: 6.26.2
|
||||
babel-plugin-transform-es2015-modules-systemjs: 6.24.1
|
||||
babel-plugin-transform-es2015-modules-umd: 6.24.1
|
||||
babel-plugin-transform-es2015-object-super: 6.24.1
|
||||
babel-plugin-transform-es2015-parameters: 6.24.1
|
||||
babel-plugin-transform-es2015-shorthand-properties: 6.24.1
|
||||
babel-plugin-transform-es2015-spread: 6.22.0
|
||||
babel-plugin-transform-es2015-sticky-regex: 6.24.1
|
||||
babel-plugin-transform-es2015-template-literals: 6.22.0
|
||||
babel-plugin-transform-es2015-typeof-symbol: 6.23.0
|
||||
babel-plugin-transform-es2015-unicode-regex: 6.24.1
|
||||
babel-plugin-transform-exponentiation-operator: 6.24.1
|
||||
babel-plugin-transform-regenerator: 6.26.0
|
||||
browserslist: 3.2.8
|
||||
invariant: 2.2.4
|
||||
semver: 5.7.2
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-register@6.26.0:
|
||||
resolution: {integrity: sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==}
|
||||
dependencies:
|
||||
babel-core: 6.26.3
|
||||
babel-runtime: 6.26.0
|
||||
core-js: 2.6.12
|
||||
home-or-tmp: 2.0.0
|
||||
lodash: 4.17.21
|
||||
mkdirp: 0.5.6
|
||||
source-map-support: 0.4.18
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-runtime@6.26.0:
|
||||
resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==}
|
||||
dependencies:
|
||||
core-js: 2.6.12
|
||||
regenerator-runtime: 0.11.1
|
||||
dev: true
|
||||
|
||||
/babel-template@6.26.0:
|
||||
resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-traverse: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
babylon: 6.18.0
|
||||
lodash: 4.17.21
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-traverse@6.26.0:
|
||||
resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==}
|
||||
dependencies:
|
||||
babel-code-frame: 6.26.0
|
||||
babel-messages: 6.23.0
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
babylon: 6.18.0
|
||||
debug: 2.6.9
|
||||
globals: 9.18.0
|
||||
invariant: 2.2.4
|
||||
lodash: 4.17.21
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/babel-types@6.26.0:
|
||||
resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
esutils: 2.0.3
|
||||
lodash: 4.17.21
|
||||
to-fast-properties: 1.0.3
|
||||
dev: true
|
||||
|
||||
/babylon@6.18.0:
|
||||
resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/balanced-match@1.0.2:
|
||||
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
|
||||
|
||||
@@ -960,6 +1479,10 @@ packages:
|
||||
resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
|
||||
dev: true
|
||||
|
||||
/big.js@5.2.2:
|
||||
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
|
||||
dev: true
|
||||
|
||||
/bin-build@3.0.0:
|
||||
resolution: {integrity: sha512-jcUOof71/TNAI2uM5uoUaDq2ePcVBQ3R/qhxAz1rX7UfvduAL/RXD3jXzvn8cVcDJdGVkiR1shal3OH0ImpuhA==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -1143,6 +1666,14 @@ packages:
|
||||
safe-buffer: 5.2.1
|
||||
dev: false
|
||||
|
||||
/browserslist@3.2.8:
|
||||
resolution: {integrity: sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
caniuse-lite: 1.0.30001603
|
||||
electron-to-chromium: 1.4.722
|
||||
dev: true
|
||||
|
||||
/browserslist@4.23.0:
|
||||
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
|
||||
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
|
||||
@@ -1159,6 +1690,12 @@ packages:
|
||||
engines: {node: '>=16.20.1'}
|
||||
dev: false
|
||||
|
||||
/btoa@1.2.1:
|
||||
resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==}
|
||||
engines: {node: '>= 0.4.0'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/buffer-alloc-unsafe@1.1.0:
|
||||
resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
|
||||
dev: true
|
||||
@@ -1340,6 +1877,13 @@ packages:
|
||||
safe-buffer: 5.2.1
|
||||
dev: false
|
||||
|
||||
/clean-css@4.2.4:
|
||||
resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==}
|
||||
engines: {node: '>= 4.0'}
|
||||
dependencies:
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/clean-css@5.3.3:
|
||||
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
|
||||
engines: {node: '>= 10.0'}
|
||||
@@ -1475,6 +2019,10 @@ packages:
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: true
|
||||
|
||||
/convert-source-map@1.9.0:
|
||||
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
|
||||
dev: true
|
||||
|
||||
/cookie-signature@1.0.6:
|
||||
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
|
||||
dev: true
|
||||
@@ -1499,6 +2047,12 @@ packages:
|
||||
webpack: 5.91.0(webpack-cli@5.1.4)
|
||||
dev: true
|
||||
|
||||
/core-js@2.6.12:
|
||||
resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==}
|
||||
deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.
|
||||
requiresBuild: true
|
||||
dev: true
|
||||
|
||||
/core-util-is@1.0.3:
|
||||
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
||||
|
||||
@@ -1809,6 +2363,13 @@ packages:
|
||||
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
|
||||
dev: true
|
||||
|
||||
/detect-indent@4.0.0:
|
||||
resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
repeating: 2.0.1
|
||||
dev: true
|
||||
|
||||
/detect-node@2.1.0:
|
||||
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
|
||||
dev: true
|
||||
@@ -1955,6 +2516,11 @@ packages:
|
||||
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
|
||||
dev: true
|
||||
|
||||
/emojis-list@3.0.0:
|
||||
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
|
||||
engines: {node: '>= 4'}
|
||||
dev: true
|
||||
|
||||
/encodeurl@1.0.2:
|
||||
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
|
||||
engines: {node: '>= 0.8'}
|
||||
@@ -2050,6 +2616,11 @@ packages:
|
||||
engines: {node: '>=4.0'}
|
||||
dev: true
|
||||
|
||||
/esutils@2.0.3:
|
||||
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/etag@1.8.1:
|
||||
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
@@ -2184,6 +2755,21 @@ packages:
|
||||
sort-keys-length: 1.0.1
|
||||
dev: true
|
||||
|
||||
/extract-loader@5.1.0:
|
||||
resolution: {integrity: sha512-+U7sMNULTgm3d3G4hE+N7Rvr/Npsxa7M1jfgvhyYdJuOnyLepm9e2gGuriKw1mrX+mJnX4krPfKI4qyLJ5x94w==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
dependencies:
|
||||
babel-core: 6.26.3
|
||||
babel-plugin-add-module-exports: 1.0.4
|
||||
babel-preset-env: 1.7.0
|
||||
babel-runtime: 6.26.0
|
||||
btoa: 1.2.1
|
||||
loader-utils: 1.4.2
|
||||
resolve: 1.22.8
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
dev: true
|
||||
|
||||
/fast-deep-equal@3.1.3:
|
||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||
dev: true
|
||||
@@ -2509,6 +3095,11 @@ packages:
|
||||
once: 1.4.0
|
||||
path-is-absolute: 1.0.1
|
||||
|
||||
/globals@9.18.0:
|
||||
resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/globby@12.2.0:
|
||||
resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==}
|
||||
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
||||
@@ -2684,6 +3275,14 @@ packages:
|
||||
minimalistic-crypto-utils: 1.0.1
|
||||
dev: false
|
||||
|
||||
/home-or-tmp@2.0.0:
|
||||
resolution: {integrity: sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dependencies:
|
||||
os-homedir: 1.0.2
|
||||
os-tmpdir: 1.0.2
|
||||
dev: true
|
||||
|
||||
/hosted-git-info@2.8.9:
|
||||
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
|
||||
dev: true
|
||||
@@ -2988,6 +3587,12 @@ packages:
|
||||
p-is-promise: 1.1.0
|
||||
dev: true
|
||||
|
||||
/invariant@2.2.4:
|
||||
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
|
||||
dependencies:
|
||||
loose-envify: 1.4.0
|
||||
dev: true
|
||||
|
||||
/ipaddr.js@1.9.1:
|
||||
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
|
||||
engines: {node: '>= 0.10'}
|
||||
@@ -3194,6 +3799,10 @@ packages:
|
||||
resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
|
||||
dev: false
|
||||
|
||||
/js-tokens@3.0.2:
|
||||
resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==}
|
||||
dev: true
|
||||
|
||||
/js-tokens@4.0.0:
|
||||
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
|
||||
dev: true
|
||||
@@ -3205,6 +3814,16 @@ packages:
|
||||
argparse: 2.0.1
|
||||
dev: true
|
||||
|
||||
/jsesc@0.5.0:
|
||||
resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/jsesc@1.3.0:
|
||||
resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/json-buffer@3.0.0:
|
||||
resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==}
|
||||
dev: true
|
||||
@@ -3221,6 +3840,18 @@ packages:
|
||||
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
|
||||
dev: true
|
||||
|
||||
/json5@0.5.1:
|
||||
resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
/json5@1.0.2:
|
||||
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
minimist: 1.2.8
|
||||
dev: true
|
||||
|
||||
/jsonc-parser@3.2.1:
|
||||
resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
|
||||
dev: false
|
||||
@@ -3286,6 +3917,15 @@ packages:
|
||||
'@types/trusted-types': 2.0.7
|
||||
dev: false
|
||||
|
||||
/lit-scss-loader@2.0.1(webpack@5.91.0):
|
||||
resolution: {integrity: sha512-2PvmHuklfZx+OgudhU2zH4SrKyPdzQ9eOQsYoxGEga10dcAwmiMx/6UjOdI13i/BHxcElOqSmTkJ4hBxZrO7dQ==}
|
||||
peerDependencies:
|
||||
webpack: ^5.37.1
|
||||
dependencies:
|
||||
clean-css: 4.2.4
|
||||
webpack: 5.91.0(webpack-cli@5.1.4)
|
||||
dev: true
|
||||
|
||||
/lit@3.1.2:
|
||||
resolution: {integrity: sha512-VZx5iAyMtX7CV4K8iTLdCkMaYZ7ipjJZ0JcSdJ0zIdGxxyurjIn7yuuSxNBD7QmjvcNJwr0JS4cAdAtsy7gZ6w==}
|
||||
dependencies:
|
||||
@@ -3310,6 +3950,15 @@ packages:
|
||||
engines: {node: '>=6.11.5'}
|
||||
dev: true
|
||||
|
||||
/loader-utils@1.4.2:
|
||||
resolution: {integrity: sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==}
|
||||
engines: {node: '>=4.0.0'}
|
||||
dependencies:
|
||||
big.js: 5.2.2
|
||||
emojis-list: 3.0.0
|
||||
json5: 1.0.2
|
||||
dev: true
|
||||
|
||||
/locate-path@5.0.0:
|
||||
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -3337,6 +3986,13 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/loose-envify@1.4.0:
|
||||
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
js-tokens: 4.0.0
|
||||
dev: true
|
||||
|
||||
/loud-rejection@1.6.0:
|
||||
resolution: {integrity: sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -3559,6 +4215,13 @@ packages:
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
dev: true
|
||||
|
||||
/mkdirp@0.5.6:
|
||||
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
minimist: 1.2.8
|
||||
dev: true
|
||||
|
||||
/ms@2.0.0:
|
||||
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
|
||||
dev: true
|
||||
@@ -3746,6 +4409,16 @@ packages:
|
||||
arch: 2.2.0
|
||||
dev: true
|
||||
|
||||
/os-homedir@1.0.2:
|
||||
resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/os-tmpdir@1.0.2:
|
||||
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/p-cancelable@0.3.0:
|
||||
resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==}
|
||||
engines: {node: '>=4'}
|
||||
@@ -4124,6 +4797,11 @@ packages:
|
||||
renderkid: 3.0.0
|
||||
dev: true
|
||||
|
||||
/private@0.1.8:
|
||||
resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==}
|
||||
engines: {node: '>= 0.6'}
|
||||
dev: true
|
||||
|
||||
/process-nextick-args@2.0.1:
|
||||
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
|
||||
|
||||
@@ -4283,14 +4961,49 @@ packages:
|
||||
strip-indent: 1.0.1
|
||||
dev: true
|
||||
|
||||
/regenerate@1.4.2:
|
||||
resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
|
||||
dev: true
|
||||
|
||||
/regenerator-runtime@0.11.1:
|
||||
resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==}
|
||||
dev: true
|
||||
|
||||
/regenerator-runtime@0.14.1:
|
||||
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
|
||||
dev: true
|
||||
|
||||
/regenerator-transform@0.10.1:
|
||||
resolution: {integrity: sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==}
|
||||
dependencies:
|
||||
babel-runtime: 6.26.0
|
||||
babel-types: 6.26.0
|
||||
private: 0.1.8
|
||||
dev: true
|
||||
|
||||
/regexp-to-ast@0.5.0:
|
||||
resolution: {integrity: sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==}
|
||||
dev: false
|
||||
|
||||
/regexpu-core@2.0.0:
|
||||
resolution: {integrity: sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==}
|
||||
dependencies:
|
||||
regenerate: 1.4.2
|
||||
regjsgen: 0.2.0
|
||||
regjsparser: 0.1.5
|
||||
dev: true
|
||||
|
||||
/regjsgen@0.2.0:
|
||||
resolution: {integrity: sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==}
|
||||
dev: true
|
||||
|
||||
/regjsparser@0.1.5:
|
||||
resolution: {integrity: sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
jsesc: 0.5.0
|
||||
dev: true
|
||||
|
||||
/relateurl@0.2.7:
|
||||
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
|
||||
engines: {node: '>= 0.10'}
|
||||
@@ -4659,6 +5372,11 @@ packages:
|
||||
engines: {node: '>=14'}
|
||||
dev: true
|
||||
|
||||
/slash@1.0.0:
|
||||
resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/slash@3.0.0:
|
||||
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
||||
engines: {node: '>=8'}
|
||||
@@ -4708,6 +5426,12 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/source-map-support@0.4.18:
|
||||
resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==}
|
||||
dependencies:
|
||||
source-map: 0.5.7
|
||||
dev: true
|
||||
|
||||
/source-map-support@0.5.21:
|
||||
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
|
||||
dependencies:
|
||||
@@ -4715,6 +5439,11 @@ packages:
|
||||
source-map: 0.6.1
|
||||
dev: true
|
||||
|
||||
/source-map@0.5.7:
|
||||
resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/source-map@0.6.1:
|
||||
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
@@ -5049,6 +5778,11 @@ packages:
|
||||
resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==}
|
||||
dev: true
|
||||
|
||||
/to-fast-properties@1.0.3:
|
||||
resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
@@ -5086,6 +5820,11 @@ packages:
|
||||
escape-string-regexp: 1.0.5
|
||||
dev: true
|
||||
|
||||
/trim-right@1.0.1:
|
||||
resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
/ts-lit-plugin@2.0.2:
|
||||
resolution: {integrity: sha512-DPXlVxhjWHxg8AyBLcfSYt2JXgpANV1ssxxwjY98o26gD8MzeiM68HFW9c2VeDd1CjoR3w7B/6/uKxwBQe+ioA==}
|
||||
dependencies:
|
||||
|
||||
@@ -1,15 +1,59 @@
|
||||
import { HTMLTemplateResult, html, css } from "lit";
|
||||
import { HTMLTemplateResult, html, css, CSSResultGroup } from "lit";
|
||||
import { customElement, property } from "lit/decorators.js";
|
||||
import { BaseElement } from "../components";
|
||||
import { BaseElement, defaultCss } from "../components";
|
||||
import "./nav.ts";
|
||||
|
||||
@customElement('ic10emu-app')
|
||||
import "@shoelace-style/shoelace/dist/components/split-panel/split-panel.js";
|
||||
|
||||
import "../editor";
|
||||
|
||||
@customElement("ic10emu-app")
|
||||
export class App extends BaseElement {
|
||||
static styles = [
|
||||
...defaultCss,
|
||||
css`
|
||||
:host {
|
||||
height: 100vh;
|
||||
display: block;
|
||||
}
|
||||
.app-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
.app-body {
|
||||
flex-grow: 1;
|
||||
// z-index: auto;
|
||||
}
|
||||
.z-fix {
|
||||
z-index: 900;
|
||||
}
|
||||
sl-split-panel {
|
||||
height: 100%;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
}
|
||||
|
||||
protected render(): HTMLTemplateResult {
|
||||
return html`<app-nav></app-nav>`;
|
||||
return html`
|
||||
<div class="app-container">
|
||||
<app-nav class=z-fix></app-nav>
|
||||
<div class="app-body">
|
||||
<sl-split-panel
|
||||
style="--min: 20em; --max: calc(100% - 20em);"
|
||||
primary="start"
|
||||
snap="512px 50%"
|
||||
snap-threshold="15"
|
||||
>
|
||||
<ace-ic10 slot="start"></ace-ic10>
|
||||
<div slot="end">Controls</div>
|
||||
</sl-split-panel>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { HTMLTemplateResult, html, css } from "lit";
|
||||
import { customElement, property } from "lit/decorators.js";
|
||||
import { BaseElement } from "../components";
|
||||
import { BaseElement, defaultCss } from "../components";
|
||||
import "@shoelace-style/shoelace/dist/components/icon-button/icon-button.js";
|
||||
import "@shoelace-style/shoelace/dist/components/menu/menu.js";
|
||||
import "@shoelace-style/shoelace/dist/components/divider/divider.js";
|
||||
@@ -9,66 +9,81 @@ import "@shoelace-style/shoelace/dist/components/dropdown/dropdown.js";
|
||||
|
||||
@customElement("app-nav")
|
||||
export class Nav extends BaseElement {
|
||||
static styles = css`
|
||||
.nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.navbar {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: left;
|
||||
justify-content: space-between;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
.navbar-nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.ps-2 {
|
||||
padding-left: 0.5rem !important;
|
||||
}
|
||||
.ms-2 {
|
||||
margin-left: 0.5rem !important;
|
||||
}
|
||||
.ms-auto {
|
||||
margin-left: auto !important;
|
||||
}
|
||||
.flex-row {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
.d-flex {
|
||||
display: flex !important;
|
||||
}
|
||||
@media (min-width: 768px) .d-md-flex {
|
||||
display: flex !important;
|
||||
}
|
||||
@media (min-width: 576px) .d-sm-none {
|
||||
display: none !important;
|
||||
}
|
||||
.d-none {
|
||||
display: none !important;
|
||||
}
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.navbar-text {
|
||||
padding: 0;
|
||||
padding-right: 10px;
|
||||
position: relative;
|
||||
color: #fff;
|
||||
}
|
||||
`;
|
||||
static styles = [
|
||||
...defaultCss,
|
||||
css`
|
||||
.nav {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.navbar {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: left;
|
||||
justify-content: space-between;
|
||||
padding: 0.5rem 0;
|
||||
}
|
||||
.navbar-nav {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-left: 0;
|
||||
margin-bottom: 0;
|
||||
list-style: none;
|
||||
}
|
||||
@media screen and (min-width: 768px) {
|
||||
.navbar-right {
|
||||
display: flex !important;
|
||||
flex-direction: row !important;
|
||||
margin-left: 0.5rem !important;
|
||||
}
|
||||
}
|
||||
.navbar-right {
|
||||
display: none;
|
||||
}
|
||||
ol,
|
||||
ul,
|
||||
dl {
|
||||
margin-top: 0;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.navbar-text {
|
||||
padding: 0;
|
||||
padding-right: 10px;
|
||||
position: relative;
|
||||
color: #fff;
|
||||
}
|
||||
.nav > li > a {
|
||||
color: #fff;
|
||||
line-height: 20px;
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 10px 15px;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.navbar-brand {
|
||||
padding-top: 0.3125rem;
|
||||
padding-bottom: 0.3125rem;
|
||||
margin-right: 1rem;
|
||||
font-size: 1.25rem;
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.dropdown {
|
||||
position: relative;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
nav {
|
||||
border-bottom: 1px solid rgb(108, 117, 125);
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
@@ -77,7 +92,7 @@ export class Nav extends BaseElement {
|
||||
return html`
|
||||
<nav id="navBar" class="navbar navbar-default">
|
||||
<div class="nav navbar-nav ps-2">
|
||||
<sl-dropdown>
|
||||
<sl-dropdown class="dropdown">
|
||||
<sl-icon-button
|
||||
library="fa"
|
||||
name="fas-bars"
|
||||
@@ -85,7 +100,7 @@ export class Nav extends BaseElement {
|
||||
label="Main Menu"
|
||||
></sl-icon-button>
|
||||
|
||||
<sl-menu>
|
||||
<sl-menu class="menu">
|
||||
<sl-menu-item value="share">Share</sl-menu-item>
|
||||
<sl-menu-item value="openFile">Open File</sl-menu-item>
|
||||
<sl-menu-item value="saveAs">Save As</sl-menu-item>
|
||||
@@ -107,18 +122,16 @@ export class Nav extends BaseElement {
|
||||
>
|
||||
</div>
|
||||
|
||||
<div class="nav navbar-nav ms-auto navbar-right d-flex flex-row">
|
||||
<div class="nav navbar-nav ms-auto d-flex flex-row">
|
||||
<a
|
||||
class="navbar-text mt-auto mb-auto align-self-center"
|
||||
href="https://github.com/ryex/ic10emu"
|
||||
>View on Github <i class="fa-brands fa-github"></i
|
||||
></a>
|
||||
>View on Github <sl-icon library="fa" name="fab-github"></sl-icon>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- <div class="flex-grow w-100"> </div> -->
|
||||
<ul
|
||||
class="nav navbar-nav navbar-right flex-row d-sm-none d-none d-md-flex"
|
||||
>
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<p class="navbar-text mt-auto mb-auto align-self-center">
|
||||
Official Stationeers:
|
||||
</p>
|
||||
|
||||
@@ -1,7 +1,38 @@
|
||||
import { LitElement, css } from "lit";
|
||||
import { CSSResultGroup, LitElement, css, unsafeCSS } from "lit";
|
||||
import shoelaceDark from "@shoelace-style/shoelace/dist/themes/dark.styles.js";
|
||||
|
||||
|
||||
export const defaultCss = [
|
||||
shoelaceDark,
|
||||
css`
|
||||
.ps-2 {
|
||||
padding-left: 0.5rem !important;
|
||||
}
|
||||
.ms-2 {
|
||||
margin-left: 0.5rem !important;
|
||||
}
|
||||
.ms-auto {
|
||||
margin-left: auto !important;
|
||||
}
|
||||
.flex-row {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
.d-flex {
|
||||
display: flex !important;
|
||||
}
|
||||
.align-self-center {
|
||||
align-self: center !important;
|
||||
}
|
||||
.mb-auto {
|
||||
margin-bottom: auto !important;
|
||||
}
|
||||
.mt-auto {
|
||||
margin-top: auto !important;
|
||||
}
|
||||
`,
|
||||
];
|
||||
|
||||
export class BaseElement extends LitElement {
|
||||
// Some default styles
|
||||
static styles = shoelaceDark;
|
||||
static styles: CSSResultGroup = defaultCss;
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
import { BaseElement } from './base';
|
||||
import { BaseElement, defaultCss } from './base';
|
||||
|
||||
export { BaseElement }
|
||||
export { BaseElement, defaultCss }
|
||||
|
||||
@@ -2,6 +2,7 @@ import ace from "ace-builds";
|
||||
import "ace-builds/esm-resolver";
|
||||
|
||||
import { AceLanguageClient } from "ace-linters/build/ace-language-client";
|
||||
import { LanguageProvider } from "ace-linters/types/language-provider";
|
||||
|
||||
import { IC10EditorUI } from "./ui";
|
||||
import { Range } from "ace-builds";
|
||||
@@ -33,12 +34,12 @@ declare global {
|
||||
}
|
||||
}
|
||||
|
||||
import { BaseElement } from "../components";
|
||||
import { html, css } from "lit";
|
||||
import { BaseElement, defaultCss } from "../components";
|
||||
import { html, css, HTMLTemplateResult } from "lit";
|
||||
import { customElement, property } from "lit/decorators.js";
|
||||
|
||||
@customElement("ace-ic10")
|
||||
class IC10Editor extends BaseElement {
|
||||
export class IC10Editor extends BaseElement {
|
||||
mode: string;
|
||||
settings: {
|
||||
keyboard: string;
|
||||
@@ -52,74 +53,262 @@ class IC10Editor extends BaseElement {
|
||||
accessor active_session: number = 0;
|
||||
|
||||
active_line_markers: Map<number, number | null> = new Map();
|
||||
languageProvider?: AceLanguageClient;
|
||||
ui: IC10EditorUI;
|
||||
languageProvider?: LanguageProvider;
|
||||
// ui: IC10EditorUI;
|
||||
|
||||
static styles = [
|
||||
...defaultCss,
|
||||
css`
|
||||
:host {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#editor {
|
||||
// border: 1px solid;
|
||||
// border-radius: 4px;
|
||||
@apply --ace-widget-editor;
|
||||
}
|
||||
#editorStatusbar {
|
||||
z-index: 9 !important;
|
||||
position: absolute !important;
|
||||
right: 4px;
|
||||
bottom: 4px;
|
||||
}
|
||||
.ace_status-indicator {
|
||||
background-color: #777;
|
||||
color: white;
|
||||
text-align: center;
|
||||
border: none;
|
||||
border-radius: 7px;
|
||||
padding-right: 3px;
|
||||
padding-left: 3px;
|
||||
padding-bottom: 1px;
|
||||
font-size: small;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.hide_statusbar {
|
||||
display: none;
|
||||
}
|
||||
.ace_marker-layer .green {
|
||||
// background-color: ;
|
||||
// color: ;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .darkGrey {
|
||||
// background-color: ;
|
||||
// color: ;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .red {
|
||||
// background-color: ;
|
||||
// color: ;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .blue {
|
||||
// background-color: ;
|
||||
// color: ;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .orange {
|
||||
background-color: #ff9900;
|
||||
color: #555;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_placeholder {
|
||||
color: #808080 !important;
|
||||
// font-family: "" !important;
|
||||
transform: scale(1) !important;
|
||||
opacity: 1 !important;
|
||||
font-style: italic !important;
|
||||
}
|
||||
/* ------------------------------------------------------------------------------------------
|
||||
* Editor Search Form
|
||||
* --------------------------------------------------------------------------------------- */
|
||||
.ace_search {
|
||||
background-color: #2b3035;
|
||||
color: #dee2e6;
|
||||
border: 1px solid #495057;
|
||||
border-top: 0 none;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 4px 6px 0 4px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: 99;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.ace_search.left {
|
||||
border-left: 0 none;
|
||||
border-radius: 0px 0px 5px 0px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.ace_search.right {
|
||||
border-radius: 0px 0px 0px 5px;
|
||||
border-right: 0 none;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.ace_search_form,
|
||||
.ace_replace_form {
|
||||
margin: 0 20px 4px 0;
|
||||
overflow: hidden;
|
||||
line-height: 1.9;
|
||||
}
|
||||
|
||||
.ace_replace_form {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ace_search_form.ace_nomatch {
|
||||
outline: 1px solid red;
|
||||
}
|
||||
|
||||
.ace_search_field {
|
||||
border-radius: 3px 0 0 3px;
|
||||
background-color: #343a40;
|
||||
color: #dee2e6;
|
||||
border: 1px solid #41464b;
|
||||
border-right: 0 none;
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
font-size: inherit;
|
||||
margin: 0;
|
||||
line-height: inherit;
|
||||
padding: 0 6px;
|
||||
min-width: 17em;
|
||||
vertical-align: top;
|
||||
min-height: 1.8em;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.ace_searchbtn {
|
||||
border: 1px solid #6c757d;
|
||||
line-height: inherit;
|
||||
display: inline-block;
|
||||
padding: 0 6px;
|
||||
background: #343a40;
|
||||
border-right: 0 none;
|
||||
border-left: 1px solid #6c757d;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.ace_searchbtn:last-child {
|
||||
border-radius: 0 3px 3px 0;
|
||||
border-right: 1px solid #6c757d;
|
||||
}
|
||||
|
||||
.ace_searchbtn:disabled {
|
||||
background: none;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.ace_searchbtn:hover {
|
||||
background-color: #161719;
|
||||
}
|
||||
|
||||
.ace_searchbtn.prev,
|
||||
.ace_searchbtn.next {
|
||||
padding: 0px 0.7em;
|
||||
}
|
||||
|
||||
.ace_searchbtn.prev:after,
|
||||
.ace_searchbtn.next:after {
|
||||
content: "";
|
||||
border: solid 2px #6c757d;
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
border-width: 2px 0 0 2px;
|
||||
display: inline-block;
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.ace_searchbtn.next:after {
|
||||
border-width: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
.ace_searchbtn_close {
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==)
|
||||
no-repeat 50% 0;
|
||||
border-radius: 50%;
|
||||
border: 0 none;
|
||||
color: #343a40;
|
||||
cursor: pointer;
|
||||
font: 16px/16px Arial;
|
||||
padding: 0;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
top: 9px;
|
||||
right: 7px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.ace_searchbtn_close:hover {
|
||||
background-color: #656565;
|
||||
background-position: 50% 100%;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.ace_button {
|
||||
background-color: #343a40;
|
||||
margin-left: 2px;
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
overflow: hidden;
|
||||
opacity: 0.7;
|
||||
border: 1px solid #6c757d;
|
||||
padding: 1px;
|
||||
box-sizing: border-box !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.ace_button:hover {
|
||||
background-color: #161719;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.ace_button:active {
|
||||
background-color: #6c757d;
|
||||
}
|
||||
|
||||
.ace_button.checked {
|
||||
background-color: #6c757d;
|
||||
border-color: #6c757d;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.ace_search_options {
|
||||
margin-bottom: 3px;
|
||||
text-align: right;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.ace_search_counter {
|
||||
float: left;
|
||||
font-family: arial;
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* End Ace Search
|
||||
* --------------- */
|
||||
`,
|
||||
];
|
||||
|
||||
static styles = css`
|
||||
:host {
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
#editor {
|
||||
border: var(--lae-border, 1px solid var(--lumo-contrast-20pct));
|
||||
border-radius: var(--lae-border-radius, var(--lumo-border-radius));
|
||||
@apply --ace-widget-editor;
|
||||
}
|
||||
#editorStatusbar {
|
||||
z-index: 9 !important;
|
||||
position: absolute !important;
|
||||
right: 4px;
|
||||
bottom: 4px;
|
||||
}
|
||||
.ace_status-indicator {
|
||||
background-color: var(--las-background-color, #777);
|
||||
color: var(--las-color, white);
|
||||
text-align: center;
|
||||
border: none;
|
||||
border-radius: var(--las-border-radius, 7px);
|
||||
padding-right: 3px;
|
||||
padding-left: 3px;
|
||||
padding-bottom: 1px;
|
||||
font-size: small;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.hide_statusbar {
|
||||
display: none;
|
||||
}
|
||||
.ace_marker-layer .green {
|
||||
background-color: var(--lumo-success-color);
|
||||
color: var(--lumo-primary-contrast-color);
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .darkGrey {
|
||||
background-color: var(--lumo-shade-50pct);
|
||||
color: var(--lumo-primary-contrast-color);
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .red {
|
||||
background-color: var(--lumo-error-color);
|
||||
color: var(--lumo-primary-contrast-color);
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .blue {
|
||||
background-color: var(--lumo-primary-color);
|
||||
color: var(--lumo-primary-contrast-color);
|
||||
position: absolute;
|
||||
}
|
||||
.ace_marker-layer .orange {
|
||||
background-color: #ff9900;
|
||||
color: #555;
|
||||
position: absolute;
|
||||
}
|
||||
.ace_placeholder {
|
||||
color: #808080 !important;
|
||||
font-family: var(--lumo-font-family) !important;
|
||||
transform: scale(1) !important;
|
||||
opacity: 1 !important;
|
||||
font-style: italic !important;
|
||||
}
|
||||
`;
|
||||
initialInit: boolean;
|
||||
editorDiv: HTMLElement;
|
||||
editorContainerDiv: HTMLElement;
|
||||
@@ -135,7 +324,7 @@ class IC10Editor extends BaseElement {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
console.log('constructing editor')
|
||||
console.log("constructing editor");
|
||||
|
||||
window.Editor = this;
|
||||
this.mode = "ace/mode/ic10";
|
||||
@@ -153,54 +342,9 @@ class IC10Editor extends BaseElement {
|
||||
// this.ui = new IC10EditorUI(this);
|
||||
|
||||
const that = this;
|
||||
|
||||
App.session.onLoad((session: Session) => {
|
||||
const updated_ids = [];
|
||||
for (const [id, _] of session.programs) {
|
||||
updated_ids.push(id);
|
||||
that.createOrSetSession(id, session.programs.get(id));
|
||||
}
|
||||
that.activateSession(that.active_session);
|
||||
for (const [id, _] of that.sessions) {
|
||||
if (!updated_ids.includes(id)) {
|
||||
that.destroySession(id);
|
||||
}
|
||||
}
|
||||
});
|
||||
App.session.loadFromFragment();
|
||||
|
||||
App.session.onActiveLine((session: Session) => {
|
||||
for (const id of session.programs.keys()) {
|
||||
const active_line = session.getActiveLine(id);
|
||||
if (typeof active_line !== "undefined") {
|
||||
const marker = that.active_line_markers.get(id);
|
||||
if (marker) {
|
||||
that.sessions.get(id).removeMarker(marker);
|
||||
that.active_line_markers.set(id, null);
|
||||
}
|
||||
const session = that.sessions.get(id);
|
||||
if (session) {
|
||||
that.active_line_markers.set(
|
||||
id,
|
||||
session.addMarker(
|
||||
new Range(active_line, 0, active_line, 1),
|
||||
"vm_ic_active_line",
|
||||
"fullLine",
|
||||
true,
|
||||
),
|
||||
);
|
||||
if (that.active_session == id) {
|
||||
// editor.resize(true);
|
||||
// TODO: Scroll to line if vm was stepped
|
||||
//that.editor.scrollToLine(active_line, true, true, ()=>{})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
protected render() {
|
||||
return html`
|
||||
<div
|
||||
id="editorContainer"
|
||||
@@ -216,7 +360,7 @@ class IC10Editor extends BaseElement {
|
||||
}
|
||||
|
||||
async firstUpdated() {
|
||||
console.log('editor firstUpdated')
|
||||
console.log("editor firstUpdated");
|
||||
if (!ace.require("ace/ext/language_tools")) {
|
||||
await import("ace-builds/src-noconflict/ext-language_tools");
|
||||
}
|
||||
@@ -235,9 +379,9 @@ class IC10Editor extends BaseElement {
|
||||
|
||||
this.initialInit = true;
|
||||
|
||||
this.editorDiv = this.shadowRoot.getElementById("editor");
|
||||
this.editorContainerDiv = this.shadowRoot.getElementById("editorContainer");
|
||||
this.editorStatusbarDiv = this.shadowRoot.getElementById("editorStatusbar");
|
||||
this.editorDiv = this.shadowRoot?.getElementById("editor") as HTMLElement;
|
||||
this.editorContainerDiv = this.shadowRoot?.getElementById("editorContainer") as HTMLElement;
|
||||
this.editorStatusbarDiv = this.shadowRoot?.getElementById("editorStatusbar") as HTMLElement;
|
||||
|
||||
this.editor = ace.edit(this.editorDiv, {
|
||||
mode: this.mode,
|
||||
@@ -282,6 +426,53 @@ class IC10Editor extends BaseElement {
|
||||
this.observer.observe(this.editorContainerDiv);
|
||||
|
||||
this.initializeEditor();
|
||||
|
||||
App.session.onLoad(((e: CustomEvent) => {
|
||||
const session = e.detail;
|
||||
const updated_ids: number[] = [];
|
||||
for (const [id, _] of session.programs) {
|
||||
updated_ids.push(id);
|
||||
that.createOrSetSession(id, session.programs.get(id));
|
||||
}
|
||||
that.activateSession(that.active_session);
|
||||
for (const [id, _] of that.sessions) {
|
||||
if (!updated_ids.includes(id)) {
|
||||
that.destroySession(id);
|
||||
}
|
||||
}
|
||||
}) as EventListener);
|
||||
App.session.loadFromFragment();
|
||||
|
||||
App.session.onActiveLine(((e: CustomEvent) => {
|
||||
const session = e.detail;
|
||||
for (const id of session.programs.keys()) {
|
||||
const active_line = session.getActiveLine(id);
|
||||
if (typeof active_line !== "undefined") {
|
||||
const marker = that.active_line_markers.get(id);
|
||||
if (marker) {
|
||||
that.sessions.get(id)?.removeMarker(marker);
|
||||
that.active_line_markers.set(id, null);
|
||||
}
|
||||
const session = that.sessions.get(id);
|
||||
if (session) {
|
||||
that.active_line_markers.set(
|
||||
id,
|
||||
session.addMarker(
|
||||
new Range(active_line, 0, active_line, 1),
|
||||
"vm_ic_active_line",
|
||||
"fullLine",
|
||||
true,
|
||||
),
|
||||
);
|
||||
if (that.active_session == id) {
|
||||
// editor.resize(true);
|
||||
// TODO: Scroll to line if vm was stepped
|
||||
//that.editor.scrollToLine(active_line, true, true, ()=>{})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}) as EventListener);
|
||||
}
|
||||
|
||||
initializeEditor() {
|
||||
@@ -303,7 +494,7 @@ class IC10Editor extends BaseElement {
|
||||
{ root: null },
|
||||
);
|
||||
this.vScrollbarObserver.observe(
|
||||
this.shadowRoot.querySelector(".ace_scrollbar-v"),
|
||||
this.shadowRoot?.querySelector(".ace_scrollbar-v") as Element,
|
||||
);
|
||||
|
||||
this.hScrollbarObserver = new IntersectionObserver(
|
||||
@@ -311,7 +502,7 @@ class IC10Editor extends BaseElement {
|
||||
{ root: null },
|
||||
);
|
||||
this.hScrollbarObserver.observe(
|
||||
this.shadowRoot.querySelector(".ace_scrollbar-h"),
|
||||
this.shadowRoot?.querySelector(".ace_scrollbar-h"),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -332,7 +523,7 @@ class IC10Editor extends BaseElement {
|
||||
|
||||
/** @private */
|
||||
_vScrollbarHandler() {
|
||||
var vScrollbar = this.shadowRoot.querySelector(
|
||||
var vScrollbar = this.shadowRoot?.querySelector(
|
||||
".ace_scrollbar-v",
|
||||
) as HTMLDivElement;
|
||||
if (vScrollbar.style.display === "none") {
|
||||
@@ -348,7 +539,7 @@ class IC10Editor extends BaseElement {
|
||||
|
||||
/** @private */
|
||||
_hScrollbarHandler() {
|
||||
var hScrollbar = this.shadowRoot.querySelector(
|
||||
var hScrollbar = this.shadowRoot?.querySelector(
|
||||
".ace_scrollbar-h",
|
||||
) as HTMLDivElement;
|
||||
if (hScrollbar.style.display === "none") {
|
||||
@@ -400,7 +591,7 @@ class IC10Editor extends BaseElement {
|
||||
if (!this.sessions.hasOwnProperty(session_id)) {
|
||||
this.newSession(session_id);
|
||||
}
|
||||
this.sessions.get(session_id).setValue(content);
|
||||
this.sessions.get(session_id)?.setValue(content);
|
||||
}
|
||||
|
||||
newSession(session_id: number) {
|
||||
@@ -424,15 +615,18 @@ class IC10Editor extends BaseElement {
|
||||
};
|
||||
// Create a language provider for web worker
|
||||
this.languageProvider = AceLanguageClient.for(serverData as any);
|
||||
(this.languageProvider as any).registerEditor(this.editor);
|
||||
|
||||
this.languageProvider.registerEditor(this.editor);
|
||||
}
|
||||
|
||||
activateSession(session_id: number) {
|
||||
if (!this.sessions.get(session_id)) {
|
||||
return false;
|
||||
}
|
||||
this.editor.setSession(this.sessions.get(session_id));
|
||||
const session = this.sessions.get(session_id);
|
||||
this.editor?.setSession(session);
|
||||
const mode = ace.require(this.mode);
|
||||
const options = mode?.options ?? {};
|
||||
this.languageProvider?.setSessionOptions(session, options)
|
||||
this.active_session = session_id;
|
||||
return true;
|
||||
}
|
||||
@@ -467,16 +661,16 @@ class IC10Editor extends BaseElement {
|
||||
if ((this.active_session = session_id)) {
|
||||
this.activateSession(this.sessions.entries().next().value);
|
||||
}
|
||||
session.destroy();
|
||||
session?.destroy();
|
||||
return true;
|
||||
}
|
||||
|
||||
bindSession(session_id: number, session: ace.Ace.EditSession) {
|
||||
session.on("change", () => {
|
||||
var val = session.getValue();
|
||||
window.App.session.setProgramCode(session_id, val);
|
||||
});
|
||||
bindSession(session_id: number, session?: ace.Ace.EditSession) {
|
||||
if (session) {
|
||||
session.on("change", () => {
|
||||
var val = session.getValue();
|
||||
window.App?.session.setProgramCode(session_id, val);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export { IC10Editor };
|
||||
|
||||
@@ -29,59 +29,59 @@ window.App = App;
|
||||
// const dbPromise = fetch("/data/database.json").then(resp => resp.json());
|
||||
const dbPromise = import("../../data/database.json");
|
||||
|
||||
docReady(() => {
|
||||
App.vm = new VirtualMachine();
|
||||
|
||||
dbPromise.then((db) => App.vm.setupDeviceDatabase(db));
|
||||
|
||||
const init_session_id = App.vm.devices.get(0).id;
|
||||
|
||||
// App.editor = new IC10Editor(init_session_id);
|
||||
|
||||
// setupLspWorker().then((worker) => {
|
||||
// App.editor.setupLsp(worker);
|
||||
// });
|
||||
|
||||
// Menu
|
||||
document.getElementById("mainMenuShare").addEventListener(
|
||||
"click",
|
||||
(_event) => {
|
||||
const link = document.getElementById("shareLinkText") as HTMLInputElement;
|
||||
link.setAttribute("value", window.location.href);
|
||||
link.setSelectionRange(0, 0);
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
document.getElementById("shareLinkCopyButton").addEventListener(
|
||||
"click",
|
||||
(event) => {
|
||||
event.preventDefault();
|
||||
const link = document.getElementById("shareLinkText") as HTMLInputElement;
|
||||
link.select();
|
||||
link.setSelectionRange(0, 99999);
|
||||
navigator.clipboard.writeText(link.value);
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
document.getElementById("mainMenuOpenFile").addEventListener(
|
||||
"click",
|
||||
(_event) => {
|
||||
openFile(App.editor.editor);
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
document.getElementById("mainMenuSaveAs").addEventListener(
|
||||
"click",
|
||||
(_event) => {
|
||||
saveFile(App.editor.editor.getSession().getValue());
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
document.getElementById("mainMenuKeyboardShortcuts").addEventListener(
|
||||
"click",
|
||||
(_event) => {
|
||||
App.editor.editor.execCommand("showKeyboardShortcuts");
|
||||
},
|
||||
{ capture: true },
|
||||
);
|
||||
});
|
||||
// docReady(() => {
|
||||
// App.vm = new VirtualMachine();
|
||||
//
|
||||
// dbPromise.then((db) => App.vm.setupDeviceDatabase(db));
|
||||
//
|
||||
// const init_session_id = App.vm.devices.get(0).id;
|
||||
//
|
||||
// // App.editor = new IC10Editor(init_session_id);
|
||||
//
|
||||
// // setupLspWorker().then((worker) => {
|
||||
// // App.editor.setupLsp(worker);
|
||||
// // });
|
||||
//
|
||||
// // Menu
|
||||
// document.getElementById("mainMenuShare").addEventListener(
|
||||
// "click",
|
||||
// (_event) => {
|
||||
// const link = document.getElementById("shareLinkText") as HTMLInputElement;
|
||||
// link.setAttribute("value", window.location.href);
|
||||
// link.setSelectionRange(0, 0);
|
||||
// },
|
||||
// { capture: true },
|
||||
// );
|
||||
// document.getElementById("shareLinkCopyButton").addEventListener(
|
||||
// "click",
|
||||
// (event) => {
|
||||
// event.preventDefault();
|
||||
// const link = document.getElementById("shareLinkText") as HTMLInputElement;
|
||||
// link.select();
|
||||
// link.setSelectionRange(0, 99999);
|
||||
// navigator.clipboard.writeText(link.value);
|
||||
// },
|
||||
// { capture: true },
|
||||
// );
|
||||
// document.getElementById("mainMenuOpenFile").addEventListener(
|
||||
// "click",
|
||||
// (_event) => {
|
||||
// openFile(App.editor.editor);
|
||||
// },
|
||||
// { capture: true },
|
||||
// );
|
||||
// document.getElementById("mainMenuSaveAs").addEventListener(
|
||||
// "click",
|
||||
// (_event) => {
|
||||
// saveFile(App.editor.editor.getSession().getValue());
|
||||
// },
|
||||
// { capture: true },
|
||||
// );
|
||||
// document.getElementById("mainMenuKeyboardShortcuts").addEventListener(
|
||||
// "click",
|
||||
// (_event) => {
|
||||
// App.editor.editor.execCommand("showKeyboardShortcuts");
|
||||
// },
|
||||
// { capture: true },
|
||||
// );
|
||||
// });
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
const demoCode = `# Highlighting Demo
|
||||
# This is a comment
|
||||
|
||||
@@ -59,32 +58,28 @@ test:
|
||||
add r15 r15 1
|
||||
j ra
|
||||
|
||||
`
|
||||
`;
|
||||
|
||||
interface SessionCbFn {
|
||||
(param: Session): void;
|
||||
interface CustomEvent extends Event {
|
||||
detail: string
|
||||
}
|
||||
|
||||
class Session extends EventTarget {
|
||||
export class Session extends EventTarget {
|
||||
_programs: Map<number, string>;
|
||||
_onLoadCallbacks: SessionCbFn[];
|
||||
_activeSession: number;
|
||||
_activeLines: Map<number, number>;
|
||||
_onActiveLineCallbacks: SessionCbFn[];
|
||||
_activeLine: number;
|
||||
private _save_timeout: ReturnType<typeof setTimeout>;
|
||||
_save_timeout?: ReturnType<typeof setTimeout>;
|
||||
constructor() {
|
||||
super();
|
||||
this._programs = new Map();
|
||||
this._save_timeout = null;
|
||||
this._onLoadCallbacks = [];
|
||||
this._save_timeout = undefined;
|
||||
this._activeSession = 0;
|
||||
this._activeLines = new Map();
|
||||
this._onActiveLineCallbacks = [];
|
||||
this.loadFromFragment();
|
||||
|
||||
const that = this;
|
||||
window.addEventListener('hashchange', (_event) => {
|
||||
window.addEventListener("hashchange", (_event) => {
|
||||
that.loadFromFragment();
|
||||
});
|
||||
}
|
||||
@@ -119,24 +114,28 @@ class Session extends EventTarget {
|
||||
this.save();
|
||||
}
|
||||
|
||||
onLoad(callback: SessionCbFn) {
|
||||
this._onLoadCallbacks.push(callback);
|
||||
onLoad(callback: EventListenerOrEventListenerObject) {
|
||||
this.addEventListener("session-load", callback);
|
||||
}
|
||||
|
||||
_fireOnLoad() {
|
||||
for (const callback of this._onLoadCallbacks) {
|
||||
callback(this);
|
||||
}
|
||||
this.dispatchEvent(
|
||||
new CustomEvent("session-load", {
|
||||
detail: this,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
onActiveLine(callback: SessionCbFn) {
|
||||
this._onActiveLineCallbacks.push(callback);
|
||||
onActiveLine(callback: EventListenerOrEventListenerObject) {
|
||||
this.addEventListener("active-line", callback);
|
||||
}
|
||||
|
||||
_fireOnActiveLine() {
|
||||
for (const callback of this._onActiveLineCallbacks) {
|
||||
callback(this);
|
||||
}
|
||||
this.dispatchEvent(
|
||||
new CustomEvent("activeLine", {
|
||||
detail: this,
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
save() {
|
||||
@@ -146,7 +145,7 @@ class Session extends EventTarget {
|
||||
if (window.App.vm) {
|
||||
window.App.vm.updateCode();
|
||||
}
|
||||
this._save_timeout = null;
|
||||
this._save_timeout = undefined;
|
||||
}, 1000);
|
||||
}
|
||||
|
||||
@@ -161,7 +160,6 @@ class Session extends EventTarget {
|
||||
console.log("Error compressing content fragment:", e);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async loadFromFragment() {
|
||||
@@ -177,7 +175,8 @@ class Session extends EventTarget {
|
||||
if (bytes !== null) {
|
||||
const txt = new TextDecoder().decode(bytes);
|
||||
const data = getJson(txt);
|
||||
if (data === null) { // backwards compatible
|
||||
if (data === null) {
|
||||
// backwards compatible
|
||||
this._programs = new Map([[0, txt]]);
|
||||
this, this._fireOnLoad();
|
||||
return;
|
||||
@@ -192,7 +191,6 @@ class Session extends EventTarget {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
async function decompressFragment(c_bytes: ArrayBuffer) {
|
||||
try {
|
||||
@@ -223,26 +221,31 @@ async function* streamAsyncIterator(stream: ReadableStream) {
|
||||
if (done) return;
|
||||
yield value;
|
||||
}
|
||||
}
|
||||
finally {
|
||||
} finally {
|
||||
reader.releaseLock();
|
||||
}
|
||||
}
|
||||
|
||||
function base64url_encode(buffer: ArrayBuffer) {
|
||||
return btoa(Array.from(new Uint8Array(buffer), b => String.fromCharCode(b)).join(''))
|
||||
.replace(/\+/g, '-')
|
||||
.replace(/\//g, '_')
|
||||
.replace(/=+$/, '');
|
||||
return btoa(
|
||||
Array.from(new Uint8Array(buffer), (b) => String.fromCharCode(b)).join(""),
|
||||
)
|
||||
.replace(/\+/g, "-")
|
||||
.replace(/\//g, "_")
|
||||
.replace(/=+$/, "");
|
||||
}
|
||||
|
||||
function base64url_decode(value: string): ArrayBuffer {
|
||||
const m = value.length % 4;
|
||||
return Uint8Array.from(atob(
|
||||
value.replace(/-/g, '+')
|
||||
.replace(/_/g, '/')
|
||||
.padEnd(value.length + (m === 0 ? 0 : 4 - m), '=')
|
||||
), c => c.charCodeAt(0)).buffer
|
||||
return Uint8Array.from(
|
||||
atob(
|
||||
value
|
||||
.replace(/-/g, "+")
|
||||
.replace(/_/g, "/")
|
||||
.padEnd(value.length + (m === 0 ? 0 : 4 - m), "="),
|
||||
),
|
||||
(c) => c.charCodeAt(0),
|
||||
).buffer;
|
||||
}
|
||||
|
||||
async function concatUintArrays(arrays: Uint8Array[]) {
|
||||
@@ -253,10 +256,8 @@ async function concatUintArrays(arrays: Uint8Array[]) {
|
||||
|
||||
async function compress(bytes: ArrayBuffer) {
|
||||
const s = new Blob([bytes]).stream();
|
||||
const cs = s.pipeThrough(
|
||||
new CompressionStream('deflate-raw')
|
||||
);
|
||||
const chunks = [];
|
||||
const cs = s.pipeThrough(new CompressionStream("deflate-raw"));
|
||||
const chunks: Uint8Array[] = [];
|
||||
for await (const chunk of streamAsyncIterator(cs)) {
|
||||
chunks.push(chunk);
|
||||
}
|
||||
@@ -265,14 +266,11 @@ async function compress(bytes: ArrayBuffer) {
|
||||
|
||||
async function decompress(bytes: ArrayBuffer) {
|
||||
const s = new Blob([bytes]).stream();
|
||||
const ds = s.pipeThrough(
|
||||
new DecompressionStream('deflate-raw')
|
||||
);
|
||||
const chunks = [];
|
||||
const ds = s.pipeThrough(new DecompressionStream("deflate-raw"));
|
||||
const chunks: Uint8Array[] = [];
|
||||
for await (const chunk of streamAsyncIterator(ds)) {
|
||||
chunks.push(chunk);
|
||||
}
|
||||
return await concatUintArrays(chunks);
|
||||
}
|
||||
|
||||
export { Session, SessionCbFn };
|
||||
|
||||
@@ -18,17 +18,6 @@ body {
|
||||
box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);
|
||||
}
|
||||
|
||||
.ace_status-indicator {
|
||||
color: #dee2e6;
|
||||
position: relative;
|
||||
bottom: 4px;
|
||||
border-left: 1px solid;
|
||||
border-right: 1px solid;
|
||||
height: 20px;
|
||||
float: right;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
#ace_settingsmenu,
|
||||
#kbshortcutmenu {
|
||||
@@ -107,191 +96,6 @@ body {
|
||||
box-shadow: 0px 2px 3px 0px #555;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------------------------------
|
||||
* Editor Search Form
|
||||
* --------------------------------------------------------------------------------------- */
|
||||
.ace_search {
|
||||
background-color: #2b3035;
|
||||
color: #dee2e6;
|
||||
border: 1px solid #495057;
|
||||
border-top: 0 none;
|
||||
overflow: hidden;
|
||||
margin: 0;
|
||||
padding: 4px 6px 0 4px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
z-index: 99;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.ace_search.left {
|
||||
border-left: 0 none;
|
||||
border-radius: 0px 0px 5px 0px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.ace_search.right {
|
||||
border-radius: 0px 0px 0px 5px;
|
||||
border-right: 0 none;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.ace_search_form,
|
||||
.ace_replace_form {
|
||||
margin: 0 20px 4px 0;
|
||||
overflow: hidden;
|
||||
line-height: 1.9;
|
||||
}
|
||||
|
||||
.ace_replace_form {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ace_search_form.ace_nomatch {
|
||||
outline: 1px solid red;
|
||||
}
|
||||
|
||||
.ace_search_field {
|
||||
border-radius: 3px 0 0 3px;
|
||||
background-color: #343a40;
|
||||
color: #dee2e6;
|
||||
border: 1px solid #41464b;
|
||||
border-right: 0 none;
|
||||
outline: 0;
|
||||
padding: 0;
|
||||
font-size: inherit;
|
||||
margin: 0;
|
||||
line-height: inherit;
|
||||
padding: 0 6px;
|
||||
min-width: 17em;
|
||||
vertical-align: top;
|
||||
min-height: 1.8em;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
.ace_searchbtn {
|
||||
border: 1px solid #6c757d;
|
||||
line-height: inherit;
|
||||
display: inline-block;
|
||||
padding: 0 6px;
|
||||
background: #343a40;
|
||||
border-right: 0 none;
|
||||
border-left: 1px solid #6c757d;
|
||||
;
|
||||
cursor: pointer;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.ace_searchbtn:last-child {
|
||||
border-radius: 0 3px 3px 0;
|
||||
border-right: 1px solid #6c757d;
|
||||
}
|
||||
|
||||
.ace_searchbtn:disabled {
|
||||
background: none;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
.ace_searchbtn:hover {
|
||||
background-color: #161719;
|
||||
}
|
||||
|
||||
.ace_searchbtn.prev,
|
||||
.ace_searchbtn.next {
|
||||
padding: 0px 0.7em
|
||||
}
|
||||
|
||||
.ace_searchbtn.prev:after,
|
||||
.ace_searchbtn.next:after {
|
||||
content: "";
|
||||
border: solid 2px #6c757d;
|
||||
width: 0.5em;
|
||||
height: 0.5em;
|
||||
border-width: 2px 0 0 2px;
|
||||
display: inline-block;
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.ace_searchbtn.next:after {
|
||||
border-width: 0 2px 2px 0;
|
||||
}
|
||||
|
||||
.ace_searchbtn_close {
|
||||
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;
|
||||
border-radius: 50%;
|
||||
border: 0 none;
|
||||
color: #343a40;
|
||||
cursor: pointer;
|
||||
font: 16px/16px Arial;
|
||||
padding: 0;
|
||||
height: 14px;
|
||||
width: 14px;
|
||||
top: 9px;
|
||||
right: 7px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.ace_searchbtn_close:hover {
|
||||
background-color: #656565;
|
||||
background-position: 50% 100%;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.ace_button {
|
||||
background-color: #343a40;
|
||||
margin-left: 2px;
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
overflow: hidden;
|
||||
opacity: 0.7;
|
||||
border: 1px solid #6c757d;
|
||||
padding: 1px;
|
||||
box-sizing: border-box !important;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.ace_button:hover {
|
||||
background-color: #161719;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.ace_button:active {
|
||||
background-color: #6c757d;
|
||||
;
|
||||
}
|
||||
|
||||
.ace_button.checked {
|
||||
background-color: #6c757d;
|
||||
border-color: #6c757d;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.ace_search_options {
|
||||
margin-bottom: 3px;
|
||||
text-align: right;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-o-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.ace_search_counter {
|
||||
float: left;
|
||||
font-family: arial;
|
||||
padding: 0 8px;
|
||||
}
|
||||
|
||||
/* ----------------
|
||||
* End Ace Search
|
||||
* --------------- */
|
||||
|
||||
code {
|
||||
// color: #e685b5
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"sourceMap": true,
|
||||
"noImplicitAny": true,
|
||||
"module": "es2022",
|
||||
"target": "es2020",
|
||||
"target": "es2021",
|
||||
"allowJs": true,
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
@@ -14,5 +14,6 @@
|
||||
"name": "ts-lit-plugin"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": ["node_modules/lit-scss-loader/types.d.ts"]
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const CopyWebpackPlugin = require("copy-webpack-plugin");
|
||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
||||
const miniCssExtractPlugin = require('mini-css-extract-plugin');
|
||||
const HtmlWebpackPlugin = require("html-webpack-plugin");
|
||||
const miniCssExtractPlugin = require("mini-css-extract-plugin");
|
||||
const { SourceMap } = require("module");
|
||||
|
||||
|
||||
const path = require('path');
|
||||
const path = require("path");
|
||||
|
||||
module.exports = {
|
||||
entry: "./src/js/main.ts",
|
||||
@@ -13,67 +13,83 @@ module.exports = {
|
||||
clean: true,
|
||||
},
|
||||
devServer: {
|
||||
static: path.resolve(__dirname, 'dist'),
|
||||
static: path.resolve(__dirname, "dist"),
|
||||
port: 8080,
|
||||
hot: true
|
||||
hot: true,
|
||||
},
|
||||
mode: "development",
|
||||
devtool: "eval-source-map",
|
||||
plugins: [
|
||||
new CopyWebpackPlugin({ patterns: ['img/*.png', 'img/*/*.png', { from: 'data/database.json', to: 'data' }] }),
|
||||
new HtmlWebpackPlugin({ template: './src/index.html' }),
|
||||
new miniCssExtractPlugin()
|
||||
new CopyWebpackPlugin({
|
||||
patterns: [
|
||||
"img/*.png",
|
||||
"img/*/*.png",
|
||||
{ from: "data/database.json", to: "data" },
|
||||
],
|
||||
}),
|
||||
new HtmlWebpackPlugin({ template: "./src/index.html" }),
|
||||
new miniCssExtractPlugin(),
|
||||
],
|
||||
module: {
|
||||
rules: [
|
||||
{
|
||||
test: /\.tsx?$/,
|
||||
use: 'ts-loader',
|
||||
use: "ts-loader",
|
||||
exclude: /node_modules/,
|
||||
},
|
||||
{
|
||||
test: /\.(jpg|png|svg|gif)$/,
|
||||
type: 'asset/resource',
|
||||
type: "asset/resource",
|
||||
},
|
||||
{
|
||||
test: /\.(s?css)$/,
|
||||
use: [{
|
||||
// inject CSS to page
|
||||
loader: miniCssExtractPlugin.loader
|
||||
}, {
|
||||
// translates CSS into CommonJS modules
|
||||
loader: 'css-loader'
|
||||
}, {
|
||||
// Run postcss actions
|
||||
loader: 'postcss-loader',
|
||||
options: {
|
||||
// `postcssOptions` is needed for postcss 8.x;
|
||||
// if you use postcss 7.x skip the key
|
||||
postcssOptions: {
|
||||
// postcss plugins, can be exported to postcss.config.js
|
||||
plugins: function () {
|
||||
return [
|
||||
require('autoprefixer')
|
||||
];
|
||||
}
|
||||
test: /\.css|\.s(c|a)ss$/,
|
||||
use: [
|
||||
{
|
||||
// inject CSS to page
|
||||
loader: miniCssExtractPlugin.loader,
|
||||
},
|
||||
{
|
||||
// translates CSS into CommonJS modules
|
||||
loader: "css-loader",
|
||||
options: {
|
||||
sourceMap: true
|
||||
}
|
||||
}
|
||||
}, {
|
||||
// compiles Sass to CSS
|
||||
loader: 'sass-loader'
|
||||
}],
|
||||
},
|
||||
{
|
||||
// Run postcss actions
|
||||
loader: "postcss-loader",
|
||||
options: {
|
||||
// `postcssOptions` is needed for postcss 8.x;
|
||||
// if you use postcss 7.x skip the key
|
||||
postcssOptions: {
|
||||
// postcss plugins, can be exported to postcss.config.js
|
||||
plugins: function () {
|
||||
return [require("autoprefixer")];
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
// compiles Sass to CSS
|
||||
loader: "sass-loader",
|
||||
options: {
|
||||
sourceMap: true
|
||||
}
|
||||
},
|
||||
],
|
||||
// parser: {
|
||||
// javascript : { importMeta: false }
|
||||
// }
|
||||
},],
|
||||
},
|
||||
],
|
||||
},
|
||||
resolve: {
|
||||
extensions: ['.tsx', '.ts', '.js', '.json'],
|
||||
extensions: [".tsx", ".ts", ".js", ".json"],
|
||||
fallback: {
|
||||
"crypto": require.resolve("crypto-browserify"),
|
||||
"buffer": require.resolve("buffer"),
|
||||
"stream": require.resolve("stream-browserify"),
|
||||
"vm": require.resolve("vm-browserify"),
|
||||
crypto: require.resolve("crypto-browserify"),
|
||||
buffer: require.resolve("buffer"),
|
||||
stream: require.resolve("stream-browserify"),
|
||||
vm: require.resolve("vm-browserify"),
|
||||
},
|
||||
},
|
||||
experiments: {
|
||||
@@ -83,5 +99,5 @@ module.exports = {
|
||||
watchOptions: {
|
||||
aggregateTimeout: 200,
|
||||
poll: 200,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use std::process::Command;
|
||||
use std::process::{Command, ExitStatus};
|
||||
|
||||
use clap::{Parser, Subcommand};
|
||||
|
||||
@@ -91,6 +91,7 @@ fn main() -> Result<(), Error> {
|
||||
build(&args, packages, *release, &workspace, rest)?;
|
||||
}
|
||||
Task::Start {} => {
|
||||
pnpm_install(&args, &workspace)?;
|
||||
eprintln!("Starting server");
|
||||
let mut cmd = Command::new(&args.manager);
|
||||
cmd.current_dir(&workspace.join("www"));
|
||||
@@ -147,3 +148,15 @@ fn build<P: AsRef<std::ffi::OsStr> + std::fmt::Debug + std::fmt::Display>(
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn pnpm_install(
|
||||
args: &Args,
|
||||
workspace: &std::path::Path,
|
||||
) -> Result<ExitStatus, Error> {
|
||||
eprintln!("Running `pnpm install`");
|
||||
let mut cmd = Command::new(&args.manager);
|
||||
cmd.current_dir(&workspace.join("www"));
|
||||
cmd.args(["install"])
|
||||
.status()
|
||||
.map_err(|e| Error::Command(format!("{}", cmd.get_program().to_string_lossy()), e))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user